- This is the new version (1.40.3) of the second extended file
+ This is the new version (1.40.4) of the second extended file
system management programs.
From time to time, I release new versions of e2fsprogs, to fix
are supplied as well.
In case of bugs in these programs, please contact Ted Ts'o at
-tytso@thunk.org or tytso@alum.mit.edu. See the e2fsck man page for
+tytso@mit.edu or tytso@alum.mit.edu. See the e2fsck man page for
suggestions of what sort of information to include when submitting bug
reports for these programs.
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-releated applications.
+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
http://e2fsprogs.sourceforge.net
In case of bugs in these libraries, please contact Ted Ts'o at
-tytso@thunk.org or tytso@alum.mit.edu.
+tytso@mit.edu or tytso@alum.mit.edu.
+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)
===================================
DEVMAPPER_PC_LIBS
DEVMAPPER_LIBS
STATIC_DEVMAPPER_LIBS
+UUIDD_CMT
GETTEXT_PACKAGE
PACKAGE
VERSION
--enable-fsck build fsck wrapper program
--enable-e2initrd-helper build e2initrd-helper program
--enable-blkid-devmapper build with device-mapper support
+ --disable-tls disable use of thread local support
+ --disable-uuidd disable building the uuid daemon
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-diet-libc Use diet libc
+ --with-diet-libc use diet libc
--with-cc=COMPILER select compiler to use
--with-linker=LINKER select linker to use
--with-ccopts=CCOPTS select compiler command line options
+# Check whether --enable-tls was given.
+if test "${enable_tls+set}" = set; then
+ enableval=$enable_tls; if test "$enableval" = "no"
+then
+ try_tls=""
+ echo "Disabling thread local support"
+else
+ try_tls="yes"
+ echo "Enabling thread local support"
+fi
+
+else
+ try_tls="yes"
+echo "Try using thread local support by default"
+
+fi
+
+if test "$try_tls" = "yes"
+then
+
+ { echo "$as_me:$LINENO: checking for thread local storage (TLS) class" >&5
+echo $ECHO_N "checking for thread local storage (TLS) class... $ECHO_C" >&6; }
+ if test "${ac_cv_tls+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ ax_tls_keywords="__thread __declspec(thread) none"
+ for ax_tls_keyword in $ax_tls_keywords; do
+ case $ax_tls_keyword in
+ none) ac_cv_tls=none ; break ;;
+ *)
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+ static void
+ foo(void) {
+ static $ax_tls_keyword int bar;
+ exit(1);
+ }
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_tls=$ax_tls_keyword ; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_tls=none
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ esac
+ done
+
+fi
+
+
+ if test "$ac_cv_tls" != "none"; then
+
+cat >>confdefs.h <<_ACEOF
+#define TLS $ac_cv_tls
+_ACEOF
+
+ fi
+ { echo "$as_me:$LINENO: result: $ac_cv_tls" >&5
+echo "${ECHO_T}$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"
+then
+ echo "Not building uuidd"
+ UUIDD_CMT="#"
+else
+ cat >>confdefs.h <<\_ACEOF
+#define USE_UUIDD 1
+_ACEOF
+
+ UUIDD_CMT=""
+ echo "Building uuidd"
+fi
+
+else
+ cat >>confdefs.h <<\_ACEOF
+#define USE_UUIDD 1
+_ACEOF
+
+UUIDD_CMT=""
+echo "Building uuidd by default"
+
+fi
+
+
MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
GETTEXT_PACKAGE=e2fsprogs
fi
- { echo "$as_me:$LINENO: checking for thread local storage (TLS) class" >&5
-echo $ECHO_N "checking for thread local storage (TLS) class... $ECHO_C" >&6; }
- if test "${ac_cv_tls+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- ax_tls_keywords="__thread __declspec(thread) none"
- for ax_tls_keyword in $ax_tls_keywords; do
- case $ax_tls_keyword in
- none) ac_cv_tls=none ; break ;;
- *)
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
- static void
- foo(void) {
- static $ax_tls_keyword int bar;
- exit(1);
- }
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_tls=$ax_tls_keyword ; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_tls=none
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- esac
- done
-
-fi
-
-
- if test "$ac_cv_tls" != "none"; then
-
-cat >>confdefs.h <<_ACEOF
-#define TLS $ac_cv_tls
-_ACEOF
-
- fi
- { echo "$as_me:$LINENO: result: $ac_cv_tls" >&5
-echo "${ECHO_T}$ac_cv_tls" >&6; }
-
-for ac_header in stdlib.h unistd.h stdarg.h stdint.h errno.h malloc.h mntent.h paths.h dirent.h getopt.h setjmp.h signal.h termios.h linux/fd.h linux/major.h sys/disklabel.h sys/ioctl.h sys/mman.h sys/mkdev.h sys/prctl.h sys/queue.h sys/sockio.h sys/socket.h sys/sysmacros.h sys/time.h sys/stat.h sys/types.h sys/wait.h sys/resource.h net/if_dl.h netinet/in.h utime.h
+for ac_header in stdlib.h unistd.h stdarg.h stdint.h errno.h malloc.h mntent.h paths.h dirent.h getopt.h setjmp.h signal.h termios.h linux/fd.h linux/major.h sys/disklabel.h sys/ioctl.h sys/mman.h sys/mkdev.h sys/prctl.h sys/queue.h sys/sockio.h sys/socket.h sys/sysmacros.h sys/time.h sys/stat.h sys/types.h sys/wait.h sys/resource.h sys/syscall.h net/if_dl.h netinet/in.h utime.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
DEVMAPPER_PC_LIBS!$DEVMAPPER_PC_LIBS$ac_delim
DEVMAPPER_LIBS!$DEVMAPPER_LIBS$ac_delim
STATIC_DEVMAPPER_LIBS!$STATIC_DEVMAPPER_LIBS$ac_delim
+UUIDD_CMT!$UUIDD_CMT$ac_delim
GETTEXT_PACKAGE!$GETTEXT_PACKAGE$ac_delim
PACKAGE!$PACKAGE$ac_delim
VERSION!$VERSION$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 80; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 81; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
dnl Use diet libc
dnl
AC_ARG_WITH([diet-libc],
-[ --with-diet-libc Use diet libc],
+[ --with-diet-libc use diet libc],
CC="diet cc -nostdinc"
AC_MSG_RESULT(CC=$CC))dnl
dnl
dnl
dnl
dnl
+AC_ARG_ENABLE([tls],
+[ --disable-tls disable use of thread local support],
+[if test "$enableval" = "no"
+then
+ try_tls=""
+ echo "Disabling thread local support"
+else
+ try_tls="yes"
+ echo "Enabling thread local support"
+fi]
+,
+try_tls="yes"
+echo "Try using thread local support by default"
+)
+if test "$try_tls" = "yes"
+then
+AX_TLS
+fi
+dnl
+dnl
+dnl
+AC_ARG_ENABLE([uuidd],
+[ --disable-uuidd disable building the uuid daemon],
+[if test "$enableval" = "no"
+then
+ echo "Not building uuidd"
+ UUIDD_CMT="#"
+else
+ AC_DEFINE(USE_UUIDD)
+ UUIDD_CMT=""
+ echo "Building uuidd"
+fi]
+,
+AC_DEFINE(USE_UUIDD)
+UUIDD_CMT=""
+echo "Building uuidd by default"
+)
+AC_SUBST(UUIDD_CMT)
+dnl
+dnl
+dnl
MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
AC_SUBST_FILE(MAKEFILE_LIBRARY)
dnl
else
AC_CHECK_PROGS(BUILD_CC, gcc cc)
fi
-AX_TLS
-AC_CHECK_HEADERS(stdlib.h unistd.h stdarg.h stdint.h errno.h malloc.h mntent.h paths.h dirent.h getopt.h setjmp.h signal.h termios.h linux/fd.h linux/major.h sys/disklabel.h sys/ioctl.h sys/mman.h sys/mkdev.h sys/prctl.h sys/queue.h sys/sockio.h sys/socket.h sys/sysmacros.h sys/time.h sys/stat.h sys/types.h sys/wait.h sys/resource.h net/if_dl.h netinet/in.h utime.h)
+AC_CHECK_HEADERS(stdlib.h unistd.h stdarg.h stdint.h errno.h malloc.h mntent.h paths.h dirent.h getopt.h setjmp.h signal.h termios.h linux/fd.h linux/major.h sys/disklabel.h sys/ioctl.h sys/mman.h sys/mkdev.h sys/prctl.h sys/queue.h sys/sockio.h sys/socket.h sys/sysmacros.h sys/time.h sys/stat.h sys/types.h sys/wait.h sys/resource.h sys/syscall.h net/if_dl.h netinet/in.h utime.h)
AC_CHECK_HEADERS(sys/disk.h sys/mount.h,,,
[[
#if HAVE_SYS_QUEUE_H
-e2fsprogs (1.40.3-2) unstable; urgency=low
-
- * Add uuidd daemon
-
- -- Theodore Y. Ts'o <tytso@mit.edu> Sun, 09 Dec 2007 22:47:53 -0500
+e2fsprogs (1.40.4-1) unstable; urgency=low
+
+ * Make sure that programs like tune2fs, when modifying a mounted
+ filesystem do not write the backup superblocks with the
+ NEEDS_RECOVERY flag, to avoid e2fsck from needlessly forcing a
+ full fsck because it thinks the feature flags need to be backed up
+ from the master to the backup superblocks. (Closes: #454926)
+ * Improve time-based UUID generation to guarantee uniqueness even when
+ UUID's are being generated at very high rates on SMP systems. To
+ do this we use an optional setuid helper daemon (uuidd) which is
+ started by libuuid when it is needed. The uuidd daemon is
+ packaged in the (new) uuid-runtime package, which now also includes
+ the uuidgen program (which had been previously been included as
+ part of the e2fsprogs package).
+ * Fix fsck to only treat '#' characters at the beginning of /etc/fstab
+ lines as starting a comment. This avoids spurious warnings printed
+ for filesystems such as fuse that often use '#' as part of the
+ filesystem specifier (i.e., wdfs#https://dav.hoster.com/foo).
+ * Enhance the blkid program to pretty-print control and meta
+ characters to avoid garbage filesystem labels from screwing up the
+ user's terminal
+ * Fix potential integer overflows passed to malloc() in resize2fs
+ * Update Dutch, Polish, and Vietnamese translations from the
+ Translation Project. Remove the Rwandan translation upon advice
+ of the Translation Project.
+ * Fix cross-compilation support for non-Linux architectures
+ (Closes: #451172, #437720)
+ * Clarified and improved man pages (Closes: #444883, #441872)
+ * Fix potential divide by zero error when libblkid tried probing an
+ invalid FAT filesystem.
+ * Make error_message() in libcom_err DTRT when when a 64-bit sign-extended
+ error code is passed to it.
+ * Build the e2fsck-static package so that e2fsck.static will not use
+ TLS and hence will run correctly on back-level Debian systems
+ using a 2.4 Linux kernel. (Closes: #458017)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu> Mon, 31 Dec 2007 22:40:42 -0500
e2fsprogs (1.40.3-1) unstable; urgency=medium
-Document: com_err
+Document: comerr-manual
Title: The com_err library
Author: Ken Raeburn and Bill Sommerfeld
Abstract: A library, and associated utilities,
Section: admin
Priority: required
Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
-Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, libsepol1-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], libdevmapper-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], libselinux1-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], debhelper (>= 4)
+Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, dietlibc-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], libsepol1-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], libdevmapper-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], libselinux1-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], debhelper (>= 4)
Standards-Version: 3.7.3.0
Package: e2fsck-static
Package: uuid-runtime
Section: libs
Priority: optional
-Depends: ${shlibs:Depends}
+Depends: libuuid1 (>> 1.40.3-1), ${shlibs:Depends}
Replaces: e2fsprogs (<= 1.40.3-1ubuntu1)
Architecture: any
Description: universally unique id library
#!/bin/sh
-adduser --system --group --no-create-home --disabled-login \
- --quiet --home /var/lib/libuuid libuuid
+groupadd -f -K GID_MIN=1 -K GID_MAX=999 libuuid
+if ! grep -q libuuid /etc/passwd; then
+ useradd -d /var/lib/libuuid -K UID_MIN=1 -K UID_MAX=499 -g libuuid libuuid
+fi
mkdir -p /var/lib/libuuid
chown libuuid:libuuid /var/lib/libuuid
chmod 2775 /var/lib/libuuid
+#DEBHELPER#
+
+exit 0
then
rm -rf /var/lib/libuuid
fi
+
+#DEBHELPER#
+
+exit 0
maindir=${debdir}/e2fsprogs
stdbuilddir=${debdir}/BUILD-STD
bfbuilddir=${debdir}/BUILD-BF
+staticbuilddir=${debdir}/BUILD-STATIC
mipsbuilddir=${debdir}/BUILD-MIPS
mipsbuilddir64=${debdir}/BUILD-MIPS-64
# docdir=${maindir}/usr/share/doc/${package}
STAMPSDIR=debian/stampdir
CFGSTDSTAMP=${STAMPSDIR}/configure-std-stamp
CFGBFSTAMP=${STAMPSDIR}/configure-bf-stamp
+CFGSTATICSTAMP=${STAMPSDIR}/configure-static-stamp
BUILDSTDSTAMP=${STAMPSDIR}/build-std-stamp
BUILDBFSTAMP=${STAMPSDIR}/build-bf-stamp
+BUILDSTATICSTAMP=${STAMPSDIR}/build-static-stamp
CCOPTS = -g
ifeq (${DEB_HOST_ARCH_OS},linux)
DEVMAPPER = --enable-blkid-devmapper
+BUILD_STATIC = build-static
+E2FSCK_STATIC = ${staticbuilddir}/e2fsck/e2fsck.static
+else
+E2FSCK_STATIC = ${stdbuilddir}/e2fsck/e2fsck.static
endif
BF_CCOPTS = -Os -fomit-frame-pointer
BF_CONF_FLAGS = --with-ccopts="${CCOPTS} ${BF_CCOPTS}" \
--disable-nls --disable-imager \
+ --disable-uuidd --disable-tls \
--disable-debugfs --disable-e2initrd-helper
+STATIC_CONF_FLAGS = --with-ccopts="${CCOPTS}" \
+ --disable-nls --disable-imager \
+ --disable-uuidd --disable-tls \
+ --disable-e2initrd-helper \
+ --with-diet-libc --with-ccopts=-fno-stack-protector
+
MIPS_NOPIC_CONF_FLAGS = --with-ccopts="${CCOPTS}" \
- --disable-nls --disable-imager --disable-resizer # --disable-debugfs
+ --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
mkdir -p ${STAMPSDIR}
touch ${CFGBFSTAMP}
-build: build-std build-bf
+${CFGSTATICSTAMP}:
+ dh_testdir
+ rm -f config.cache
+
+ mkdir -p ${staticbuilddir}
+ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
+ cd ${staticbuilddir} && AWK=/usr/bin/awk \
+ ${topdir}/configure ${STATIC_CONF_FLAGS}
+else
+ cd ${staticbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
+ ${topdir}/configure ${COMMON_CONF_FLAGS} ${STATIC_CONF_FLAGS} \
+ --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
+endif
+ mkdir -p ${STAMPSDIR}
+ touch ${CFGSTATICSTAMP}
+
+build: build-std build-bf $(BUILD_STATIC)
build-std: ${BUILDSTDSTAMP}
${BUILDSTDSTAMP}: ${CFGSTDSTAMP}
make -C ${bfbuilddir}/misc all
touch ${BUILDBFSTAMP}
+build-static: ${BUILDSTATICSTAMP}
+${BUILDSTATICSTAMP}: ${CFGSTATICSTAMP}
+ dh_testdir
+ make -C ${staticbuilddir} libs
+ make -C ${staticbuilddir}/e2fsck all
+ touch ${BUILDSTATICSTAMP}
+
clean:
dh_testdir
rm -rf ${STAMPSDIR}
[ ! -f ${stdbuilddir}/Makefile ] || make -C ${stdbuilddir} distclean
[ ! -f ${bfbuilddir}/Makefile ] || make -C ${bfbuilddir} distclean
- rm -rf ${stdbuilddir} ${bfbuilddir} ${mipsbuilddir} ${mipsbuilddir64}
+ [ ! -f ${staticbuilddir}/Makefile ] || make -C ${staticbuilddir} distclean
+ rm -rf ${stdbuilddir} ${bfbuilddir} ${staticbuilddir} ${mipsbuilddir} ${mipsbuilddir64}
rm -f doc/libext2fs/*.html lib/et/com_err/*.html debian/*.substvars
dh_clean
make -C ${stdbuilddir} install-libs DESTDIR=${tmpdir} LDCONFIG=true
# statically-linked fsck
- ${INSTALL_PROGRAM} ${stdbuilddir}/e2fsck/e2fsck.static ${tmpdir}/sbin
+ ${INSTALL_PROGRAM} $(E2FSCK_STATIC) ${tmpdir}/sbin
cp ${mandir}/man8/e2fsck.8 ${mandir}/man8/e2fsck.static.8
ln -s et/com_err.h ${tmpdir}/usr/include
#!/bin/sh
-adduser --system --group --no-create-home --disabled-login \
- --quiet --home /var/lib/libuuid libuuid
-mkdir -p /var/run/uuidd
-chown libuuid:libuuid /var/run/uuidd
-chmod 775 /var/run/uuidd
+groupadd -f -K GID_MIN=1 -K GID_MAX=999 libuuid
+if ! grep -q libuuid /etc/passwd; then
+ useradd -d /var/lib/libuuid -K UID_MIN=1 -K UID_MAX=499 -g libuuid libuuid
+fi
chown libuuid:libuuid /usr/sbin/uuidd
chmod 6755 /usr/sbin/uuidd
+
+#DEBHELPER#
+
+exit 0
rm -rf /var/run/uuidd
fi
+#DEBHELPER#
+
+exit 0
then
/usr/sbin/uuidd -k || true
fi
+
+#DEBHELPER#
+
+exit 0
.I filespec
is marked as allocated in the inode bitmap.
.TP
+.I undel <inode num> [pathname]
+Undelete the specified inode number (which must be surrounded by angle
+brackets) so that it and its blocks are marked in use, and optionally
+link the recovered inode to the specified pathname. The
+.B e2fsck
+command should always be run after using the
+.B undel
+command to recover deleted files.
+.IP
+Note that if you are recovering a large number of deleted files, linking
+the inode to a directory may require the directory to be expanded, which
+could allocate a block that had been used by one of the
+yet-to-be-undeleted files. So it is safer to undelete all of the
+inodes without specifying a destination pathname, and then in a separate
+pass, use the debugfs
+.B link
+command to link the inode to the destination pathname, or use
+.B e2fsck
+to check the filesystem and link all of the recovered inodes to the
+lost+found dirctory.
+.TP
.I unlink pathname
Remove the link specified by
.I pathname
ext2_ino_t ino;
struct ext2_inode inode;
- if (common_args_process(argc, argv, 3, 3, "undelete",
- "<inode_num> <dest_name>",
+ if (common_args_process(argc, argv, 2, 3, "undelete",
+ "<inode_num> [dest_name]",
CHECK_FS_RW | CHECK_FS_BITMAPS))
return;
ext2fs_inode_alloc_stats2(current_fs, ino, +1, 0);
- make_link(argv[1], argv[2]);
+ if (argc > 2)
+ make_link(argv[1], argv[2]);
}
static void unlink_file_by_name(char *filename)
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
+#include <strings.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename libext2fs.info
-@settitle The EXT2FS Library (version 1.40)
+@settitle The EXT2FS Library (version 1.40.4)
@synindex tp fn
@comment %**end of header
@title The EXT2FS Library
@subtitle The EXT2FS Library
-@subtitle Version 1.40
-@subtitle June 2007
+@subtitle Version 1.40.4
+@subtitle December 2007
@author by Theodore Ts'o
@top The EXT2FS Library
-This manual documents the EXT2FS Library, version 1.40.
+This manual documents the EXT2FS Library, version 1.40.4.
@end ifinfo
filesystem supports directory indexing, or by sorting and compressing
directories for smaller directories, or for filesystems using
traditional linear directories.
+.IP
+Even without the
+.B \-D
+option,
+.B e2fsck
+may sometimes optimize a few directories --- for example, if
+directory indexing is enabled and a directory is not indexed and would
+benefit from being indexed, or if the index structures are corrupted
+and need to be rebuilt. The
+.B \-D
+option forces all directories in the filesystem to be optimized. This can
+sometimes make them a little smaller and slightly faster to search, but
+in practice, you should rarely need to use this option.
.TP
.BI \-E " extended_options"
Set e2fsck extended options. Extended options are comma
struct hash_entry {
ext2_dirhash_t hash;
ext2_dirhash_t minor_hash;
+ ino_t ino;
struct ext2_dir_entry *dir;
};
ent = fd->harray + fd->num_array++;
ent->dir = dirent;
fd->dir_size += EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
+ ent->ino = dirent->inode;
if (fd->compress)
ent->hash = ent->minor_hash = 0;
else {
return 0;
}
+/* Used for sorting the hash entry */
+static EXT2_QSORT_TYPE ino_cmp(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;
+
+ return (he_a->ino - he_b->ino);
+}
+
/* Used for sorting the hash entry */
static EXT2_QSORT_TYPE name_cmp(const void *a, const void *b)
{
resort:
if (fd.compress)
qsort(fd.harray+2, fd.num_array-2,
- sizeof(struct hash_entry), name_cmp);
+ sizeof(struct hash_entry), ino_cmp);
else
qsort(fd.harray, fd.num_array,
sizeof(struct hash_entry), hash_cmp);
Begin3
Title: EXT2 Filesystem utilities
-Version: 1.40.3
-Entered-date: 05Dec2007
+Version: 1.40.4
+Entered-date: 31Dec2007
Description: The filesystem utilities for the EXT2 filesystem, including
e2fsck, mke2fs, dumpe2fs, fsck, and others.
Keywords: utilities, fsck, filesystem, Ext2fs
Author: tytso@mit.edu (Theodore Tso)
Maintained-by: tytso@mit.edu (Theodore Tso)
Primary-site: download.sourceforge.net /pub/sourceforge/e2fsprogs
- 3976kB e2fsprogs-1.40.3.tar.gz
- 432kB e2fsprogs-libs-1.40.3.tar.gz
- 1kB e2fsprogs-1.40.lsm
+ 3960kB e2fsprogs-1.40.4.tar.gz
+ 436kB e2fsprogs-libs-1.40.4.tar.gz
+ 1kB e2fsprogs-1.40.4.lsm
Alternate-site:
Platforms: linux 1.2.x/1.3.x/2.0.x/2.1.x/2.2.x/2.3.x/2.4.x/2.5.x/2.6.x
Copying-policy: GPL/LGPL
* %End-Header%
*/
+#include <sys/types.h>
#include "blkid/blkid_types.h"
#include <stdlib.h>
__u16 unused; /* Number of reserved GDT blocks in group */
};
+#ifdef __GNU__ /* Needed for the Hurd */
+#define _IOT_ext2_new_group_input _IOT (_IOTS(__u32), 5, _IOTS(__u16), 2, 0, 0)
+#endif
+
#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)
#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)
#define EXT2_IOC_GETVERSION _IOR('v', 1, long)
#define i_uid_high osd2.linux2.l_i_uid_high
#define i_gid_high osd2.linux2.l_i_gid_high
#define i_reserved2 osd2.linux2.l_i_reserved2
-#define inode_uid(inode) ((inode).i_uid | (inode).i_uid_high << 16)
-#define inode_gid(inode) ((inode).i_gid | (inode).i_gid_high << 16)
#else
#if defined(__GNU__)
#define i_uid_high osd2.hurd2.h_i_uid_high
#define i_gid_high osd2.hurd2.h_i_gid_high
#define i_author osd2.hurd2.h_i_author
-#define inode_uid(inode) ((inode).i_uid | (inode).i_uid_high << 16)
-#define inode_gid(inode) ((inode).i_gid | (inode).i_gid_high << 16)
#endif /* __GNU__ */
#endif /* defined(__KERNEL__) || defined(__linux__) */
+#define inode_uid(inode) ((inode).i_uid | (inode).osd2.linux2.l_i_uid_high << 16)
+#define inode_gid(inode) ((inode).i_gid | (inode).osd2.linux2.l_i_gid_high << 16)
+
/*
* File system states
*/
memcpy(ptr, &pp, sizeof (pp));
return 0;
}
+
_INLINE_ errcode_t ext2fs_get_array(unsigned long count, unsigned long size, void *ptr)
{
if (count && (-1UL)/count<size)
$(DESTDIR)$(man1dir)/mk_cmds.1
$(RM) -rf $(DESTDIR)$(includedir)/ss $(DESTDIR)$(datadir)/ss
-test_ss: test_ss.o test_cmd.o $(LIBEXT2FS) $(LIBSS) $(LIBCOM_ERR)
+test_ss: test_ss.o test_cmd.o $(LIBSS) $(LIBCOM_ERR)
@echo " LD $@"
@$(CC) -o $@ test_ss.o test_cmd.o $(ALL_CFLAGS) \
$(LIBSS) $(LIBCOM_ERR)
clear.o: $(srcdir)/clear.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
compare.o: $(srcdir)/compare.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
copy.o: $(srcdir)/copy.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-gen_uuid.o: $(srcdir)/gen_uuid.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
+gen_uuid.o: $(srcdir)/gen_uuid.c $(srcdir)/uuidP.h $(srcdir)/uuid.h \
+ $(srcdir)/uuidd.h
isnull.o: $(srcdir)/isnull.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
pack.o: $(srcdir)/pack.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
parse.o: $(srcdir)/parse.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
#include <errno.h>
#include <sys/types.h>
#include <sys/time.h>
+#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/file.h>
#ifdef HAVE_SYS_IOCTL_H
#ifdef HAVE_NET_IF_DL_H
#include <net/if_dl.h>
#endif
-#ifdef __linux__
+#if defined(__linux__) && defined(HAVE_SYS_SYSCALL_H)
#include <sys/syscall.h>
#endif
*/
static int get_uuid_via_daemon(int op, uuid_t out, int *num)
{
+#ifdef USE_UUIDD
char op_buf[64];
int op_len;
int s;
ssize_t ret;
int32_t reply_len = 0, expected = 16;
struct sockaddr_un srv_addr;
+ pid_t pid;
static const char *uuidd_path = UUIDD_PATH;
static int access_ret = -2;
+ static int start_attempts = 0;
if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
return -1;
sizeof(struct sockaddr_un)) < 0) {
if (access_ret == -2)
access_ret = access(uuidd_path, X_OK);
- if (access_ret == 0) {
- if (fork() == 0) {
+ if (access_ret == 0 && start_attempts++ < 5) {
+ if ((pid = fork()) == 0) {
execl(uuidd_path, "uuidd", "-qT", "300", 0);
exit(1);
}
- usleep(500);
+ (void) waitpid(pid, 0, 0);
if (connect(s, (const struct sockaddr *) &srv_addr,
sizeof(struct sockaddr_un)) < 0)
goto fail;
op_buf[0] = op;
op_len = 1;
if (op == UUIDD_OP_BULK_TIME_UUID) {
- memcpy(op_buf+1, num, sizeof(num));
- op_len += sizeof(num);
- expected += sizeof(num);
+ memcpy(op_buf+1, num, sizeof(*num));
+ op_len += sizeof(*num);
+ expected += sizeof(*num);
}
ret = write(s, op_buf, op_len);
fail:
close(s);
+#endif
return -1;
}
#ifndef _UUID_UUIDD_H
#define _UUID_UUIDD_H
-#define UUIDD_SOCKET_PATH "/var/run/uuidd/request"
-#define UUIDD_PIDFILE_PATH "/var/run/uuidd/uuidd.pid"
+#define UUIDD_SOCKET_PATH "/var/lib/libuuid/request"
+#define UUIDD_PIDFILE_PATH "/var/lib/libuuid/uuidd.pid"
#define UUIDD_PATH "/usr/sbin/uuidd"
#define UUIDD_OP_GETPID 0
@IMAGER_CMT@E2IMAGE_PROG= e2image
@IMAGER_CMT@E2IMAGE_MAN= e2image.8
+@UUIDD_CMT@UUIDD_PROG= uuidd
+@UUIDD_CMT@UUIDD_MAN= uuidd.8
+
SPROGS= mke2fs badblocks tune2fs dumpe2fs blkid logsave \
$(E2IMAGE_PROG) @FSCK_PROG@
-USPROGS= mklost+found filefrag uuidd
+USPROGS= mklost+found filefrag $(UUIDD_PROG)
SMANPAGES= tune2fs.8 mklost+found.8 mke2fs.8 dumpe2fs.8 badblocks.8 \
e2label.8 findfs.8 blkid.8 $(E2IMAGE_MAN) \
- logsave.8 filefrag.8 uuidd.8 @FSCK_MAN@
+ logsave.8 filefrag.8 $(UUIDD_MAN) @FSCK_MAN@
FMANPAGES= mke2fs.conf.5
UPROGS= chattr lsattr uuidgen
$(FMANPAGES) \
base_device base_device.out mke2fs.static filefrag \
e2initrd_helper partinfo prof_err.[ch] default_profile.c \
- \#* *.s *.o *.a *~ core
+ uuidd e2image \#* *.s *.o *.a *~ core
mostlyclean: clean
distclean: clean
err = 0;
com_err(program_name, err, "error writing block %u",
block);
+ exit(1);
}
}
}
* %End-Header%
*/
+#define _GNU_SOURCE /* for setres[ug]id() */
+
#include <stdio.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
exit(1);
}
-static void create_daemon(const char *pidfile_path)
+static void create_daemon(void)
{
pid_t pid;
uid_t euid;
- FILE *f;
pid = fork();
if (pid == -1) {
(void) setsid();
euid = geteuid();
(void) setreuid(euid, euid);
-
- f = fopen(pidfile_path, "w");
- if (f) {
- fprintf(f, "%d\n", getpid());
- fclose(f);
- }
}
static int read_all(int fd, char *buf, size_t count)
static void terminate_intr(int signo CODE_ATTR((unused)))
{
(void) unlink(cleanup_pidfile);
- (void) unlink(cleanup_socket);
+ if (cleanup_socket)
+ (void) unlink(cleanup_socket);
exit(0);
}
static void server_loop(const char *socket_path, int debug,
- const char *pidfile_path,
- int timeout, int quiet)
+ int fd_pidfile, int timeout, int quiet)
{
struct sockaddr_un my_addr, from_addr;
unsigned char reply_buf[1024], *cp;
exit(1);
}
- if (!debug) {
- create_daemon(pidfile_path);
- cleanup_pidfile = pidfile_path;
- cleanup_socket = socket_path;
- signal(SIGHUP, terminate_intr);
- signal(SIGINT, terminate_intr);
- signal(SIGPIPE, terminate_intr);
- signal(SIGTERM, terminate_intr);
- signal(SIGALRM, terminate_intr);
- }
+ if (fd_pidfile > 1)
+ close(fd_pidfile); /* Unlock the pid file */
+ cleanup_socket = socket_path;
+ if (!debug)
+ create_daemon();
+ signal(SIGHUP, terminate_intr);
+ signal(SIGINT, terminate_intr);
+ signal(SIGTERM, terminate_intr);
+ signal(SIGALRM, terminate_intr);
signal(SIGPIPE, SIG_IGN);
while (1) {
}
}
-static int call_daemon(const char *socket_path, int op, unsigned char *buf,
+static int call_daemon(const char *socket_path, int op, char *buf,
int buflen, int *num, const char **err_context)
{
char op_buf[8];
return ret;
}
+static int create_pidfile(const char *socket_path, const char *pidfile_path,
+ int quiet)
+{
+ int fd, ret;
+ char buf[20];
+
+ fd = open(pidfile_path, O_CREAT | O_RDWR, 0664);
+ if (fd < 0) {
+ if (!quiet)
+ fprintf(stderr, "Failed to open/create %s: %s\n",
+ pidfile_path, strerror(errno));
+ exit(1);
+ }
+ cleanup_pidfile = pidfile_path;
+ cleanup_socket = 0;
+ signal(SIGALRM, terminate_intr);
+ alarm(30);
+ if (lockf(fd, F_LOCK, 0) < 0) {
+ if (!quiet)
+ fprintf(stderr, "Failed to lock %s: %s\n",
+ pidfile_path, strerror(errno));
+ exit(1);
+ }
+ ret = call_daemon(socket_path, 0, buf, sizeof(buf), 0, 0);
+ if (ret > 0) {
+ if (!quiet)
+ printf(_("uuidd daemon already running at pid %s\n"),
+ buf);
+ exit(1);
+ }
+ alarm(0);
+
+ sprintf(buf, "%d\n", getpid());
+ ftruncate(fd, 0);
+ write(fd, buf, strlen(buf));
+ return(fd);
+}
int main(int argc, char **argv)
{
const char *socket_path = UUIDD_SOCKET_PATH;
const char *pidfile_path = UUIDD_PIDFILE_PATH;
const char *err_context;
- unsigned char buf[1024], *cp;
+ char buf[1024], *cp;
char str[37], *tmp;
uuid_t uu;
uid_t uid;
gid_t gid;
- int i, c, ret;
+ int i, c, ret, fd_pidfile = -1;
int debug = 0, do_type = 0, do_kill = 0, num = 0;
int timeout = 0, quiet = 0, drop_privs = 0;
if (ret != sizeof(uu) + sizeof(num))
goto unexpected_size;
- uuid_unparse(buf, str);
+ uuid_unparse((unsigned char *) buf, str);
printf(_("%s and subsequent %d UUID's\n"), str, num);
} else {
printf(_("List of UUID's:\n"));
cp = buf + 4;
- if (ret != sizeof(num) + num*sizeof(uu))
+ if (ret != (int) (sizeof(num) + num*sizeof(uu)))
goto unexpected_size;
for (i=0; i < num; i++, cp+=16) {
- uuid_unparse(cp, str);
+ uuid_unparse((unsigned char *) cp, str);
printf("\t%s\n", str);
}
}
exit(0);
}
if (do_type) {
- ret = call_daemon(socket_path, do_type, (unsigned char *) &uu,
+ ret = call_daemon(socket_path, do_type, (char *) &uu,
sizeof(uu), 0, &err_context);
if (ret < 0) {
printf(_("Error calling uuidd daemon (%s): %s\n"),
exit(0);
}
- /*
- * Check to make sure there isn't another daemon running already
- */
- ret = call_daemon(socket_path, 0, buf, sizeof(buf), 0, 0);
- if (ret > 0) {
- if (do_kill && ((do_kill = atoi((char *) buf)) > 0)) {
+ if (do_kill) {
+ ret = call_daemon(socket_path, 0, buf, sizeof(buf), 0, 0);
+ if ((ret > 0) && ((do_kill = atoi((char *) buf)) > 0)) {
ret = kill(do_kill, SIGTERM);
if (ret < 0) {
if (!quiet)
if (!quiet)
printf(_("Killed uuidd running at pid %d\n"),
do_kill);
- exit(0);
}
- if (!quiet)
- printf(_("uuidd daemon already running at pid %s\n"),
- buf);
- exit(1);
+ exit(0);
}
- if (do_kill)
- exit(0); /* Nothing to kill */
- server_loop(socket_path, debug, pidfile_path, timeout, quiet);
+ fd_pidfile = create_pidfile(socket_path, pidfile_path, quiet);
+
+ server_loop(socket_path, debug, fd_pidfile, timeout, quiet);
return 0;
}
#.
msgid ""
msgstr ""
-"Project-Id-Version: e2fsprogs 1.40.1\n"
+"Project-Id-Version: e2fsprogs 1.40.3\n"
"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
"POT-Creation-Date: 2007-12-05 19:25-0500\n"
-"PO-Revision-Date: 2007-07-11 15:41+0930\n"
+"PO-Revision-Date: 2007-12-19 18:02+1030\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: LocFactoryEditor 1.6.4a6\n"
+"X-Generator: LocFactoryEditor 1.7b1\n"
#: e2fsck/badblocks.c:22 misc/mke2fs.c:156
#, c-format
#: e2fsck/badblocks.c:129
#, c-format
msgid "Warning: illegal block %u found in bad block inode. Cleared.\n"
-msgstr ""
-"Cảnh báo : tìm thấy khối cấm %u trong nút thông tin khối hỏng nên bị xoá.\n"
+msgstr "Cảnh báo : tìm thấy khối cấm %u trong nút thông tin khối hỏng nên bị xoá.\n"
#: e2fsck/ehandler.c:53
#, c-format
#: e2fsck/problem.c:212
msgid ""
"Ext3 @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 ext3 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"
"It is also possible the @S @j is corrupt.\n"
#. @-expanded: Ext3 journal superblock is corrupt.\n
#. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
#: e2fsck/problem.c:490
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:496
#. @-expanded: Programming error? block #%b claimed for no reason in process_bad_block.\n
#: e2fsck/problem.c:507
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:513
#: e2fsck/problem.c:994
#, c-format
msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"@e @d « . » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
+msgstr "@e @d « . » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
#. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
#: e2fsck/problem.c:999
#, c-format
msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"@e @d « .. » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
+msgstr "@e @d « .. » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
#. @-expanded: inode %i (%Q) is an illegal character device.\n
#: e2fsck/problem.c:1004
#. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap
#. @-expanded: endpoints (%i, %j)\n
#: e2fsck/problem.c:1458
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"LỖI LẬP TRÌNH: trong @f (#%N) có các điểm cuối @B (%b, %c) không tương ứng "
-"với các điểm cuối @B đã tính (%i, %j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "LỖI LẬP TRÌNH: trong @f (#%N) có các điểm cuối @B (%b, %c) không tương ứng với các điểm cuối @B đã tính (%i, %j)\n"
#: e2fsck/problem.c:1464
msgid "Internal error: fudging end of bitmap (%N)\n"
#: e2fsck/super.c:187
#, c-format
msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr ""
-"trong khi gọi hàm lặp lại khối « ext2fs_block_iterate » cho nút thông tin %d"
+msgstr "trong khi gọi hàm lặp lại khối « ext2fs_block_iterate » cho nút thông tin %d"
#: e2fsck/super.c:210
#, c-format
msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
msgstr ""
-"trong khi gọi hàm điều chỉnh số đếm tham chiếu « ext2fs_adjust_ea_refcount "
-"»\n"
+"trong khi gọi hàm điều chỉnh số đếm tham chiếu « ext2fs_adjust_ea_refcount »\n"
"cho nút thông tin %d"
#: e2fsck/super.c:268
" -p Automatic repair (no questions)\n"
" -n Make no changes to the filesystem\n"
" -y Assume \"yes\" to all questions\n"
-" -c Check for bad blocks and add them to the badblock "
-"list\n"
+" -c Check for bad blocks and add them to the badblock list\n"
" -f Force checking even if filesystem is marked clean\n"
msgstr ""
"\n"
" -n 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:86
#, c-format
#: e2fsck/unix.c:284
msgid " primary superblock features different from backup"
-msgstr ""
+msgstr "các tính năng của siêu khối chính khác với bản sao lưu"
#: e2fsck/unix.c:288
#, c-format
#: e2fsck/unix.c:808
#, c-format
msgid "The -c and the -l/-L options may not be both used at the same time.\n"
-msgstr ""
-"Không cho phép sử dụng đồng thời cả hai tùy chọn « --c » và « --l/L ».\n"
+msgstr "Không cho phép sử dụng đồng thời cả hai tùy chọn « --c » và « --l/L ».\n"
#: e2fsck/unix.c:856
#, c-format
"E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
"\n"
msgstr ""
+"E2FSCK_JBD_DEBUG « %s » không phải số nguyên\n"
+"\n"
#: e2fsck/unix.c:864
#, c-format
"Invalid non-numeric argument to -%c (\"%s\")\n"
"\n"
msgstr ""
+"\n"
+"Đối số không thuộc số không hợp lệ đối với -%c (« %s »)\n"
+"\n"
#: e2fsck/unix.c:903
#, c-format
msgstr "cần thiết thiết bị cuối để sửa chữa tương tác"
#: e2fsck/unix.c:977
-#, fuzzy, c-format
+#, c-format
msgid "%s: %s trying backup blocks...\n"
-msgstr "%s đang thử các khối dự trữ...\n"
+msgstr "%s %s đang thử các khối dự trữ...\n"
#: e2fsck/unix.c:979
msgid "Superblock invalid,"
-msgstr ""
+msgstr "Siêu khối không hợp lệ,"
#: e2fsck/unix.c:980
msgid "Group descriptors look bad..."
#: e2fsck/unix.c:1002
#, c-format
msgid "You must have %s access to the filesystem or be root\n"
-msgstr ""
-"Bạn phải có quyền truy cập %s vào hệ thống tập tin, hoặc là người chủ "
-"(root)\n"
+msgstr "Bạn phải có quyền truy cập %s vào hệ thống tập tin, hoặc là người chủ (root)\n"
#: e2fsck/unix.c:1007
#, c-format
#: e2fsck/unix.c:1009
#, c-format
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:1013
#, c-format
#: e2fsck/unix.c:1109
#, c-format
-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"
+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:1122
#, c-format
#: e2fsck/unix.c:1233
#, c-format
msgid "This doesn't bode well, but we'll try to go on...\n"
-msgstr ""
-"Đây không phải báo trước điềm hay, nhưng tiến trình này sẽ thử tiếp tục...\n"
+msgstr "Đây không phải báo trước điềm hay, nhưng tiến trình này sẽ thử tiếp tục...\n"
#: e2fsck/unix.c:1259
msgid "Couldn't determine journal size"
#, c-format
msgid ""
"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
+" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
" device [last_block [start_block]]\n"
msgstr ""
"Cách sử dụng: %s [-b cỡ_khối] [-i tập_tin_nhập] [-o tập_tin_xuất] [-svwnf]\n"
-" [-c các_khối_cùng_lúc] [-p số_lần_qua] [-t mẫu_thử_ra [-t mẫu_thử_ra "
-"[...]]]\n"
+" [-c các_khối_cùng_lúc] [-p số_lần_qua] [-t mẫu_thử_ra [-t mẫu_thử_ra [...]]]\n"
" thiết_bị [khối_cuối [khối_đầu]]\n"
#: misc/badblocks.c:88
#: misc/badblocks.c:961
msgid "Maximum of one test_pattern may be specified in read-only mode"
-msgstr ""
-"Trong chế độ chỉ đọc, có thể xác định tối đa một mẫu thử (test_pattern)"
+msgstr "Trong chế độ chỉ đọc, có thể xác định tối đa một mẫu thử (test_pattern)"
#: misc/badblocks.c:967
msgid "Random test_pattern is not allowed in read-only mode"
#: misc/fsck.c:875
#, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
+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:902
#, c-format
msgstr "--đang đợi-- (lần qua %d)\n"
#: misc/fsck.c:1064
-msgid ""
-"Usage: fsck [-ANPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgid "Usage: fsck [-ANPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
msgstr ""
"Cách sử dụng: fsck [-ANPRTV] [ -C [ fd ] ] [-t kiểu_HTT]\n"
"[tùy_chọn_HTT] [HTT ...]\n"
msgstr "Trong khi đọc phiên bản trên %s"
#: misc/mke2fs.c:97
-#, fuzzy, c-format
+#, c-format
msgid ""
"Usage: %s [-c|-t|-l filename] [-b block-size] [-f fragment-size]\n"
"\t[-i bytes-per-inode] [-I inode-size] [-j] [-J journal-options]\n"
"\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]] [-qvSV]\n"
"\tdevice [blocks-count]\n"
msgstr ""
-"Cách sử dụng: %s [-c|-t|-l tên_tập_tin] [-b cỡ_khối] [-f cỡ_đoạn]\n"
-"\t[-i byte_mỗi_nút_thông_tin] [-I cỡ_nút_thông_tin] [-j] [-J "
-"tùy_chọn_nhật_ký]\n"
-"\t[-N số_nút_thông_tin] [-m phần_trăm_khối_dành_riêng] [-o HĐH_tạo]\n"
+"Sử dụng: %s [-c|-t|-l tên_tập_tin] [-b cỡ_khối] [-f cỡ_đoạn]\n"
+"\t[-i byte_mỗi_inode] [-I cỡ_inode] [-j] [-J tùy_chọn_nhật_ký]\n"
+"\t[-N số_inode] [-m phần_trăm_khối_dành_riêng] [-o HĐH_tạo]\n"
"\t[-g 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] [-R tùy_chọn] [-qvSV]\n"
+"\t[-O tính_năng[,...]] [-r bản_sửa_đổi_HTT] [-E tùy_chọn_mở_rộng] [-qvSV]\n"
"\tthiết_bị [số_đếm_khối]\n"
"\n"
"[HĐH: hệ điều hành\n"
#: misc/mke2fs.c:819
#, c-format
msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"Số thay đổi kích cỡ tối đa phải lớn hơn kích cỡ của hệ thống tập tin.\n"
+msgstr "Số thay đổi kích cỡ tối đa phải lớn hơn kích cỡ của hệ thống tập tin.\n"
#: misc/mke2fs.c:843
#, c-format
#: misc/mke2fs.c:1211
#, 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"
#, c-format
msgid "Should never happen: resize inode corrupt!\n"
msgstr "Không bao giờ nên xảy ra: nút thông tin thay đổi kích cỡ bị hỏng !\n"
-
-#~ msgid "Couldn't find ext2 superblock,"
-#~ msgstr "Không tìm thấy siêu khối ext2,"
-
-#~ msgid "invalid blocks range: %lu-%lu"
-#~ msgstr "phạm vị khối không hợp lệ: %lu - %lu"
extent->num = 0;
extent->sorted = 1;
- retval = ext2fs_get_mem(sizeof(struct ext2_extent_entry) *
+ retval = ext2fs_get_array(sizeof(struct ext2_extent_entry),
extent->size, &extent->list);
if (retval) {
ext2fs_free_mem(&extent);
/*
* Initialize the new block group descriptors
*/
- retval = ext2fs_get_mem(fs->blocksize * fs->inode_blocks_per_group,
+ retval = ext2fs_get_array(fs->blocksize, fs->inode_blocks_per_group,
&rfs->itable_buf);
if (retval)
goto errout;
new_blk = fs->super->s_first_data_block;
if (!rfs->itable_buf) {
- retval = ext2fs_get_mem(fs->blocksize *
+ retval = ext2fs_get_array(fs->blocksize,
fs->inode_blocks_per_group,
&rfs->itable_buf);
if (retval)
retval = ext2fs_init_dblist(rfs->old_fs, 0);
if (retval) goto errout;
- retval = ext2fs_get_mem(rfs->old_fs->blocksize * 3, &block_buf);
+ retval = ext2fs_get_array(rfs->old_fs->blocksize, 3, &block_buf);
if (retval) goto errout;
start_to_move = (rfs->new_fs->group_desc_count *
* redistributed under the GNU Public License.
*/
-#define E2FSPROGS_VERSION "1.40.3"
-#define E2FSPROGS_DATE "05-Dec-2007"
+#define E2FSPROGS_VERSION "1.40.4"
+#define E2FSPROGS_DATE "31-Dec-2007"