From 0517cdd8f6c890b218cf05839557c2a75b514bff Mon Sep 17 00:00:00 2001 From: Packit Service Date: Dec 10 2020 11:55:06 +0000 Subject: e2fsprogs-1.45.6 base --- diff --git a/MCONFIG.in b/MCONFIG.in index d24f7ef..6151825 100644 --- a/MCONFIG.in +++ b/MCONFIG.in @@ -213,8 +213,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 \ @@ -224,14 +223,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 diff --git a/README b/README index d39c08e..3304a4d 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ - This is the new version (1.45.4) of the second extended file + This is the new version (1.45.6) of the second extended file system management programs. From time to time, I release new versions of e2fsprogs, to fix diff --git a/RELEASE-NOTES b/RELEASE-NOTES index ae6a5a3..9387cc6 120000 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -1 +1 @@ -doc/RelNotes/v1.45.4.txt \ No newline at end of file +doc/RelNotes/v1.45.6.txt \ No newline at end of file diff --git a/acinclude.m4 b/acinclude.m4 index 0b91745..13b1e02 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -158,10 +158,6 @@ dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' ot AC_DEFUN([AX_CHECK_MOUNT_OPT], [__AX_CHECK_MOUNT_OPT(m4_tolower([$1]),m4_toupper([$1]))]) AC_DEFUN([__AX_CHECK_MOUNT_OPT], [ - AS_IF([test "x$ac_cv_header_sys_mount_h" = x], - [AC_CHECK_HEADERS([sys/mount.h])]) - AS_IF([test "x$ac_cv_header_sys_mount_h" = xno], - [AC_MSG_FAILURE([error: sys/mount.h not present on your system!])]) AS_ECHO_N("checking for mount '$1' option... ") AC_TRY_COMPILE( [#include ], diff --git a/config/config.guess b/config/config.guess index 8ca6a44..45001cf 100644 --- a/config/config.guess +++ b/config/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2018-03-01' +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 @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2018 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 @@ -138,7 +142,7 @@ Linux|GNU|GNU/*) # We could probably try harder. LIBC=gnu - eval "$set_cc_for_build" + set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) @@ -199,7 +203,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in 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 @@ -237,7 +241,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # 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.//'` @@ -260,6 +264,9 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:SolidBSD:*:*) 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" exit ;; @@ -269,12 +276,15 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *: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 ;; + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -389,7 +399,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in 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. @@ -482,7 +492,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ @@ -579,7 +589,7 @@ EOF exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include @@ -660,7 +670,7 @@ EOF esac fi if [ "$HP_ARCH" = "" ]; then - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE @@ -700,7 +710,7 @@ EOF esac 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 @@ -726,7 +736,7 @@ EOF echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int @@ -840,6 +850,17 @@ EOF *:BSD/OS:*:*) 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 @@ -881,7 +902,7 @@ EOF echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin + echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" @@ -894,8 +915,8 @@ EOF # 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" exit ;; - i*86:Minix:*:*) - echo "$UNAME_MACHINE"-pc-minix + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" @@ -905,7 +926,7 @@ EOF 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 ;; @@ -922,7 +943,7 @@ EOF 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 @@ -971,23 +992,51 @@ EOF echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval "$set_cc_for_build" + 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" @@ -1100,7 +1149,7 @@ 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 @@ -1284,38 +1333,39 @@ EOF 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 - # 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 + 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" exit ;; @@ -1358,6 +1408,7 @@ EOF # "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 @@ -1414,8 +1465,148 @@ EOF 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" < +#include +#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 +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#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 + 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 +#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 @@ -1469,7 +1660,7 @@ EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-functions '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/config.sub b/config/config.sub index 0b218ed..f02d43a 100644 --- a/config/config.sub +++ b/config/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2018-02-28' +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 @@ -67,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2018 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,7 +89,7 @@ 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*) @@ -110,1223 +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* | cloudabi*-eabi* | \ - 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 <&2 + exit 1 ;; - -lynx*) - os=-lynxos + *-*-*-*) + basic_machine=$field1-$field2 + os=$field3-$field4 ;; - -ptx*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` + *-*-*) + # 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 | ia16 | 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 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | 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 \ - | wasm32 \ - | 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) + 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-* | ia16-* | 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-* \ - | pru-* \ - | 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-* \ - | wasm32-* \ - | 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-pc - 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 + cpu=m68k + vendor=motorola ;; dpx2*) - 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" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd + 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 - ;; - 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 - ;; - i386mach) - basic_machine=i386-mach - os=-mach + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=solaris2 ;; - 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 - ;; - 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 - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 + cpu=m68000 + vendor=convergent ;; - 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 + 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 - ;; - nsv-tandem) - basic_machine=nsv-tandem - ;; - nsx-tandem) - basic_machine=nsx-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 + cpu=m68k + vendor=tti ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - 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 + power) + cpu=power + vendor=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 + ps2) + cpu=i386 + vendor=ibm ;; - ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + rm[46]00) + cpu=mips + vendor=siemens ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown + rtpc | rtpc-*) + cpu=romp + vendor=ibm ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + sde) + cpu=mipsisa32 + vendor=sde + os=${os:-elf} ;; - ps2) - basic_machine=i386-ibm + simso-wrs) + cpu=sparclite + vendor=wrs + os=vxworks ;; - pw32) - basic_machine=i586-unknown - os=-pw32 + tower | tower-32) + cpu=m68k + vendor=ncr ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - rdos32) - basic_machine=i386-pc - os=-rdos + w65) + cpu=w65 + vendor=wdc ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff + w89k-*) + cpu=hppa1.1 + vendor=winbond + os=proelf ;; - rm[46]00) - basic_machine=mips-siemens + none) + cpu=none + vendor=none ;; - rtpc | rtpc-*) - basic_machine=romp-ibm + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - s390 | s390-*) - basic_machine=s390-ibm + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - s390x | s390x-*) - basic_machine=s390x-ibm + + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&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 ;; *) ;; @@ -1334,199 +1275,243 @@ 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 + # solaris* is a basic system type, with this one exception. + auroraux) + os=auroraux ;; - -solaris1 | -solaris1.*) + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; - -solaris) - os=-solaris2 + 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|'` ;; # es1800 is here to avoid being matched by es* (a different OS) - -es1800*) - os=-ose + 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* | -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* | -hcos* \ - | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ - | -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* \ - | -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*) + # 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 | -xray | -os68k* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* \ - | -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 ;; - -sunos6*) - os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + lynx*5) + os=lynxos5 + ;; + 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 ;; - -utek*) - os=-bsd + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; - -dynix*) - os=-bsd + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; - -acis*) - os=-aos + wince*) + os=wince ;; - -atheos*) - os=-atheos + utek*) + os=bsd ;; - -syllable*) - os=-syllable + dynix*) + os=bsd ;; - -386bsd) - os=-bsd + acis*) + os=aos ;; - -ctix* | -uts*) - os=-sysv + atheos*) + os=atheos ;; - -nova*) - os=-rtmk-nova + syllable*) + os=syllable ;; - -ns2) - os=-nextstep2 + 386bsd) + os=bsd ;; - -nsk*) - os=-nsk + ctix* | uts*) + os=sysv + ;; + nova*) + os=rtmk-nova + ;; + 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 ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint ;; - -zvmoe) - os=-zvmoe + zvmoe) + os=zvmoe ;; - -dicos*) - os=-dicos + dicos*) + os=dicos ;; - -pikeos*) + pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. - case $basic_machine in + case $cpu in arm*) - os=-eabi + os=eabi ;; *) - os=-elf + os=elf ;; esac ;; - -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 exit 1 ;; @@ -1543,258 +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 ;; pru-*) - os=-elf + os=elf ;; *-be) - os=-beos + 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 + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs + 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-functions '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/configure b/configure index 065bff7..a38735b 100755 --- a/configure +++ b/configure @@ -13803,26 +13803,6 @@ $as_echo "#define HAVE_EXT2_IOCTLS 1" >>confdefs.h ;; esac - if test "x$ac_cv_header_sys_mount_h" = x; then : - for ac_header in sys/mount.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mount_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_MOUNT_H 1 -_ACEOF - -fi - -done - -fi - if test "x$ac_cv_header_sys_mount_h" = 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: sys/mount.h not present on your system! -See \`config.log' for more details" "$LINENO" 5; } -fi $as_echo_n "checking for mount 'nosuid' option... " cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13870,26 +13850,6 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "x$ac_cv_header_sys_mount_h" = x; then : - for ac_header in sys/mount.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mount_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_MOUNT_H 1 -_ACEOF - -fi - -done - -fi - if test "x$ac_cv_header_sys_mount_h" = 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: sys/mount.h not present on your system! -See \`config.log' for more details" "$LINENO" 5; } -fi $as_echo_n "checking for mount 'nodev' option... " cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ diff --git a/contrib/android/base_fs.c b/contrib/android/base_fs.c index 1420305..652317e 100644 --- a/contrib/android/base_fs.c +++ b/contrib/android/base_fs.c @@ -72,8 +72,7 @@ static struct basefs_entry *basefs_readline(FILE *f, const char *mountpoint, range_start = atoll(block); block = strtok_r(NULL, "-", &saveptr2); range_end = block ? atoll(block) : range_start; - add_blocks_to_range(&entry->head, &entry->tail, range_start, - range_end); + add_blocks_to_range(&entry->blocks, range_start, range_end); block_range = strtok_r(NULL, ",\n", &saveptr1); } end: @@ -151,7 +150,6 @@ static int start_new_file(char *path, ext2_ino_t ino EXT2FS_ATTR((unused)), { struct base_fs *params = data; - params->entry.head = params->entry.tail = NULL; params->entry.path = LINUX_S_ISREG(inode->i_mode) ? path : NULL; return 0; } @@ -162,8 +160,7 @@ static int add_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t blocknr, struct base_fs *params = data; if (params->entry.path && !metadata) - add_blocks_to_range(¶ms->entry.head, ¶ms->entry.tail, - blocknr, blocknr); + add_blocks_to_range(¶ms->entry.blocks, blocknr, blocknr); return 0; } @@ -181,11 +178,11 @@ static int end_new_file(void *data) return 0; if (fprintf(params->file, "%s%s ", params->mountpoint, params->entry.path) < 0 - || write_block_ranges(params->file, params->entry.head, ",") + || write_block_ranges(params->file, params->entry.blocks.head, ",") || fwrite("\n", 1, 1, params->file) != 1) return -1; - delete_block_ranges(params->entry.head); + delete_block_ranges(¶ms->entry.blocks); return 0; } diff --git a/contrib/android/base_fs.h b/contrib/android/base_fs.h index e9f46b4..f53f1ed 100644 --- a/contrib/android/base_fs.h +++ b/contrib/android/base_fs.h @@ -7,8 +7,7 @@ struct basefs_entry { char *path; - struct block_range *head; - struct block_range *tail; + struct block_range_list blocks; }; extern struct fsmap_format base_fs_format; diff --git a/contrib/android/basefs_allocator.c b/contrib/android/basefs_allocator.c index a014744..5c92ddc 100644 --- a/contrib/android/basefs_allocator.c +++ b/contrib/android/basefs_allocator.c @@ -1,3 +1,4 @@ +#include #include #include #include "basefs_allocator.h" @@ -8,108 +9,326 @@ 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); -static void fs_free_blocks_range(ext2_filsys fs, struct block_range *blocks) +/* + * 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) { - while (blocks) { - ext2fs_unmark_block_bitmap_range2(fs->block_map, blocks->start, - blocks->end - blocks->start + 1); - blocks = blocks->next; + 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 fs_reserve_blocks_range(ext2_filsys fs, struct block_range *blocks) +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) { - ext2fs_mark_block_bitmap_range2(fs->block_map, - blocks->start, blocks->end - blocks->start + 1); + for (block = blocks->start; block <= blocks->end; block++) + fs_reserve_block(fs, allocator, block); blocks = blocks->next; } } -errcode_t base_fs_alloc_load(ext2_filsys fs, const char *file, - const char *mountpoint) +/* + * 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) { - errcode_t retval; + 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; - struct ext2fs_hashmap *entries = basefs_parse(file, mountpoint); - if (!entries) - return -1; - allocator = malloc(sizeof(*allocator)); - if (!allocator) - goto err_alloc; + allocator = calloc(1, sizeof(*allocator)); + if (!allocator) { + retval = ENOMEM; + goto out; + } retval = ext2fs_read_bitmaps(fs); if (retval) - goto err_bitmap; - while ((e = ext2fs_hashmap_iter_in_order(entries, &it))) - fs_reserve_blocks_range(fs, e->head); + goto err_load; allocator->cur_entry = NULL; - allocator->entries = entries; + 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; - return 0; + goto out; -err_bitmap: - free(allocator); -err_alloc: - ext2fs_hashmap_free(entries); - return EXIT_FAILURE; +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 block_range *next_range; struct base_fs_allocator *allocator = fs->priv_data; struct basefs_entry *e = allocator->cur_entry; + ext2fs_block_bitmap dedup_map = allocator->dedup_block_map; - /* Try to get a block from the base_fs */ - if (e && e->head && ctx && (ctx->flags & BLOCK_ALLOC_DATA)) { - *ret = e->head->start; - e->head->start += 1; - if (e->head->start > e->head->end) { - next_range = e->head->next; - free(e->head); - e->head = next_range; - } - } else { /* Allocate a new block */ - retval = ext2fs_new_block2(fs, goal, fs->block_map, ret); - if (retval) - return retval; + 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; } - return 0; -} + if (retval != EXT2_ET_BLOCK_ALLOC_FAIL) + return retval; -void base_fs_alloc_cleanup(ext2_filsys fs) -{ - struct basefs_entry *e; - struct ext2fs_hashmap_entry *it = NULL; - struct base_fs_allocator *allocator = fs->priv_data; + /* 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; + } - while ((e = ext2fs_hashmap_iter_in_order(allocator->entries, &it))) { - fs_free_blocks_range(fs, e->head); - delete_block_ranges(e->head); - e->head = e->tail = NULL; + /* + * 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; - ext2fs_hashmap_free(allocator->entries); - free(allocator); } errcode_t base_fs_alloc_set_target(ext2_filsys fs, const char *target_path, @@ -122,10 +341,12 @@ errcode_t base_fs_alloc_set_target(ext2_filsys fs, const char *target_path, if (mode != S_IFREG) return 0; - if (allocator) + if (allocator) { allocator->cur_entry = ext2fs_hashmap_lookup(allocator->entries, target_path, strlen(target_path)); + allocator->next_lblk = 0; + } return 0; } @@ -140,9 +361,7 @@ errcode_t base_fs_alloc_unset_target(ext2_filsys fs, if (!allocator || !allocator->cur_entry || mode != S_IFREG) return 0; - fs_free_blocks_range(fs, allocator->cur_entry->head); - delete_block_ranges(allocator->cur_entry->head); - allocator->cur_entry->head = allocator->cur_entry->tail = NULL; - allocator->cur_entry = NULL; + 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 index f1109cd..6d1c65e 100644 --- a/contrib/android/basefs_allocator.h +++ b/contrib/android/basefs_allocator.h @@ -5,7 +5,7 @@ # include errcode_t base_fs_alloc_load(ext2_filsys fs, const char *file, - const char *mountpoint); + 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, diff --git a/contrib/android/block_list.c b/contrib/android/block_list.c index 25dcc51..63cc1a2 100644 --- a/contrib/android/block_list.c +++ b/contrib/android/block_list.c @@ -9,16 +9,13 @@ struct block_list { FILE *f; const char *mountpoint; - struct { - const char *filename; - struct block_range *head; - struct block_range *tail; - } entry; + const char *filename; + struct block_range_list blocks; }; static void *init(const char *file, const char *mountpoint) { - struct block_list *params = malloc(sizeof(*params)); + struct block_list *params = calloc(1, sizeof(*params)); if (!params) return NULL; @@ -37,8 +34,7 @@ static int start_new_file(char *path, ext2_ino_t ino EXT2FS_ATTR((unused)), { struct block_list *params = data; - params->entry.head = params->entry.tail = NULL; - params->entry.filename = LINUX_S_ISREG(inode->i_mode) ? path : NULL; + params->filename = LINUX_S_ISREG(inode->i_mode) ? path : NULL; return 0; } @@ -47,9 +43,8 @@ static int add_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t blocknr, { struct block_list *params = data; - if (params->entry.filename && !metadata) - add_blocks_to_range(¶ms->entry.head, ¶ms->entry.tail, - blocknr, blocknr); + if (params->filename && !metadata) + add_blocks_to_range(¶ms->blocks, blocknr, blocknr); return 0; } @@ -63,15 +58,15 @@ static int end_new_file(void *data) { struct block_list *params = data; - if (!params->entry.filename || !params->entry.head) + if (!params->filename || !params->blocks.head) return 0; if (fprintf(params->f, "%s%s ", params->mountpoint, - params->entry.filename) < 0 - || write_block_ranges(params->f, params->entry.head, " ") + params->filename) < 0 + || write_block_ranges(params->f, params->blocks.head, " ") || fwrite("\n", 1, 1, params->f) != 1) return -1; - delete_block_ranges(params->entry.head); + delete_block_ranges(¶ms->blocks); return 0; } diff --git a/contrib/android/block_range.c b/contrib/android/block_range.c index 2f951c7..0a06882 100644 --- a/contrib/android/block_range.c +++ b/contrib/android/block_range.c @@ -12,29 +12,35 @@ struct block_range *new_block_range(blk64_t start, blk64_t end) return range; } -void add_blocks_to_range(struct block_range **head, struct block_range **tail, - blk64_t blk_start, blk64_t blk_end) +void add_blocks_to_range(struct block_range_list *list, blk64_t blk_start, + blk64_t blk_end) { - if (*head == NULL) - *head = *tail = new_block_range(blk_start, blk_end); - else if ((*tail)->end + 1 == blk_start) - (*tail)->end += (blk_end - blk_start + 1); + 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); - (*tail)->next = range; - *tail = range; + list->tail->next = range; + list->tail = range; } } -void delete_block_ranges(struct block_range *head) +static void remove_head(struct block_range_list *list) { - struct block_range *tmp; + struct block_range *next_range = list->head->next; - while (head) { - tmp = head->next; - free(head); - head = tmp; - } + 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, @@ -62,3 +68,13 @@ int write_block_ranges(FILE *f, struct block_range *range, 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 index 31e3c23..cf7971e 100644 --- a/contrib/android/block_range.h +++ b/contrib/android/block_range.h @@ -10,9 +10,20 @@ struct block_range { struct block_range *next; }; -void add_blocks_to_range(struct block_range **head, struct block_range **tail, - blk64_t blk_start, blk64_t blk_end); -void delete_block_ranges(struct block_range *head); +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 index 3264a99..1beb1e2 100644 --- a/contrib/android/e2fsdroid.c +++ b/contrib/android/e2fsdroid.c @@ -301,7 +301,8 @@ int main(int argc, char *argv[]) if (src_dir) { ext2fs_read_bitmaps(fs); if (basefs_in) { - retval = base_fs_alloc_load(fs, basefs_in, mountpoint); + retval = base_fs_alloc_load(fs, basefs_in, mountpoint, + src_dir); if (retval) { com_err(prog_name, retval, "%s", "while reading base_fs file"); diff --git a/contrib/android/fsmap.c b/contrib/android/fsmap.c index 36adb7f..9ee8472 100644 --- a/contrib/android/fsmap.c +++ b/contrib/android/fsmap.c @@ -23,11 +23,51 @@ static int walk_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t *blocknr, 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); @@ -38,10 +78,20 @@ static errcode_t ino_iter_blocks(ext2_filsys fs, ext2_ino_t ino, return format->inline_data(&(inode.i_block[0]), format->private); - retval = ext2fs_block_iterate3(fs, ino, 0, NULL, walk_block, pdata); - if (retval) - com_err(__func__, retval, _("listing blocks of ino \"%u\""), - ino); + 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; } diff --git a/debian/changelog b/debian/changelog index e9120cd..c11767d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,68 @@ +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 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 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 Tue, 07 Jan 2020 09:18:39 -0500 + e2fsprogs (1.45.4-1) unstable; urgency=medium * New upstream feature diff --git a/debian/compat b/debian/compat index b4de394..48082f7 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -11 +12 diff --git a/debian/control b/debian/control index f074a05..69471f4 100644 --- a/debian/control +++ b/debian/control @@ -2,8 +2,8 @@ Source: e2fsprogs Section: admin Priority: required Maintainer: Theodore Y. Ts'o -Build-Depends: gettext, texinfo, pkg-config, libfuse-dev [linux-any kfreebsd-any] , libattr1-dev, debhelper (>= 11.0), dh-exec, libblkid-dev, uuid-dev, m4, udev [linux-any], systemd [linux-any], cron [linux-any] -Standards-Version: 4.4.0 +Build-Depends: gettext, texinfo, pkg-config, libfuse-dev [linux-any kfreebsd-any] , debhelper (>= 12.0), dh-exec, libblkid-dev, uuid-dev, m4, udev [linux-any], systemd [linux-any], cron [linux-any] +Standards-Version: 4.4.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 diff --git a/debian/libext2fs2.symbols b/debian/libext2fs2.symbols index 78c20b2..a03d3a9 100644 --- a/debian/libext2fs2.symbols +++ b/debian/libext2fs2.symbols @@ -6,6 +6,7 @@ libe2p.so.2 libext2fs2 #MINVER# e2p_encmode2string@Base 1.43 e2p_encoding2str@Base 1.45.1 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 @@ -175,6 +176,10 @@ libext2fs.so.2 libext2fs2 #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 @@ -322,6 +327,7 @@ libext2fs.so.2 libext2fs2 #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 @@ -474,6 +480,7 @@ libext2fs.so.2 libext2fs2 #MINVER# 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 @@ -514,6 +521,15 @@ libext2fs.so.2 libext2fs2 #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 diff --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 0000000..e149342 --- /dev/null +++ b/debian/tests/control @@ -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 index 0000000..8b4e08a --- /dev/null +++ b/debian/tests/fuse2fs @@ -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 index 0000000..966be96 --- /dev/null +++ b/debian/tests/smoke @@ -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 + diff --git a/debugfs/Android.bp b/debugfs/Android.bp index 9f9a9f0..b9f299b 100644 --- a/debugfs/Android.bp +++ b/debugfs/Android.bp @@ -66,6 +66,7 @@ cc_binary { cc_binary { name: "debugfs_static", static_executable: true, + host_supported: true, defaults: ["debugfs-defaults"], static_libs: debugfs_libs, diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c index 15b0121..4bbadf1 100644 --- a/debugfs/debugfs.c +++ b/debugfs/debugfs.c @@ -48,8 +48,14 @@ 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; +#endif int ss_sci_idx; ext2_filsys current_fs; @@ -467,7 +473,7 @@ void do_show_super_stats(int argc, char *argv[], } 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); @@ -718,7 +724,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; @@ -851,10 +857,10 @@ void internal_dump_inode(FILE *out, const char *prefix, 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 Translator: %d\n", + "%sFile ACL: %u Translator: %u\n", prefix, inode->i_file_acl, inode->osd1.hurd1.h_i_translator); @@ -864,13 +870,13 @@ void internal_dump_inode(FILE *out, const char *prefix, inode->i_file_acl | ((long long) (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: @@ -880,7 +886,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, @@ -1397,7 +1403,7 @@ void do_modify_inode(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), 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, @@ -2133,7 +2139,7 @@ void do_imap(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), 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); @@ -2446,8 +2452,10 @@ 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); } @@ -2486,6 +2494,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; diff --git a/debugfs/debugfs.h b/debugfs/debugfs.h index 477d9bb..956517b 100644 --- a/debugfs/debugfs.h +++ b/debugfs/debugfs.h @@ -123,6 +123,8 @@ extern void do_set_block_group_descriptor(int argc, char **, int sci_idx, void * 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); diff --git a/debugfs/do_journal.c b/debugfs/do_journal.c index eeb363e..15ef682 100644 --- a/debugfs/do_journal.c +++ b/debugfs/do_journal.c @@ -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); } @@ -912,7 +912,7 @@ void do_journal_open(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), } 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); diff --git a/debugfs/extent_inode.c b/debugfs/extent_inode.c index ada1308..6706629 100644 --- a/debugfs/extent_inode.c +++ b/debugfs/extent_inode.c @@ -77,7 +77,7 @@ void do_extent_open(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), 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; @@ -107,7 +107,7 @@ void do_extent_open(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), 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); diff --git a/debugfs/htree.c b/debugfs/htree.c index 3aae3c2..7fae7f1 100644 --- a/debugfs/htree.c +++ b/debugfs/htree.c @@ -288,7 +288,7 @@ void do_htree_dump(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), 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 *) ((char *)rootnode + rootnode->info_length); diff --git a/doc/RelNotes/v1.45.5.txt b/doc/RelNotes/v1.45.5.txt new file mode 100644 index 0000000..70cef96 --- /dev/null +++ b/doc/RelNotes/v1.45.5.txt @@ -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 index 0000000..ac822bf --- /dev/null +++ b/doc/RelNotes/v1.45.6.txt @@ -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/libext2fs.texinfo b/doc/libext2fs.texinfo index a001be5..51012eb 100644 --- a/doc/libext2fs.texinfo +++ b/doc/libext2fs.texinfo @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename libext2fs.info -@settitle The EXT2FS Library (version 1.45.4) +@settitle The EXT2FS Library (version 1.45.6) @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.45.4 -@subtitle September 2019 +@subtitle Version 1.45.6 +@subtitle March 2020 @author by Theodore Ts'o @@ -101,7 +101,7 @@ by the Foundation. @top The EXT2FS Library -This manual documents the EXT2FS Library, version 1.45.4. +This manual documents the EXT2FS Library, version 1.45.6. @menu * Introduction to the EXT2FS Library:: diff --git a/e2fsck/Android.bp b/e2fsck/Android.bp index f344312..d4326e5 100644 --- a/e2fsck/Android.bp +++ b/e2fsck/Android.bp @@ -66,3 +66,13 @@ cc_binary { 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/Makefile.in b/e2fsck/Makefile.in index bc7195f..3fdbfbd 100644 --- a/e2fsck/Makefile.in +++ b/e2fsck/Makefile.in @@ -133,7 +133,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,11 +144,11 @@ 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) fullcheck check:: tst_refcount tst_region tst_problem $(TESTENV) ./tst_refcount diff --git a/e2fsck/dirinfo.c b/e2fsck/dirinfo.c index cceadac..49d624c 100644 --- a/e2fsck/dirinfo.c +++ b/e2fsck/dirinfo.c @@ -17,8 +17,8 @@ #include 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 @@ -329,7 +330,7 @@ void e2fsck_free_dir_info(e2fsck_t ctx) if (unlink(ctx->dir_info->tdb_fn) < 0) com_err("e2fsck_free_dir_info", errno, _("while freeing dir_info tdb file")); - free(ctx->dir_info->tdb_fn); + ext2fs_free_mem(&ctx->dir_info->tdb_fn); } #endif if (ctx->dir_info->array) @@ -412,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 diff --git a/e2fsck/dx_dirinfo.c b/e2fsck/dx_dirinfo.c index c0b0e9a..caca3e3 100644 --- a/e2fsck/dx_dirinfo.c +++ b/e2fsck/dx_dirinfo.c @@ -17,7 +17,7 @@ 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; @@ -41,7 +41,7 @@ void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, struct ext2_inode *inode, &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; @@ -73,11 +73,10 @@ void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, struct ext2_inode *inode, dir->ino = ino; dir->numblocks = num_blocks; dir->hashversion = 0; - dir->casefolded_hash = inode->i_flags & EXT4_CASEFOLD_FL; + 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"); - } /* @@ -86,7 +85,7 @@ void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, struct ext2_inode *inode, */ 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; @@ -98,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) @@ -116,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; @@ -137,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; } @@ -145,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)++; } diff --git a/e2fsck/e2fsck.h b/e2fsck/e2fsck.h index 2d359b3..feb605c 100644 --- a/e2fsck/e2fsck.h +++ b/e2fsck/e2fsck.h @@ -104,12 +104,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 */ - int casefolded_hash; + 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 @@ -120,8 +120,8 @@ 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; @@ -235,12 +235,12 @@ struct e2fsck_struct { 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 */ @@ -318,9 +318,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 @@ -478,8 +478,9 @@ 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 */ typedef __u64 ea_key_t; @@ -595,7 +596,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); diff --git a/e2fsck/ea_refcount.c b/e2fsck/ea_refcount.c index ecb1986..aa5d7d7 100644 --- a/e2fsck/ea_refcount.c +++ b/e2fsck/ea_refcount.c @@ -53,10 +53,9 @@ errcode_t ea_refcount_create(size_t size, ext2_refcount_t *ret) 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; @@ -66,10 +65,9 @@ errcode_t ea_refcount_create(size_t size, ext2_refcount_t *ret) 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; diff --git a/e2fsck/emptydir.c b/e2fsck/emptydir.c index a3bfd46..7aea7b6 100644 --- a/e2fsck/emptydir.c +++ b/e2fsck/emptydir.c @@ -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/extend.c b/e2fsck/extend.c index bdb62c3..9d17e44 100644 --- a/e2fsck/extend.c +++ b/e2fsck/extend.c @@ -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); } diff --git a/e2fsck/extents.c b/e2fsck/extents.c index 3073725..e913932 100644 --- a/e2fsck/extents.c +++ b/e2fsck/extents.c @@ -264,7 +264,7 @@ extents_loaded: goto err; ext_written = 0; - start_val = ext2fs_inode_i_blocks(ctx->fs, EXT2_INODE(&inode)); + start_val = ext2fs_get_stat_i_blocks(ctx->fs, EXT2_INODE(&inode)); for (i = 0, ex = list->extents; i < list->count; i++, ex++) { memcpy(&extent, ex, sizeof(struct ext2fs_extent)); extent.e_flags &= EXT2_EXTENT_FLAGS_UNINIT; @@ -302,15 +302,10 @@ extents_loaded: ext_written++; } - delta = ext2fs_inode_i_blocks(ctx->fs, EXT2_INODE(&inode)) - start_val; - if (delta) { - if (!ext2fs_has_feature_huge_file(ctx->fs->super) || - !(inode.i_flags & EXT4_HUGE_FILE_FL)) - delta <<= 9; - else - delta *= ctx->fs->blocksize; - quota_data_add(ctx->qctx, &inode, ino, delta); - } + delta = ext2fs_get_stat_i_blocks(ctx->fs, EXT2_INODE(&inode)) - + start_val; + if (delta) + quota_data_add(ctx->qctx, &inode, ino, delta << 9); #if defined(DEBUG) || defined(DEBUG_SUMMARY) printf("rebuild: ino=%d extents=%d->%d\n", ino, list->ext_read, @@ -327,7 +322,7 @@ err: /* 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) || @@ -336,9 +331,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; @@ -354,7 +348,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; @@ -374,10 +368,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, diff --git a/e2fsck/logfile.c b/e2fsck/logfile.c index 3eeefd1..63e9a12 100644 --- a/e2fsck/logfile.c +++ b/e2fsck/logfile.c @@ -353,7 +353,7 @@ void set_up_logging(e2fsck_t ctx) 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; diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index b146908..c9e8bf8 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -1171,6 +1171,7 @@ void e2fsck_pass1(e2fsck_t ctx) struct scan_callback_struct scan_struct; struct ext2_super_block *sb = ctx->fs->super; const char *old_op; + const char *eop_next_inode = _("getting next inode from scan"); int imagic_fs, extent_fs, inlinedata_fs, casefold_fs; int low_dtime_check = 1; unsigned int inode_size = EXT2_INODE_SIZE(fs->super); @@ -1363,7 +1364,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) diff --git a/e2fsck/pass1b.c b/e2fsck/pass1b.c index 5693b9c..3352f9b 100644 --- a/e2fsck/pass1b.c +++ b/e2fsck/pass1b.c @@ -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); } @@ -705,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); diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c index 8b40e93..cb1e587 100644 --- a/e2fsck/pass2.c +++ b/e2fsck/pass2.c @@ -71,8 +71,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 { @@ -88,7 +88,7 @@ struct check_dir_struct { static void update_parents(struct dx_dir_info *dx_dir, int type) { struct dx_dirblock_info *dx_db, *dx_parent, *dx_previous; - int b; + blk_t b; for (b = 0, dx_db = dx_dir->dx_block; b < dx_dir->numblocks; @@ -130,8 +130,9 @@ void e2fsck_pass2(e2fsck_t ctx) struct check_dir_struct cd; struct dx_dir_info *dx_dir; struct dx_dirblock_info *dx_db; - int b; - int i, depth; + blk_t b; + ext2_ino_t i; + short depth; problem_t code; int bad_dir; int (*check_dir_func)(ext2_filsys fs, @@ -310,10 +311,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]; @@ -569,8 +570,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; @@ -586,10 +587,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); @@ -645,7 +646,7 @@ static void parse_int_node(ext2_filsys fs, #endif 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)) @@ -934,6 +935,7 @@ static int check_dir_block(ext2_filsys fs, int encrypted = 0; size_t max_block_size; int hash_flags = 0; + static char *eop_read_dirblock = NULL; cd = (struct check_dir_struct *) priv_data; ibuf = buf = cd->buf; @@ -1004,7 +1006,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); diff --git a/e2fsck/pass4.c b/e2fsck/pass4.c index 10be7f8..8c2d2f1 100644 --- a/e2fsck/pass4.c +++ b/e2fsck/pass4.c @@ -237,6 +237,8 @@ void e2fsck_pass4(e2fsck_t ctx) 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; @@ -250,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), diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c index 3a5c88d..c1d45a5 100644 --- a/e2fsck/pass5.c +++ b/e2fsck/pass5.c @@ -842,7 +842,7 @@ static void check_inode_end(e2fsck_t ctx) 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) { diff --git a/e2fsck/problem.c b/e2fsck/problem.c index 5eb5973..78d6689 100644 --- a/e2fsck/problem.c +++ b/e2fsck/problem.c @@ -2009,6 +2009,11 @@ static struct e2fsck_problem problem_table[] = { 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 */ diff --git a/e2fsck/problem.h b/e2fsck/problem.h index 5cc8924..7a7294d 100644 --- a/e2fsck/problem.h +++ b/e2fsck/problem.h @@ -1153,6 +1153,9 @@ struct problem_context { /* 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 */ diff --git a/e2fsck/region.c b/e2fsck/region.c index d5b37df..788e0d0 100644 --- a/e2fsck/region.c +++ b/e2fsck/region.c @@ -36,11 +36,12 @@ struct region_struct { 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), ®ion); + if (retval) return NULL; - memset(region, 0, sizeof(struct region_struct)); + region->min = min; region->max = max; region->last = NULL; @@ -53,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(®ion); } 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)) @@ -105,7 +107,7 @@ 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; @@ -121,8 +123,8 @@ int region_allocate(region_t region, region_addr_t start, int n) * Insert a new region element structure into the linked list */ append_to_list: - new_region = malloc(sizeof(struct region_el)); - if (!new_region) + retval = ext2fs_get_mem(sizeof(struct region_el), &new_region); + if (retval) return -1; new_region->start = start; new_region->end = start + n; diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c index a5fc1be..1616d07 100644 --- a/e2fsck/rehash.c +++ b/e2fsck/rehash.c @@ -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,8 +95,8 @@ struct hash_entry { }; struct out_dir { - int num; - int max; + blk_t num; + blk_t max; char *buf; ext2_dirhash_t *hashes; }; @@ -160,6 +160,10 @@ static int fill_dir_block(ext2_filsys fs, 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; @@ -169,13 +173,16 @@ 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++; @@ -256,23 +263,28 @@ static EXT2_QSORT_TYPE hash_cmp(const void *a, const void *b) } 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; @@ -293,11 +305,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; } @@ -367,8 +383,8 @@ static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs, struct fill_dir_struct *fd) { 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; @@ -401,6 +417,11 @@ static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs, 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++) { @@ -632,6 +653,9 @@ static int alloc_blocks(ext2_filsys fs, 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) @@ -721,6 +745,9 @@ static errcode_t calculate_tree(ext2_filsys fs, 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, @@ -728,6 +755,11 @@ static errcode_t calculate_tree(ext2_filsys fs, 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) @@ -869,14 +901,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; @@ -965,8 +997,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; @@ -1019,6 +1051,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) { diff --git a/e2fsck/scantest.c b/e2fsck/scantest.c index 6131141..ed3595f 100644 --- a/e2fsck/scantest.c +++ b/e2fsck/scantest.c @@ -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)); diff --git a/e2fsck/super.c b/e2fsck/super.c index e5932be..e1c3f93 100644 --- a/e2fsck/super.c +++ b/e2fsck/super.c @@ -595,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); @@ -1038,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; @@ -1050,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; diff --git a/e2fsck/unix.c b/e2fsck/unix.c index 68f4987..e71d783 100644 --- a/e2fsck/unix.c +++ b/e2fsck/unix.c @@ -1692,11 +1692,10 @@ 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)) { + if (ctx->device_name == 0 && sb->s_volume_name[0]) ctx->device_name = string_copy(ctx, 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++) @@ -1704,19 +1703,19 @@ failure: *cp = '_'; if (ctx->problem_logf) { - char buf[48]; fprintf(ctx->problem_logf, "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]) { - memset(buf, 0, sizeof(buf)); - strncpy(buf, sb->s_volume_name, sizeof(buf)); - fprintf(ctx->problem_logf, " label=\"%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); } diff --git a/e2fsck/util.c b/e2fsck/util.c index db6a1cc..d98b8e4 100644 --- a/e2fsck/util.c +++ b/e2fsck/util.c @@ -116,7 +116,7 @@ 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; @@ -125,13 +125,12 @@ void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size, #ifdef DEBUG_ALLOCATE_MEMORY printf("Allocating %u bytes for %s...\n", size, description); #endif - ret = malloc(size); - if (!ret) { + if (ext2fs_get_memzero(size, &ret)) { sprintf(buf, "Can't allocate %u bytes for %s\n", size, description); fatal_error(ctx, buf); } - memset(ret, 0, size); + return ret; } @@ -422,9 +421,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)) || @@ -437,18 +433,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 < 2ULL << 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); @@ -777,8 +776,10 @@ void dump_mmp_msg(struct mmp_struct *mmp, const char *fmt, ...) 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", mmp->mmp_nodename); - printf(" mmp_device_name: %s\n", mmp->mmp_bdevname); + printf(" mmp_node_name: %.*s\n", + EXT2_LEN_STR(mmp->mmp_nodename)); + printf(" mmp_device_name: %.*s\n", + EXT2_LEN_STR(mmp->mmp_bdevname)); } } diff --git a/e2fsprogs.lsm b/e2fsprogs.lsm index 311e9d1..fe9d65e 100644 --- a/e2fsprogs.lsm +++ b/e2fsprogs.lsm @@ -1,15 +1,15 @@ Begin3 Title: EXT2 Filesystem utilities -Version: 1.45.4 -Entered-date: 2019-09-23 +Version: 1.45.6 +Entered-date: 2020-03-20 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 - 7744kB e2fsprogs-1.45.4.tar.gz - 1kB e2fsprogs-1.45.4.lsm + 7756kB e2fsprogs-1.45.6.tar.gz + 1kB e2fsprogs-1.45.6.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 diff --git a/e2fsprogs.spec b/e2fsprogs.spec index ca35cc2..7026601 100644 --- a/e2fsprogs.spec +++ b/e2fsprogs.spec @@ -5,7 +5,7 @@ Summary: Utilities for managing ext2/ext3/ext4 filesystems Name: e2fsprogs -Version: 1.45.4 +Version: 1.45.6 Release: 0 License: GPLv2 Group: System Environment/Base diff --git a/lib/Android.bp b/lib/Android.bp index 771bb59..d877475 100644 --- a/lib/Android.bp +++ b/lib/Android.bp @@ -6,6 +6,8 @@ cc_library_headers { name: "libext2-headers", host_supported: true, + vendor_available: true, + ramdisk_available: true, recovery_available: true, target: { windows: { diff --git a/lib/blkid/Android.bp b/lib/blkid/Android.bp index 5a02736..ccfdf8b 100644 --- a/lib/blkid/Android.bp +++ b/lib/blkid/Android.bp @@ -3,6 +3,7 @@ cc_library { name: "libext2_blkid", host_supported: true, + ramdisk_available: true, recovery_available: true, unique_host_soname: true, defaults: ["e2fsprogs-defaults"], diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c index d720144..f8687cd 100644 --- a/lib/blkid/probe.c +++ b/lib/blkid/probe.c @@ -144,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)); diff --git a/lib/e2p/Android.bp b/lib/e2p/Android.bp index d30272b..aa09ad0 100644 --- a/lib/e2p/Android.bp +++ b/lib/e2p/Android.bp @@ -3,10 +3,12 @@ cc_library { name: "libext2_e2p", host_supported: true, + ramdisk_available: true, recovery_available: true, unique_host_soname: true, defaults: ["e2fsprogs-defaults"], srcs: [ + "encoding.c", "feature.c", "fgetflags.c", "fsetflags.c", diff --git a/lib/e2p/e2p.h b/lib/e2p/e2p.h index c3a6b25..ae7dd74 100644 --- a/lib/e2p/e2p.h +++ b/lib/e2p/e2p.h @@ -50,6 +50,8 @@ int setversion (int fd, unsigned long version); 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); diff --git a/lib/e2p/feature.c b/lib/e2p/feature.c index 117acf2..515a0f8 100644 --- a/lib/e2p/feature.c +++ b/lib/e2p/feature.c @@ -45,6 +45,8 @@ 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_RO_INCOMPAT, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER, "sparse_super" }, @@ -133,17 +135,20 @@ static struct feature jrnl_feature_list[] = { { 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: @@ -161,6 +166,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; } diff --git a/lib/e2p/ls.c b/lib/e2p/ls.c index 5a44617..1521099 100644 --- a/lib/e2p/ls.c +++ b/lib/e2p/ls.c @@ -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, ""); - 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, ""); - 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: \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: \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"); @@ -419,10 +418,8 @@ 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", @@ -433,10 +430,8 @@ void list_super2(struct ext2_super_block * sb, FILE *f) 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", diff --git a/lib/et/Android.bp b/lib/et/Android.bp index 3414639..7df5bf6 100644 --- a/lib/et/Android.bp +++ b/lib/et/Android.bp @@ -3,6 +3,7 @@ cc_library { name: "libext2_com_err", host_supported: true, + ramdisk_available: true, recovery_available: true, unique_host_soname: true, defaults: ["e2fsprogs-defaults"], diff --git a/lib/et/error_message.c b/lib/et/error_message.c index bd18be7..cd9f57f 100644 --- a/lib/et/error_message.c +++ b/lib/et/error_message.c @@ -113,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) { @@ -124,14 +129,14 @@ const char * error_message (errcode_t code) offset = (int) (code & ((1<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) diff --git a/lib/ext2fs/blknum.c b/lib/ext2fs/blknum.c index 9ee5c66..ec77a06 100644 --- a/lib/ext2fs/blknum.c +++ b/lib/ext2fs/blknum.c @@ -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) @@ -521,6 +537,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; diff --git a/lib/ext2fs/csum.c b/lib/ext2fs/csum.c index 9823613..a717258 100644 --- a/lib/ext2fs/csum.c +++ b/lib/ext2fs/csum.c @@ -267,13 +267,15 @@ static errcode_t __get_dirent_tail(ext2_filsys fs, top = EXT2_DIRENT_TAIL(dirent, fs->blocksize); rec_len = translate(d->rec_len); - while (rec_len && !(rec_len & 0x3)) { + while ((void *) d < top) { + if ((rec_len < 8) || (rec_len & 0x03)) + return EXT2_ET_DIR_CORRUPTED; d = (struct ext2_dir_entry *)(((char *)d) + rec_len); - if ((void *)d >= top) - break; rec_len = translate(d->rec_len); } + if ((void *)d > ((void *)dirent + fs->blocksize)) + return EXT2_ET_DIR_CORRUPTED; if (d != top) return EXT2_ET_DIR_NO_SPACE_FOR_CSUM; @@ -290,7 +292,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, diff --git a/lib/ext2fs/dirhash.c b/lib/ext2fs/dirhash.c index d560e20..42fe98b 100644 --- a/lib/ext2fs/dirhash.c +++ b/lib/ext2fs/dirhash.c @@ -20,6 +20,10 @@ #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 * H0 = Key diff --git a/lib/ext2fs/ext2_err.et.in b/lib/ext2fs/ext2_err.et.in index b2ba71a..0c76fee 100644 --- a/lib/ext2fs/ext2_err.et.in +++ b/lib/ext2fs/ext2_err.et.in @@ -545,4 +545,7 @@ ec EXT2_ET_INODE_CORRUPTED, ec EXT2_ET_EA_INODE_CORRUPTED, "Inode containing extended attribute value is corrupted" +ec EXT2_ET_NO_GDESC, + "Group descriptors not loaded" + end diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h index cbb44bd..d31891c 100644 --- a/lib/ext2fs/ext2_fs.h +++ b/lib/ext2fs/ext2_fs.h @@ -682,8 +682,8 @@ struct ext2_super_block { /*060*/ __u32 s_feature_incompat; /* incompatible feature set */ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ /*068*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */ -/*078*/ char s_volume_name[EXT2_LABEL_LEN]; /* volume name */ -/*088*/ char s_last_mounted[64]; /* directory where last mounted */ +/*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 @@ -731,15 +731,15 @@ struct ext2_super_block { __u32 s_first_error_time; /* first time an error happened */ __u32 s_first_error_ino; /* inode involved in first error */ /*1a0*/ __u64 s_first_error_block; /* block involved in first error */ - __u8 s_first_error_func[32]; /* function where the error happened */ + __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 */ /*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 */ -/*1e0*/ __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) -/*200*/ __u8 s_mount_opts[64]; +/*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 */ @@ -763,6 +763,7 @@ struct ext2_super_block { }; #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 @@ -810,6 +811,7 @@ 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 EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 @@ -911,6 +913,7 @@ 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_RO_COMPAT_FUNCS(sparse_super, 2, SPARSE_SUPER) EXT4_FEATURE_RO_COMPAT_FUNCS(large_file, 2, LARGE_FILE) @@ -1094,9 +1097,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]; diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index 59fd974..4b7c836 100644 --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@ -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; @@ -908,7 +908,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); @@ -1760,6 +1762,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); @@ -1837,7 +1841,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; @@ -1847,15 +1852,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); } /* @@ -1889,6 +1889,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 */ /* diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c index 78a823a..871319a 100644 --- a/lib/ext2fs/ext_attr.c +++ b/lib/ext2fs/ext_attr.c @@ -924,8 +924,8 @@ static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle, !(ea_inode->i_flags & EXT4_EA_INODE_FL) || ea_inode->i_links_count == 0) err = EXT2_ET_EA_INODE_CORRUPTED; - else if (ext2fs_file_get_size(ea_file) != - entry->e_value_size) + 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, @@ -1550,14 +1550,15 @@ errcode_t ext2fs_xattr_set(struct ext2_xattr_handle *h, new_value, &value_len); if (ret) goto out; - } else + } 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 && - !memcmp(x->value, new_value, value_len)) { + (!value_len || + !memcmp(x->value, new_value, value_len))) { ret = 0; goto out; } diff --git a/lib/ext2fs/gen_bitmap.c b/lib/ext2fs/gen_bitmap.c index c94c21b..1536d4b 100644 --- a/lib/ext2fs/gen_bitmap.c +++ b/lib/ext2fs/gen_bitmap.c @@ -418,7 +418,7 @@ errcode_t ext2fs_get_generic_bitmap_range(ext2fs_generic_bitmap gen_bmap, 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; } @@ -435,7 +435,7 @@ errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap gen_bmap, 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; } diff --git a/lib/ext2fs/imager.c b/lib/ext2fs/imager.c index 7fd06f7..b3ede9a 100644 --- a/lib/ext2fs/imager.c +++ b/lib/ext2fs/imager.c @@ -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; + 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; @@ -107,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; } } @@ -141,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; @@ -152,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; @@ -167,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; } @@ -201,6 +205,9 @@ errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd, int j; #endif + if (fs->group_desc == NULL) + return EXT2_ET_NO_GDESC; + buf = malloc(fs->blocksize); if (!buf) return ENOMEM; @@ -249,7 +256,7 @@ errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd, } #endif - actual = write(fd, cp, fs->blocksize * fs->desc_blocks); + actual = write(fd, cp, (ssize_t)fs->blocksize * fs->desc_blocks); #ifdef WORDS_BIGENDIAN @@ -265,7 +272,7 @@ errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd, 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; } @@ -287,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; @@ -311,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; @@ -340,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) { @@ -415,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) { diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c index 75df418..c4377ee 100644 --- a/lib/ext2fs/inode.c +++ b/lib/ext2fs/inode.c @@ -309,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); } @@ -332,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 diff --git a/lib/ext2fs/inode_io.c b/lib/ext2fs/inode_io.c index f3d94c8..d7474a6 100644 --- a/lib/ext2fs/inode_io.c +++ b/lib/ext2fs/inode_io.c @@ -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); diff --git a/lib/ext2fs/ismounted.c b/lib/ext2fs/ismounted.c index 6cd497d..46d330d 100644 --- a/lib/ext2fs/ismounted.c +++ b/lib/ext2fs/ismounted.c @@ -128,8 +128,19 @@ 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 (ext2fsP_is_disk_device(st_buf.st_mode)) { #ifndef __GNU__ @@ -168,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 @@ -242,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) @@ -367,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; @@ -381,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, "", mtlen); @@ -401,21 +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 && - ext2fsP_is_disk_device(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; } diff --git a/lib/ext2fs/mmp.c b/lib/ext2fs/mmp.c index 2da935e..e96a227 100644 --- a/lib/ext2fs/mmp.c +++ b/lib/ext2fs/mmp.c @@ -57,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; } diff --git a/lib/ext2fs/qcow2.c b/lib/ext2fs/qcow2.c index 71a4792..ee701f7 100644 --- a/lib/ext2fs/qcow2.c +++ b/lib/ext2fs/qcow2.c @@ -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,7 +162,7 @@ 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; @@ -212,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; diff --git a/lib/ext2fs/qcow2.h b/lib/ext2fs/qcow2.h index 5576348..b649c9c 100644 --- a/lib/ext2fs/qcow2.h +++ b/lib/ext2fs/qcow2.h @@ -30,8 +30,8 @@ #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 diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c index f1c4188..d80c9eb 100644 --- a/lib/ext2fs/rw_bitmaps.c +++ b/lib/ext2fs/rw_bitmaps.c @@ -306,9 +306,10 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block) for (i = 0; i < fs->group_desc_count; 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, @@ -340,9 +341,10 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block) } 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, @@ -396,11 +398,11 @@ success_cleanup: cleanup: if (do_block) { - ext2fs_free_mem(&fs->block_map); + ext2fs_free_block_bitmap(fs->block_map); fs->block_map = 0; } if (do_inode) { - ext2fs_free_mem(&fs->inode_map); + ext2fs_free_inode_bitmap(fs->inode_map); fs->inode_map = 0; } if (inode_bitmap) diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c index a156004..a3d5d16 100644 --- a/lib/ext2fs/swapfs.c +++ b/lib/ext2fs/swapfs.c @@ -22,7 +22,6 @@ #include "ext2fsP.h" #include -#ifdef WORDS_BIGENDIAN void ext2fs_swap_super(struct ext2_super_block * sb) { int i; @@ -417,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); @@ -437,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; } @@ -453,11 +456,12 @@ errcode_t ext2fs_dirent_swab_out2(ext2_filsys fs, char *buf, { errcode_t retval; char *p, *end; - unsigned int rec_len; + unsigned int rec_len, left; struct ext2_dir_entry *dirent; p = buf; end = buf + size; + left = size; while (p < end) { dirent = (struct ext2_dir_entry *) p; retval = ext2fs_get_rec_len(fs, dirent, &rec_len); @@ -472,6 +476,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); @@ -479,5 +486,3 @@ errcode_t ext2fs_dirent_swab_out2(ext2_filsys fs, char *buf, return 0; } - -#endif diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c index 74fc8a7..628e60c 100644 --- a/lib/ext2fs/unix_io.c +++ b/lib/ext2fs/unix_io.c @@ -166,7 +166,7 @@ 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; data->io_stats.bytes_read += size; location = ((ext2_loff_t) block * channel->block_size) + data->offset; @@ -275,7 +275,7 @@ 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; } data->io_stats.bytes_written += size; diff --git a/lib/support/Android.bp b/lib/support/Android.bp index 2bc07b7..14f2f23 100644 --- a/lib/support/Android.bp +++ b/lib/support/Android.bp @@ -3,6 +3,7 @@ cc_library { name: "libext2_quota", host_supported: true, + ramdisk_available: true, recovery_available: true, unique_host_soname: true, defaults: ["e2fsprogs-defaults"], diff --git a/lib/support/mkquota.c b/lib/support/mkquota.c index ddb5312..6f7ae6d 100644 --- a/lib/support/mkquota.c +++ b/lib/support/mkquota.c @@ -503,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); } diff --git a/lib/support/plausible.c b/lib/support/plausible.c index a726898..024f205 100644 --- a/lib/support/plausible.c +++ b/lib/support/plausible.c @@ -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; diff --git a/lib/uuid/Android.bp b/lib/uuid/Android.bp index ea349e3..37b4467 100644 --- a/lib/uuid/Android.bp +++ b/lib/uuid/Android.bp @@ -3,7 +3,9 @@ cc_library { name: "libext2_uuid", host_supported: true, + ramdisk_available: true, recovery_available: true, + vendor_available: true, unique_host_soname: true, defaults: ["e2fsprogs-defaults"], srcs: [ diff --git a/misc/Android.bp b/misc/Android.bp index dea2f9f..a93bea4 100644 --- a/misc/Android.bp +++ b/misc/Android.bp @@ -143,6 +143,16 @@ cc_binary { 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"], @@ -174,7 +184,7 @@ cc_binary { // Build chattr cc_binary { - name: "chattr", + name: "chattr-e2fsprogs", host_supported: true, defaults: ["e2fsprogs-defaults"], @@ -201,7 +211,7 @@ lsattr_libs = [ ] cc_binary { - name: "lsattr", + name: "lsattr-e2fsprogs", host_supported: true, defaults: ["lsattr-defaults"], @@ -288,3 +298,22 @@ cc_binary { ], 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/Makefile.in b/misc/Makefile.in index f255444..9f2a893 100644 --- a/misc/Makefile.in +++ b/misc/Makefile.in @@ -102,7 +102,8 @@ 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 @@ -388,6 +389,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) @@ -840,6 +845,19 @@ fuse2fs.o: $(srcdir)/fuse2fs.c $(top_builddir)/lib/config.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)/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/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 \ @@ -855,6 +873,7 @@ journal.o: $(srcdir)/../debugfs/journal.c $(top_builddir)/lib/config.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)/../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 \ @@ -867,6 +886,7 @@ revoke.o: $(srcdir)/../e2fsck/revoke.c $(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 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 \ diff --git a/misc/chattr.1.in b/misc/chattr.1.in index 1c9e896..ff2fcf0 100644 --- a/misc/chattr.1.in +++ b/misc/chattr.1.in @@ -23,7 +23,7 @@ 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 +-=[aAcCdDeijPsStTu]. +The format of a symbolic mode is +-=[aAcCdDeFijPsStTu]. .PP The operator '+' causes the selected attributes to be added to the existing attributes of the files; '-' causes them to be removed; and '=' @@ -52,7 +52,8 @@ The following attributes are read-only, and may be listed by but not modified by chattr: encrypted (E), indexed directory (I), -and inline data (N). +inline data (N), +and verity (V). .PP Not all flags are supported or utilized by all filesystems; refer to filesystem-specific man pages such as @@ -78,20 +79,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 @@ -100,43 +106,50 @@ 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 +.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. -.PP +.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, 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. -.PP +.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 +.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 @@ -144,36 +157,43 @@ 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. -.PP +.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 +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 @@ -183,11 +203,22 @@ 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. +.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). .PP .SH AUTHOR .B chattr diff --git a/misc/check_fuzzer.c b/misc/check_fuzzer.c new file mode 100644 index 0000000..cee21bf --- /dev/null +++ b/misc/check_fuzzer.c @@ -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 +#include +#include +#include +#include +#include +#include + +#include +#include + +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 \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; +} diff --git a/misc/create_inode.c b/misc/create_inode.c index 0091b72..e8d1df6 100644 --- a/misc/create_inode.c +++ b/misc/create_inode.c @@ -121,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; @@ -599,7 +601,7 @@ out: return err; } -static int is_hardlink(struct hdlinks_s *hdlinks, dev_t dev, ino_t ino) +static int is_hardlink(struct hdlinks_s *hdlinks, dev_t dev, ext2_ino_t ino) { int i; @@ -660,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; diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c index 384ce92..72f323e 100644 --- a/misc/dumpe2fs.c +++ b/misc/dumpe2fs.c @@ -362,7 +362,7 @@ static void print_inline_journal_information(ext2_filsys fs) 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]; if (fs->flags & EXT2_FLAG_IMAGE_FILE) @@ -439,8 +439,10 @@ static int check_mmp(ext2_filsys fs) time_t mmp_time = mmp->mmp_time; fprintf(stderr, - "%s: MMP last updated by '%s' on %s", - program_name, mmp->mmp_nodename, + "%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; @@ -489,8 +491,10 @@ static void print_mmp_block(ext2_filsys fs) 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", mmp->mmp_nodename); - printf(" mmp_device_name: %s\n", mmp->mmp_bdevname); + 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, diff --git a/misc/e2fuzz.c b/misc/e2fuzz.c index 8576d4e..7c0f776 100644 --- a/misc/e2fuzz.c +++ b/misc/e2fuzz.c @@ -181,9 +181,9 @@ 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; + loff_t hsize, count, off, offset, corrupt_bytes; unsigned char c; - off_t i; + loff_t i; /* If mounted rw, force dryrun mode */ ret = ext2fs_check_if_mounted(fsname, &flags); @@ -277,8 +277,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 diff --git a/misc/e2image.8.in b/misc/e2image.8.in index bbbb57a..ef12486 100644 --- a/misc/e2image.8.in +++ b/misc/e2image.8.in @@ -8,10 +8,12 @@ e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file .SH SYNOPSIS .B e2image [ -.B \-r|Q +.B \-r|\-Q ] [ .B \-f +] +[ .B \-b .I superblock ] @@ -19,9 +21,6 @@ e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file .B \-B .I blocksize ] -[ -.B \-fr -] .I device .I image-file .br diff --git a/misc/e2image.c b/misc/e2image.c index 3c881fe..892c537 100644 --- a/misc/e2image.c +++ b/misc/e2image.c @@ -54,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 */ @@ -104,11 +104,11 @@ static int get_bits_from_size(size_t size) static void usage(void) { - fprintf(stderr, _("Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize]" - "[ -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); @@ -312,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)), diff --git a/misc/e2label.c b/misc/e2label.c index 526a62c..910ccc7 100644 --- a/misc/e2label.c +++ b/misc/e2label.c @@ -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/filefrag.8.in b/misc/filefrag.8.in index 5292672..4b89e72 100644 --- a/misc/filefrag.8.in +++ b/misc/filefrag.8.in @@ -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 diff --git a/misc/filefrag.c b/misc/filefrag.c index 1eec146..032535f 100644 --- a/misc/filefrag.c +++ b/misc/filefrag.c @@ -53,7 +53,7 @@ extern int optind; #include 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 xattr_map = 0; /* get xattr mapping */ int force_bmap; /* force use of FIBMAP instead of FIEMAP */ @@ -73,7 +73,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; @@ -85,7 +85,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; @@ -452,17 +452,17 @@ 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); + width = ulong_log10(numblocks); if (width > logical_width) logical_width = width; if (verbose) @@ -517,7 +517,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]] [-BeksvxX] file ...\n", progname); exit(1); } @@ -535,7 +535,9 @@ 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 @@ -544,15 +546,15 @@ int main(int argc, char**argv) switch (end[0]) { case 'g': case 'G': - blocksize *= 1024; + val *= 1024; /* fall through */ case 'm': case 'M': - blocksize *= 1024; + val *= 1024; /* fall through */ case 'k': case 'K': - blocksize *= 1024; + val *= 1024; break; default: break; @@ -561,6 +563,16 @@ int main(int argc, char**argv) #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 " diff --git a/misc/findsuper.c b/misc/findsuper.c index ff20b98..765295c 100644 --- a/misc/findsuper.c +++ b/misc/findsuper.c @@ -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); diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index be2cd1d..f906ca8 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -648,8 +648,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) @@ -679,14 +679,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; @@ -754,23 +754,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; @@ -790,11 +773,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); @@ -1014,7 +998,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) { @@ -1138,7 +1124,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++; @@ -1511,7 +1499,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, @@ -1907,7 +1897,7 @@ static int op_chmod(const char *path, mode_t mode) goto out; } - if (!ff->fakeroot && ctxt->uid != 0 && ctxt->uid != inode.i_uid) { + if (!ff->fakeroot && ctxt->uid != 0 && ctxt->uid != inode_uid(inode)) { ret = -EPERM; goto out; } @@ -1917,7 +1907,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 (!ff->fakeroot && 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; @@ -1971,22 +1961,25 @@ static int op_chown(const char *path, uid_t owner, gid_t group) if (owner != (uid_t) ~0) { /* Only root gets to change UID. */ if (!ff->fakeroot && ctxt->uid != 0 && - !(inode.i_uid == ctxt->uid && owner == ctxt->uid)) { + !(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 (!ff->fakeroot && 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); @@ -2364,7 +2357,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) @@ -2914,7 +2907,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; @@ -3132,7 +3127,7 @@ static int ioctl_setflags(ext2_filsys fs, struct fuse2fs_file_handle *fh, if (err) return translate_error(fs, fh->ino, err); - if (!ff->fakeroot && 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) @@ -3189,7 +3184,7 @@ static int ioctl_setversion(ext2_filsys fs, struct fuse2fs_file_handle *fh, if (err) return translate_error(fs, fh->ino, err); - if (!ff->fakeroot && 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; diff --git a/misc/mke2fs.8.in b/misc/mke2fs.8.in index 5bcee25..e6bfc6d 100644 --- a/misc/mke2fs.8.in +++ b/misc/mke2fs.8.in @@ -484,13 +484,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) diff --git a/misc/mke2fs.c b/misc/mke2fs.c index d7cf257..27e7d17 100644 --- a/misc/mke2fs.c +++ b/misc/mke2fs.c @@ -344,7 +344,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); } @@ -655,7 +655,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; @@ -673,9 +672,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); diff --git a/misc/mke2fs.conf.in b/misc/mke2fs.conf.in index 00afd91..01e35cf 100644 --- a/misc/mke2fs.conf.in +++ b/misc/mke2fs.conf.in @@ -45,6 +45,3 @@ blocksize = 4096 inode_size = 128 } - -[options] - fname_encoding = utf8 diff --git a/misc/tune2fs.8.in b/misc/tune2fs.8.in index 74eebb6..3cf1f5e 100644 --- a/misc/tune2fs.8.in +++ b/misc/tune2fs.8.in @@ -299,7 +299,13 @@ 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 diff --git a/misc/tune2fs.c b/misc/tune2fs.c index 7d2d38d..39cf858 100644 --- a/misc/tune2fs.c +++ b/misc/tune2fs.c @@ -365,7 +365,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) { @@ -1308,6 +1308,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); + exit(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); @@ -1317,6 +1323,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); + exit(1); + } + err = disable_uninit_bg(fs, EXT4_FEATURE_RO_COMPAT_GDT_CSUM); if (err) @@ -2974,8 +2986,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; } diff --git a/misc/util.c b/misc/util.c index 7799158..dcd2f0a 100644 --- a/misc/util.c +++ b/misc/util.c @@ -288,7 +288,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)); } } diff --git a/po/e2fsprogs.pot b/po/e2fsprogs.pot index 9dcf76d..a5c9115 100644 --- a/po/e2fsprogs.pot +++ b/po/e2fsprogs.pot @@ -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, 2018, 2019 by Theodore Ts'o +# 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Theodore Ts'o # This file is distributed under the same license as the e2fsprogs package. -# Theodore Ts'o , 2019. +# Theodore Ts'o , 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, @@ -77,9 +77,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: e2fsprogs v1.45.4\n" +"Project-Id-Version: e2fsprogs v1.45.6\n" "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n" -"POT-Creation-Date: 2019-09-23 15:43-0400\n" +"POT-Creation-Date: 2020-03-20 23:47-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -105,9 +105,9 @@ msgstr "" #: 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/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:2796 misc/tune2fs.c:2895 resize/main.c:414 +#: misc/tune2fs.c:2808 misc/tune2fs.c:2907 resize/main.c:414 #, c-format msgid "while trying to open %s" msgstr "" @@ -130,7 +130,7 @@ msgstr "" msgid "Warning: illegal block %u found in bad block inode. Cleared.\n" msgstr "" -#: e2fsck/dirinfo.c:331 +#: e2fsck/dirinfo.c:332 msgid "while freeing dir_info tdb file" msgstr "" @@ -162,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 "" @@ -180,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 "" @@ -251,7 +251,7 @@ msgstr "" msgid "%s: journal too short\n" msgstr "" -#: e2fsck/journal.c:972 misc/fuse2fs.c:3792 +#: e2fsck/journal.c:972 misc/fuse2fs.c:3787 #, c-format msgid "%s: recovering journal\n" msgstr "" @@ -503,21 +503,21 @@ msgstr "" msgid "multiply claimed inode map" msgstr "" -#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826 +#: 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:952 +#: e2fsck/pass1b.c:956 msgid "returned from clone_file_block" msgstr "" -#: e2fsck/pass1b.c:976 +#: e2fsck/pass1b.c:980 #, c-format msgid "internal error: couldn't lookup EA block record for %llu" msgstr "" -#: e2fsck/pass1b.c:988 +#: e2fsck/pass1b.c:992 #, c-format msgid "internal error: couldn't lookup EA inode record for %u" msgstr "" @@ -527,89 +527,89 @@ msgstr "" msgid "while hashing entry with e_value_inum = %u" msgstr "" -#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007 +#: e2fsck/pass1.c:775 e2fsck/pass2.c:1010 msgid "reading directory block" msgstr "" -#: e2fsck/pass1.c:1225 +#: e2fsck/pass1.c:1174 +msgid "getting next inode from scan" +msgstr "" + +#: e2fsck/pass1.c:1226 msgid "in-use inode map" msgstr "" -#: e2fsck/pass1.c:1236 +#: e2fsck/pass1.c:1237 msgid "directory inode map" msgstr "" -#: e2fsck/pass1.c:1246 +#: e2fsck/pass1.c:1247 msgid "regular file inode map" msgstr "" -#: e2fsck/pass1.c:1255 misc/e2image.c:1282 +#: e2fsck/pass1.c:1256 misc/e2image.c:1282 msgid "in-use block map" msgstr "" -#: e2fsck/pass1.c:1264 +#: e2fsck/pass1.c:1265 msgid "metadata block map" msgstr "" -#: e2fsck/pass1.c:1326 +#: e2fsck/pass1.c:1327 msgid "opening inode scan" msgstr "" -#: e2fsck/pass1.c:1366 -msgid "getting next inode from scan" -msgstr "" - -#: e2fsck/pass1.c:2079 +#: e2fsck/pass1.c:2080 msgid "Pass 1" msgstr "" -#: e2fsck/pass1.c:2140 +#: e2fsck/pass1.c:2141 #, c-format msgid "reading indirect blocks of inode %u" msgstr "" -#: e2fsck/pass1.c:2191 +#: e2fsck/pass1.c:2192 msgid "bad inode map" msgstr "" -#: e2fsck/pass1.c:2231 +#: e2fsck/pass1.c:2232 msgid "inode in bad block map" msgstr "" -#: e2fsck/pass1.c:2251 +#: e2fsck/pass1.c:2252 msgid "imagic inode map" msgstr "" -#: e2fsck/pass1.c:2282 +#: e2fsck/pass1.c:2283 msgid "multiply claimed block map" msgstr "" -#: e2fsck/pass1.c:2407 +#: e2fsck/pass1.c:2408 msgid "ext attr block map" msgstr "" -#: e2fsck/pass1.c:3652 +#: e2fsck/pass1.c:3653 #, c-format msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n" msgstr "" -#: e2fsck/pass1.c:4072 +#: e2fsck/pass1.c:4073 msgid "block bitmap" msgstr "" -#: e2fsck/pass1.c:4078 +#: e2fsck/pass1.c:4079 msgid "inode bitmap" msgstr "" -#: e2fsck/pass1.c:4084 +#: e2fsck/pass1.c:4085 msgid "inode table" msgstr "" -#: e2fsck/pass2.c:307 +#: e2fsck/pass2.c:308 msgid "Pass 2" msgstr "" -#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246 +#: e2fsck/pass2.c:1083 e2fsck/pass2.c:1250 msgid "Can not continue." msgstr "" @@ -629,7 +629,7 @@ msgstr "" msgid "inode loop detection bitmap" msgstr "" -#: e2fsck/pass4.c:277 +#: e2fsck/pass4.c:289 msgid "Pass 4" msgstr "" @@ -2759,57 +2759,62 @@ msgstr "" msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n" msgstr "" -#: e2fsck/problem.c:2016 +#: e2fsck/problem.c:2014 +#. @-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:2021 #. @-expanded: Pass 5: Checking group summary information\n msgid "Pass 5: Checking @g summary information\n" msgstr "" -#: e2fsck/problem.c:2021 +#: e2fsck/problem.c:2026 #. @-expanded: Padding at end of inode bitmap is not set. msgid "Padding at end of @i @B is not set. " msgstr "" -#: e2fsck/problem.c:2026 +#: e2fsck/problem.c:2031 #. @-expanded: Padding at end of block bitmap is not set. msgid "Padding at end of @b @B is not set. " msgstr "" -#: e2fsck/problem.c:2031 +#: e2fsck/problem.c:2036 #. @-expanded: block bitmap differences: msgid "@b @B differences: " msgstr "" -#: e2fsck/problem.c:2053 +#: e2fsck/problem.c:2058 #. @-expanded: inode bitmap differences: msgid "@i @B differences: " msgstr "" -#: e2fsck/problem.c:2075 +#: e2fsck/problem.c:2080 #. @-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:2080 +#: e2fsck/problem.c:2085 #. @-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:2085 +#: e2fsck/problem.c:2090 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n msgid "Free @is count wrong (%i, counted=%j).\n" msgstr "" -#: e2fsck/problem.c:2090 +#: e2fsck/problem.c:2095 #. @-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:2095 +#: e2fsck/problem.c:2100 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n msgid "Free @bs count wrong (%b, counted=%c).\n" msgstr "" -#: e2fsck/problem.c:2100 +#: e2fsck/problem.c:2105 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap #. @-expanded: endpoints (%i, %j)\n msgid "" @@ -2817,81 +2822,81 @@ msgid "" "endpoints (%i, %j)\n" msgstr "" -#: e2fsck/problem.c:2106 +#: e2fsck/problem.c:2111 msgid "Internal error: fudging end of bitmap (%N)\n" msgstr "" -#: e2fsck/problem.c:2112 +#: e2fsck/problem.c:2117 #, 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:2118 +#: e2fsck/problem.c:2123 #, 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:2148 +#: e2fsck/problem.c:2153 #, 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:2154 +#: e2fsck/problem.c:2159 #, 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:2160 +#: e2fsck/problem.c:2165 #, 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:2166 +#: e2fsck/problem.c:2171 #, 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:2173 +#: e2fsck/problem.c:2178 #. @-expanded: Recreate journal msgid "Recreate @j" msgstr "" -#: e2fsck/problem.c:2178 +#: e2fsck/problem.c:2183 msgid "Update quota info for quota type %N" msgstr "" -#: e2fsck/problem.c:2184 +#: e2fsck/problem.c:2189 #, 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:2190 +#: e2fsck/problem.c:2195 #, no-c-format msgid "Error writing file system info: %m\n" msgstr "" -#: e2fsck/problem.c:2196 +#: e2fsck/problem.c:2201 #, no-c-format msgid "Error flushing writes to storage device: %m\n" msgstr "" -#: e2fsck/problem.c:2201 +#: e2fsck/problem.c:2206 msgid "Error writing quota info for quota type %N: %m\n" msgstr "" -#: e2fsck/problem.c:2364 +#: e2fsck/problem.c:2369 #, c-format msgid "Unhandled error code (0x%x)!\n" msgstr "" -#: e2fsck/problem.c:2494 e2fsck/problem.c:2498 +#: e2fsck/problem.c:2499 e2fsck/problem.c:2503 msgid "IGNORED" msgstr "" @@ -2901,7 +2906,7 @@ 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 @@ -3100,7 +3105,7 @@ msgid_plural "%12u files\n" msgstr[0] "" msgstr[1] "" -#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129 +#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2997 misc/util.c:129 #: resize/main.c:354 #, c-format msgid "while determining whether %s is mounted." @@ -3261,7 +3266,7 @@ msgid "The -t option is not supported on this version of e2fsck.\n" msgstr "" #: 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 +#: misc/tune2fs.c:1707 misc/tune2fs.c:2002 misc/tune2fs.c:2020 #, c-format msgid "Unable to resolve '%s'" msgstr "" @@ -3328,8 +3333,8 @@ msgid "while reading MMP block" msgstr "" #: 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 +#: misc/mke2fs.c:2694 misc/mke2fs.c:2745 misc/tune2fs.c:2725 +#: misc/tune2fs.c:2770 resize/main.c:188 resize/main.c:233 #, c-format msgid "" "Overwriting existing filesystem; this can be undone using the command:\n" @@ -3337,13 +3342,13 @@ msgid "" "\n" msgstr "" -#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747 +#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2734 misc/tune2fs.c:2759 #: resize/main.c:222 #, c-format msgid "while trying to delete %s" msgstr "" -#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243 +#: e2fsck/unix.c:1369 misc/mke2fs.c:2760 resize/main.c:243 msgid "while trying to setup undo file\n" msgstr "" @@ -3430,117 +3435,117 @@ msgstr "" msgid "Get a newer version of e2fsck!" msgstr "" -#: e2fsck/unix.c:1749 +#: e2fsck/unix.c:1748 #, c-format msgid "while checking journal for %s" msgstr "" -#: e2fsck/unix.c:1752 +#: e2fsck/unix.c:1751 msgid "Cannot proceed with file system check" msgstr "" -#: e2fsck/unix.c:1763 +#: e2fsck/unix.c:1762 msgid "" "Warning: skipping journal recovery because doing a read-only filesystem " "check.\n" msgstr "" -#: e2fsck/unix.c:1775 +#: e2fsck/unix.c:1774 #, c-format msgid "unable to set superblock flags on %s\n" msgstr "" -#: e2fsck/unix.c:1781 +#: e2fsck/unix.c:1780 #, c-format msgid "Journal checksum error found in %s\n" msgstr "" -#: e2fsck/unix.c:1785 +#: e2fsck/unix.c:1784 #, c-format msgid "Journal corrupted in %s\n" msgstr "" -#: e2fsck/unix.c:1789 +#: e2fsck/unix.c:1788 #, c-format msgid "while recovering journal of %s" msgstr "" -#: e2fsck/unix.c:1811 +#: e2fsck/unix.c:1810 #, c-format msgid "%s has unsupported feature(s):" msgstr "" -#: e2fsck/unix.c:1826 +#: e2fsck/unix.c:1825 #, c-format msgid "%s has unsupported encoding: %0x\n" msgstr "" -#: e2fsck/unix.c:1876 +#: e2fsck/unix.c:1875 #, c-format msgid "%s: %s while reading bad blocks inode\n" msgstr "" -#: e2fsck/unix.c:1879 +#: e2fsck/unix.c:1878 msgid "This doesn't bode well, but we'll try to go on...\n" msgstr "" -#: e2fsck/unix.c:1919 +#: e2fsck/unix.c:1918 #, c-format msgid "Creating journal (%d blocks): " msgstr "" -#: e2fsck/unix.c:1929 +#: e2fsck/unix.c:1928 msgid " Done.\n" msgstr "" -#: e2fsck/unix.c:1931 +#: e2fsck/unix.c:1930 msgid "" "\n" "*** journal has been regenerated ***\n" msgstr "" -#: e2fsck/unix.c:1937 +#: e2fsck/unix.c:1936 msgid "aborted" msgstr "" -#: e2fsck/unix.c:1939 +#: e2fsck/unix.c:1938 #, c-format msgid "%s: e2fsck canceled.\n" msgstr "" -#: e2fsck/unix.c:1966 +#: e2fsck/unix.c:1965 msgid "Restarting e2fsck from the beginning...\n" msgstr "" -#: e2fsck/unix.c:1970 +#: e2fsck/unix.c:1969 msgid "while resetting context" msgstr "" -#: e2fsck/unix.c:2029 +#: e2fsck/unix.c:2028 #, c-format msgid "" "\n" "%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n" msgstr "" -#: e2fsck/unix.c:2031 +#: e2fsck/unix.c:2030 #, c-format msgid "%s: File system was modified.\n" msgstr "" -#: e2fsck/unix.c:2035 e2fsck/util.c:71 +#: e2fsck/unix.c:2034 e2fsck/util.c:71 #, c-format msgid "" "\n" "%s: ***** FILE SYSTEM WAS MODIFIED *****\n" msgstr "" -#: e2fsck/unix.c:2040 +#: e2fsck/unix.c:2039 #, c-format msgid "%s: ***** REBOOT SYSTEM *****\n" msgstr "" -#: e2fsck/unix.c:2050 e2fsck/util.c:77 +#: e2fsck/unix.c:2049 e2fsck/util.c:77 #, c-format msgid "" "\n" @@ -3548,96 +3553,96 @@ msgid "" "\n" msgstr "" -#: e2fsck/util.c:196 misc/util.c:93 +#: e2fsck/util.c:195 misc/util.c:93 msgid "yY" msgstr "" -#: e2fsck/util.c:197 misc/util.c:112 +#: e2fsck/util.c:196 misc/util.c:112 msgid "nN" msgstr "" -#: e2fsck/util.c:198 +#: e2fsck/util.c:197 msgid "aA" msgstr "" -#: e2fsck/util.c:202 +#: e2fsck/util.c:201 msgid " ('a' enables 'yes' to all) " msgstr "" -#: e2fsck/util.c:219 +#: e2fsck/util.c:218 msgid "" msgstr "" -#: e2fsck/util.c:221 +#: e2fsck/util.c:220 msgid "" msgstr "" -#: e2fsck/util.c:223 +#: e2fsck/util.c:222 msgid " (y/n)" msgstr "" -#: e2fsck/util.c:246 +#: e2fsck/util.c:245 msgid "cancelled!\n" msgstr "" -#: e2fsck/util.c:279 +#: e2fsck/util.c:278 msgid "yes to all\n" msgstr "" -#: e2fsck/util.c:281 +#: e2fsck/util.c:280 msgid "yes\n" msgstr "" -#: e2fsck/util.c:283 +#: e2fsck/util.c:282 msgid "no\n" msgstr "" -#: e2fsck/util.c:293 +#: e2fsck/util.c:292 #, c-format msgid "" "%s? no\n" "\n" msgstr "" -#: e2fsck/util.c:297 +#: e2fsck/util.c:296 #, c-format msgid "" "%s? yes\n" "\n" msgstr "" -#: e2fsck/util.c:301 +#: e2fsck/util.c:300 msgid "yes" msgstr "" -#: e2fsck/util.c:301 +#: e2fsck/util.c:300 msgid "no" msgstr "" -#: e2fsck/util.c:317 +#: e2fsck/util.c:316 #, c-format msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s" msgstr "" -#: e2fsck/util.c:322 +#: e2fsck/util.c:321 msgid "reading inode and block bitmaps" msgstr "" -#: e2fsck/util.c:334 +#: e2fsck/util.c:333 #, c-format msgid "while retrying to read bitmaps for %s" msgstr "" -#: e2fsck/util.c:346 +#: e2fsck/util.c:345 msgid "writing block and inode bitmaps" msgstr "" -#: e2fsck/util.c:351 +#: e2fsck/util.c:350 #, c-format msgid "while rewriting block and inode bitmaps for %s" msgstr "" -#: e2fsck/util.c:363 +#: e2fsck/util.c:362 #, c-format msgid "" "\n" @@ -3646,37 +3651,37 @@ msgid "" "\t(i.e., without -a or -p options)\n" msgstr "" -#: e2fsck/util.c:444 +#: e2fsck/util.c:442 #, c-format -msgid "Memory used: %luk/%luk (%luk/%luk), " +msgid "Memory used: %lluk/%lluk (%lluk/%lluk), " msgstr "" #: e2fsck/util.c:448 #, c-format -msgid "Memory used: %lu, " +msgid "Memory used: %lluk, " msgstr "" -#: e2fsck/util.c:455 +#: e2fsck/util.c:454 #, c-format msgid "time: %5.2f/%5.2f/%5.2f\n" msgstr "" -#: e2fsck/util.c:460 +#: e2fsck/util.c:459 #, c-format msgid "elapsed time: %6.3f\n" msgstr "" -#: e2fsck/util.c:495 e2fsck/util.c:509 +#: e2fsck/util.c:494 e2fsck/util.c:508 #, c-format msgid "while reading inode %lu in %s" msgstr "" -#: e2fsck/util.c:523 e2fsck/util.c:536 +#: e2fsck/util.c:522 e2fsck/util.c:535 #, c-format msgid "while writing inode %lu in %s" msgstr "" -#: e2fsck/util.c:792 +#: e2fsck/util.c:793 msgid "" "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is " "running.\n" @@ -3949,8 +3954,8 @@ msgstr "" msgid "while reading inode %u" msgstr "" -#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353 -#: misc/create_inode.c:391 +#: 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 "" @@ -3959,140 +3964,140 @@ msgstr "" msgid "while linking \"%s\"" msgstr "" -#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322 +#: 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:152 misc/create_inode.c:176 +#: misc/create_inode.c:154 misc/create_inode.c:178 #, c-format msgid "while listing attributes of \"%s\"" msgstr "" -#: misc/create_inode.c:163 +#: misc/create_inode.c:165 #, c-format msgid "while opening inode %u" msgstr "" -#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043 +#: 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:189 misc/create_inode.c:205 +#: misc/create_inode.c:191 misc/create_inode.c:207 #, c-format msgid "while reading attribute \"%s\" of \"%s\"" msgstr "" -#: misc/create_inode.c:214 +#: misc/create_inode.c:216 #, c-format msgid "while writing attribute \"%s\" to inode %u" msgstr "" -#: misc/create_inode.c:224 +#: misc/create_inode.c:226 #, c-format msgid "while closing inode %u" msgstr "" -#: misc/create_inode.c:275 +#: misc/create_inode.c:277 #, c-format msgid "while allocating inode \"%s\"" msgstr "" -#: misc/create_inode.c:294 +#: misc/create_inode.c:296 #, c-format msgid "while creating inode \"%s\"" msgstr "" -#: misc/create_inode.c:360 +#: misc/create_inode.c:362 #, c-format msgid "while creating symlink \"%s\"" msgstr "" -#: misc/create_inode.c:378 misc/create_inode.c:963 +#: misc/create_inode.c:380 misc/create_inode.c:965 #, c-format msgid "while looking up \"%s\"" msgstr "" -#: misc/create_inode.c:398 +#: misc/create_inode.c:400 #, c-format msgid "while creating directory \"%s\"" msgstr "" -#: misc/create_inode.c:627 +#: misc/create_inode.c:629 #, c-format msgid "while opening \"%s\" to copy" msgstr "" -#: misc/create_inode.c:805 +#: misc/create_inode.c:807 #, c-format msgid "while changing working directory to \"%s\"" msgstr "" -#: misc/create_inode.c:815 +#: misc/create_inode.c:817 #, c-format msgid "while scanning directory \"%s\"" msgstr "" -#: misc/create_inode.c:825 +#: misc/create_inode.c:827 #, c-format msgid "while lstat \"%s\"" msgstr "" -#: misc/create_inode.c:875 +#: misc/create_inode.c:877 #, c-format msgid "while creating special file \"%s\"" msgstr "" -#: misc/create_inode.c:884 +#: misc/create_inode.c:886 msgid "malloc failed" msgstr "" -#: misc/create_inode.c:892 +#: misc/create_inode.c:894 #, c-format msgid "while trying to read link \"%s\"" msgstr "" -#: misc/create_inode.c:899 +#: misc/create_inode.c:901 msgid "symlink increased in size between lstat() and readlink()" msgstr "" -#: misc/create_inode.c:910 +#: misc/create_inode.c:912 #, c-format msgid "while writing symlink\"%s\"" msgstr "" -#: misc/create_inode.c:921 +#: misc/create_inode.c:923 #, c-format msgid "while writing file \"%s\"" msgstr "" -#: misc/create_inode.c:934 +#: misc/create_inode.c:936 #, c-format msgid "while making dir \"%s\"" msgstr "" -#: misc/create_inode.c:952 +#: misc/create_inode.c:954 msgid "while changing directory" msgstr "" -#: misc/create_inode.c:958 +#: misc/create_inode.c:960 #, c-format msgid "ignoring entry \"%s\"" msgstr "" -#: misc/create_inode.c:971 +#: misc/create_inode.c:973 #, c-format msgid "while setting inode for \"%s\"" msgstr "" -#: misc/create_inode.c:978 +#: misc/create_inode.c:980 #, c-format msgid "while setting xattrs for \"%s\"" msgstr "" -#: misc/create_inode.c:1004 +#: misc/create_inode.c:1006 msgid "while saving inode data" msgstr "" @@ -4234,30 +4239,30 @@ msgstr "" msgid "Couldn't find journal superblock magic numbers" msgstr "" -#: misc/dumpe2fs.c:468 +#: misc/dumpe2fs.c:470 msgid "failed to alloc MMP buffer\n" msgstr "" -#: misc/dumpe2fs.c:479 +#: misc/dumpe2fs.c:481 #, c-format msgid "reading MMP block %llu from '%s'\n" msgstr "" -#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027 +#: misc/dumpe2fs.c:511 misc/mke2fs.c:798 misc/tune2fs.c:2039 msgid "Couldn't allocate memory to parse options!\n" msgstr "" -#: misc/dumpe2fs.c:533 +#: misc/dumpe2fs.c:537 #, c-format msgid "Invalid superblock parameter: %s\n" msgstr "" -#: misc/dumpe2fs.c:548 +#: misc/dumpe2fs.c:552 #, c-format msgid "Invalid blocksize parameter: %s\n" msgstr "" -#: misc/dumpe2fs.c:559 +#: misc/dumpe2fs.c:563 #, c-format msgid "" "\n" @@ -4271,27 +4276,27 @@ msgid "" "\tblocksize=\n" msgstr "" -#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889 +#: misc/dumpe2fs.c:653 misc/mke2fs.c:1887 #, c-format msgid "\tUsing %s\n" msgstr "" -#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913 +#: misc/dumpe2fs.c:698 misc/e2image.c:1629 misc/tune2fs.c:2925 #: resize/main.c:416 msgid "Couldn't find valid filesystem superblock.\n" msgstr "" -#: misc/dumpe2fs.c:716 +#: misc/dumpe2fs.c:720 #, c-format msgid "%s: MMP feature not enabled.\n" msgstr "" -#: misc/dumpe2fs.c:747 +#: misc/dumpe2fs.c:751 #, c-format msgid "while trying to read '%s' bitmaps\n" msgstr "" -#: misc/dumpe2fs.c:756 +#: misc/dumpe2fs.c:760 msgid "" "*** Run e2fsck now!\n" "\n" @@ -4300,8 +4305,8 @@ msgstr "" #: misc/e2image.c:107 #, c-format msgid "" -"Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device " -"image-file\n" +"Usage: %s [ -r|-Q ] [ -f ] [ -b superblock ] [ -B blocksize ] device image-" +"file\n" msgstr "" #: misc/e2image.c:110 @@ -4312,7 +4317,7 @@ msgstr "" #: 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 "" @@ -4571,7 +4576,7 @@ msgstr "" msgid "e2label: not an ext2 filesystem\n" msgstr "" -#: misc/e2label.c:97 misc/tune2fs.c:3117 +#: misc/e2label.c:97 misc/tune2fs.c:3128 #, c-format msgid "Warning: label too long, truncating.\n" msgstr "" @@ -4586,7 +4591,7 @@ msgstr "" msgid "e2label: error writing superblock\n" msgstr "" -#: misc/e2label.c:117 misc/tune2fs.c:1687 +#: misc/e2label.c:117 misc/tune2fs.c:1699 #, c-format msgid "Usage: e2label device [newlabel]\n" msgstr "" @@ -4791,7 +4796,7 @@ msgid "" "mount_time sb_uuid label\n" msgstr "" -#: misc/findsuper.c:264 +#: misc/findsuper.c:265 #, c-format msgid "" "\n" @@ -4892,51 +4897,51 @@ msgstr "" 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:3795 +#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3790 #, c-format msgid "%s: %s.\n" msgstr "" -#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013 +#: misc/fuse2fs.c:3777 misc/fuse2fs.c:3792 misc/tune2fs.c:3024 #, c-format msgid "Please run e2fsck -fy %s.\n" msgstr "" -#: misc/fuse2fs.c:3804 +#: misc/fuse2fs.c:3799 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n" msgstr "" -#: misc/fuse2fs.c:3812 +#: misc/fuse2fs.c:3807 #, c-format msgid "%s: Writing to the journal is not supported.\n" msgstr "" -#: misc/fuse2fs.c:3827 +#: misc/fuse2fs.c:3822 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n" msgstr "" -#: misc/fuse2fs.c:3831 +#: misc/fuse2fs.c:3826 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n" msgstr "" -#: misc/fuse2fs.c:3836 +#: misc/fuse2fs.c:3831 msgid "Warning: Check time reached; running e2fsck is recommended.\n" msgstr "" -#: misc/fuse2fs.c:3840 +#: misc/fuse2fs.c:3835 msgid "Orphans detected; running e2fsck is recommended.\n" msgstr "" -#: misc/fuse2fs.c:3844 +#: misc/fuse2fs.c:3839 msgid "Errors detected; running e2fsck is required.\n" msgstr "" @@ -5029,7 +5034,7 @@ msgid "" "Could not write %d blocks in inode table starting at %llu: %s\n" msgstr "" -#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214 +#: misc/mke2fs.c:456 misc/mke2fs.c:2807 misc/mke2fs.c:3212 msgid "done \n" msgstr "" @@ -5093,176 +5098,176 @@ msgstr "" msgid "while writing journal superblock" msgstr "" -#: misc/mke2fs.c:665 +#: misc/mke2fs.c:664 #, c-format msgid "Creating filesystem with %llu %dk blocks and %u inodes\n" msgstr "" -#: misc/mke2fs.c:673 +#: misc/mke2fs.c:672 #, c-format msgid "" "warning: %llu blocks unused.\n" "\n" msgstr "" -#: misc/mke2fs.c:678 +#: misc/mke2fs.c:675 #, c-format -msgid "Filesystem label=%s\n" +msgid "Filesystem label=%.*s\n" msgstr "" -#: misc/mke2fs.c:681 +#: misc/mke2fs.c:679 #, c-format msgid "OS type: %s\n" msgstr "" -#: misc/mke2fs.c:683 +#: misc/mke2fs.c:681 #, c-format msgid "Block size=%u (log=%u)\n" msgstr "" -#: misc/mke2fs.c:686 +#: misc/mke2fs.c:684 #, c-format msgid "Cluster size=%u (log=%u)\n" msgstr "" -#: misc/mke2fs.c:690 +#: misc/mke2fs.c:688 #, c-format msgid "Fragment size=%u (log=%u)\n" msgstr "" -#: misc/mke2fs.c:692 +#: misc/mke2fs.c:690 #, c-format msgid "Stride=%u blocks, Stripe width=%u blocks\n" msgstr "" -#: misc/mke2fs.c:694 +#: misc/mke2fs.c:692 #, c-format msgid "%u inodes, %llu blocks\n" msgstr "" -#: misc/mke2fs.c:696 +#: misc/mke2fs.c:694 #, c-format msgid "%llu blocks (%2.2f%%) reserved for the super user\n" msgstr "" -#: misc/mke2fs.c:699 +#: misc/mke2fs.c:697 #, c-format msgid "First data block=%u\n" msgstr "" -#: misc/mke2fs.c:701 +#: misc/mke2fs.c:699 #, c-format msgid "Root directory owner=%u:%u\n" msgstr "" -#: misc/mke2fs.c:703 +#: misc/mke2fs.c:701 #, c-format msgid "Maximum filesystem blocks=%lu\n" msgstr "" -#: misc/mke2fs.c:707 +#: misc/mke2fs.c:705 #, c-format msgid "%u block groups\n" msgstr "" -#: misc/mke2fs.c:709 +#: misc/mke2fs.c:707 #, c-format msgid "%u block group\n" msgstr "" -#: misc/mke2fs.c:711 +#: misc/mke2fs.c:709 #, c-format msgid "%u blocks per group, %u clusters per group\n" msgstr "" -#: misc/mke2fs.c:714 +#: misc/mke2fs.c:712 #, c-format msgid "%u blocks per group, %u fragments per group\n" msgstr "" -#: misc/mke2fs.c:716 +#: misc/mke2fs.c:714 #, c-format msgid "%u inodes per group\n" msgstr "" -#: misc/mke2fs.c:725 +#: misc/mke2fs.c:723 #, c-format msgid "Filesystem UUID: %s\n" msgstr "" -#: misc/mke2fs.c:726 +#: misc/mke2fs.c:724 msgid "Superblock backups stored on blocks: " msgstr "" -#: misc/mke2fs.c:822 +#: misc/mke2fs.c:820 #, c-format msgid "%s requires '-O 64bit'\n" msgstr "" -#: misc/mke2fs.c:828 +#: misc/mke2fs.c:826 #, c-format msgid "'%s' must be before 'resize=%u'\n" msgstr "" -#: misc/mke2fs.c:841 +#: misc/mke2fs.c:839 #, c-format msgid "Invalid desc_size: '%s'\n" msgstr "" -#: misc/mke2fs.c:855 +#: misc/mke2fs.c:853 #, c-format msgid "Invalid hash seed: %s\n" msgstr "" -#: misc/mke2fs.c:867 +#: misc/mke2fs.c:865 #, c-format msgid "Invalid offset: %s\n" msgstr "" -#: misc/mke2fs.c:881 misc/tune2fs.c:2055 +#: misc/mke2fs.c:879 misc/tune2fs.c:2067 #, c-format msgid "Invalid mmp_update_interval: %s\n" msgstr "" -#: misc/mke2fs.c:898 +#: misc/mke2fs.c:896 #, c-format msgid "Invalid # of backup superblocks: %s\n" msgstr "" -#: misc/mke2fs.c:920 +#: misc/mke2fs.c:918 #, c-format msgid "Invalid stride parameter: %s\n" msgstr "" -#: misc/mke2fs.c:935 +#: misc/mke2fs.c:933 #, c-format msgid "Invalid stripe-width parameter: %s\n" msgstr "" -#: misc/mke2fs.c:958 +#: misc/mke2fs.c:956 #, c-format msgid "Invalid resize parameter: %s\n" msgstr "" -#: misc/mke2fs.c:965 +#: misc/mke2fs.c:963 msgid "The resize maximum must be greater than the filesystem size.\n" msgstr "" -#: misc/mke2fs.c:989 +#: misc/mke2fs.c:987 msgid "On-line resizing not supported with revision 0 filesystems\n" msgstr "" -#: misc/mke2fs.c:1015 misc/mke2fs.c:1024 +#: misc/mke2fs.c:1013 misc/mke2fs.c:1022 #, c-format msgid "Invalid root_owner: '%s'\n" msgstr "" -#: misc/mke2fs.c:1069 +#: misc/mke2fs.c:1067 #, c-format msgid "Invalid encoding: %s" msgstr "" -#: misc/mke2fs.c:1087 +#: misc/mke2fs.c:1085 #, c-format msgid "" "\n" @@ -5291,7 +5296,7 @@ msgid "" "\n" msgstr "" -#: misc/mke2fs.c:1114 +#: misc/mke2fs.c:1112 #, c-format msgid "" "\n" @@ -5299,52 +5304,52 @@ msgid "" "\n" msgstr "" -#: misc/mke2fs.c:1125 +#: misc/mke2fs.c:1123 #, c-format msgid "error: Invalid encoding flag: %s\n" msgstr "" -#: misc/mke2fs.c:1131 +#: misc/mke2fs.c:1129 #, c-format msgid "" "error: An encoding must be explicitly specified when passing encoding-flags\n" msgstr "" -#: misc/mke2fs.c:1179 +#: misc/mke2fs.c:1177 #, c-format msgid "" "Syntax error in mke2fs config file (%s, line #%d)\n" "\t%s\n" msgstr "" -#: misc/mke2fs.c:1192 misc/tune2fs.c:1068 +#: misc/mke2fs.c:1190 misc/tune2fs.c:1068 #, c-format msgid "Invalid filesystem option set: %s\n" msgstr "" -#: misc/mke2fs.c:1204 misc/tune2fs.c:417 +#: misc/mke2fs.c:1202 misc/tune2fs.c:417 #, c-format msgid "Invalid mount option set: %s\n" msgstr "" -#: misc/mke2fs.c:1340 +#: misc/mke2fs.c:1338 #, c-format msgid "" "\n" "Your mke2fs.conf file does not define the %s filesystem type.\n" msgstr "" -#: misc/mke2fs.c:1344 +#: misc/mke2fs.c:1342 msgid "" "You probably need to install an updated mke2fs.conf file.\n" "\n" msgstr "" -#: misc/mke2fs.c:1348 +#: misc/mke2fs.c:1346 msgid "Aborting...\n" msgstr "" -#: misc/mke2fs.c:1389 +#: misc/mke2fs.c:1387 #, c-format msgid "" "\n" @@ -5352,154 +5357,154 @@ msgid "" "\n" msgstr "" -#: misc/mke2fs.c:1571 +#: misc/mke2fs.c:1569 msgid "Couldn't allocate memory for new PATH.\n" msgstr "" -#: misc/mke2fs.c:1608 +#: misc/mke2fs.c:1606 #, c-format msgid "Couldn't init profile successfully (error: %ld).\n" msgstr "" -#: misc/mke2fs.c:1641 +#: misc/mke2fs.c:1639 #, c-format msgid "invalid block size - %s" msgstr "" -#: misc/mke2fs.c:1645 +#: misc/mke2fs.c:1643 #, c-format msgid "Warning: blocksize %d not usable on most systems.\n" msgstr "" -#: misc/mke2fs.c:1661 +#: misc/mke2fs.c:1659 #, c-format msgid "invalid cluster size - %s" msgstr "" -#: misc/mke2fs.c:1674 +#: misc/mke2fs.c:1672 msgid "'-R' is deprecated, use '-E' instead" msgstr "" -#: misc/mke2fs.c:1688 misc/tune2fs.c:1784 +#: misc/mke2fs.c:1686 misc/tune2fs.c:1796 #, c-format msgid "bad error behavior - %s" msgstr "" -#: misc/mke2fs.c:1700 +#: misc/mke2fs.c:1698 msgid "Illegal number for blocks per group" msgstr "" -#: misc/mke2fs.c:1705 +#: misc/mke2fs.c:1703 msgid "blocks per group must be multiple of 8" msgstr "" -#: misc/mke2fs.c:1713 +#: misc/mke2fs.c:1711 msgid "Illegal number for flex_bg size" msgstr "" -#: misc/mke2fs.c:1719 +#: misc/mke2fs.c:1717 msgid "flex_bg size must be a power of 2" msgstr "" -#: misc/mke2fs.c:1724 +#: misc/mke2fs.c:1722 #, c-format msgid "flex_bg size (%lu) must be less than or equal to 2^31" msgstr "" -#: misc/mke2fs.c:1734 +#: misc/mke2fs.c:1732 #, c-format msgid "invalid inode ratio %s (min %d/max %d)" msgstr "" -#: misc/mke2fs.c:1744 +#: misc/mke2fs.c:1742 #, c-format msgid "invalid inode size - %s" msgstr "" -#: misc/mke2fs.c:1757 +#: misc/mke2fs.c:1755 msgid "" "Warning: -K option is deprecated and should not be used anymore. Use '-E " "nodiscard' extended option instead!\n" msgstr "" -#: misc/mke2fs.c:1768 +#: misc/mke2fs.c:1766 msgid "in malloc for bad_blocks_filename" msgstr "" -#: misc/mke2fs.c:1777 +#: misc/mke2fs.c:1775 #, c-format msgid "" "Warning: label too long; will be truncated to '%s'\n" "\n" msgstr "" -#: misc/mke2fs.c:1786 +#: misc/mke2fs.c:1784 #, c-format msgid "invalid reserved blocks percent - %s" msgstr "" -#: misc/mke2fs.c:1801 +#: misc/mke2fs.c:1799 #, c-format msgid "bad num inodes - %s" msgstr "" -#: misc/mke2fs.c:1814 +#: misc/mke2fs.c:1812 msgid "while allocating fs_feature string" msgstr "" -#: misc/mke2fs.c:1831 +#: misc/mke2fs.c:1829 #, c-format msgid "bad revision level - %s" msgstr "" -#: misc/mke2fs.c:1836 +#: misc/mke2fs.c:1834 #, c-format msgid "while trying to create revision %d" msgstr "" -#: misc/mke2fs.c:1850 +#: misc/mke2fs.c:1848 msgid "The -t option may only be used once" msgstr "" -#: misc/mke2fs.c:1858 +#: misc/mke2fs.c:1856 msgid "The -T option may only be used once" msgstr "" -#: misc/mke2fs.c:1914 misc/mke2fs.c:3298 +#: misc/mke2fs.c:1912 misc/mke2fs.c:3296 #, c-format msgid "while trying to open journal device %s\n" msgstr "" -#: misc/mke2fs.c:1920 +#: misc/mke2fs.c:1918 #, c-format msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n" msgstr "" -#: misc/mke2fs.c:1926 +#: misc/mke2fs.c:1924 #, c-format msgid "Using journal device's blocksize: %d\n" msgstr "" -#: misc/mke2fs.c:1937 +#: misc/mke2fs.c:1935 #, c-format msgid "invalid blocks '%s' on device '%s'" msgstr "" -#: misc/mke2fs.c:1967 +#: misc/mke2fs.c:1965 msgid "filesystem" msgstr "" -#: misc/mke2fs.c:1985 resize/main.c:497 +#: misc/mke2fs.c:1983 resize/main.c:497 msgid "while trying to determine filesystem size" msgstr "" -#: misc/mke2fs.c:1991 +#: misc/mke2fs.c:1989 msgid "" "Couldn't determine device size; you must specify\n" "the size of the filesystem\n" msgstr "" -#: misc/mke2fs.c:1998 +#: misc/mke2fs.c:1996 msgid "" "Device size reported to be zero. Invalid partition specified, or\n" "\tpartition table wasn't reread after running fdisk, due to\n" @@ -5507,142 +5512,142 @@ msgid "" "\tto re-read your partition table.\n" msgstr "" -#: misc/mke2fs.c:2015 +#: misc/mke2fs.c:2013 msgid "Filesystem larger than apparent device size." msgstr "" -#: misc/mke2fs.c:2035 +#: misc/mke2fs.c:2033 msgid "Failed to parse fs types list\n" msgstr "" -#: misc/mke2fs.c:2085 +#: misc/mke2fs.c:2083 msgid "The HURD does not support the filetype feature.\n" msgstr "" -#: misc/mke2fs.c:2090 +#: misc/mke2fs.c:2088 msgid "The HURD does not support the huge_file feature.\n" msgstr "" -#: misc/mke2fs.c:2095 +#: misc/mke2fs.c:2093 msgid "The HURD does not support the metadata_csum feature.\n" msgstr "" -#: misc/mke2fs.c:2100 +#: misc/mke2fs.c:2098 msgid "The HURD does not support the ea_inode feature.\n" msgstr "" -#: misc/mke2fs.c:2110 +#: misc/mke2fs.c:2108 msgid "while trying to determine hardware sector size" msgstr "" -#: misc/mke2fs.c:2116 +#: misc/mke2fs.c:2114 msgid "while trying to determine physical sector size" msgstr "" -#: misc/mke2fs.c:2148 +#: misc/mke2fs.c:2146 msgid "while setting blocksize; too small for device\n" msgstr "" -#: misc/mke2fs.c:2153 +#: misc/mke2fs.c:2151 #, c-format msgid "" "Warning: specified blocksize %d is less than device physical sectorsize %d\n" msgstr "" -#: misc/mke2fs.c:2177 +#: misc/mke2fs.c:2175 #, 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:2191 +#: misc/mke2fs.c:2189 #, 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:2213 +#: misc/mke2fs.c:2211 msgid "fs_types for mke2fs.conf resolution: " msgstr "" -#: misc/mke2fs.c:2220 +#: misc/mke2fs.c:2218 msgid "Filesystem features not supported with revision 0 filesystems\n" msgstr "" -#: misc/mke2fs.c:2228 +#: misc/mke2fs.c:2226 msgid "Sparse superblocks not supported with revision 0 filesystems\n" msgstr "" -#: misc/mke2fs.c:2238 +#: misc/mke2fs.c:2236 msgid "Journals not supported with revision 0 filesystems\n" msgstr "" -#: misc/mke2fs.c:2251 +#: misc/mke2fs.c:2249 #, c-format msgid "invalid reserved blocks percent - %lf" msgstr "" -#: misc/mke2fs.c:2268 +#: misc/mke2fs.c:2266 msgid "" "Extents MUST be enabled for a 64-bit filesystem. Pass -O extents to " "rectify.\n" msgstr "" -#: misc/mke2fs.c:2288 +#: misc/mke2fs.c:2286 msgid "The cluster size may not be smaller than the block size.\n" msgstr "" -#: misc/mke2fs.c:2294 +#: misc/mke2fs.c:2292 msgid "specifying a cluster size requires the bigalloc feature" msgstr "" -#: misc/mke2fs.c:2314 +#: misc/mke2fs.c:2312 #, c-format msgid "warning: Unable to get device geometry for %s\n" msgstr "" -#: misc/mke2fs.c:2317 +#: misc/mke2fs.c:2315 #, c-format msgid "%s alignment is offset by %lu bytes.\n" msgstr "" -#: misc/mke2fs.c:2319 +#: misc/mke2fs.c:2317 #, c-format msgid "" "This may result in very poor performance, (re)-partitioning suggested.\n" msgstr "" -#: misc/mke2fs.c:2340 +#: misc/mke2fs.c:2338 #, c-format msgid "%d-byte blocks too big for system (max %d)" msgstr "" -#: misc/mke2fs.c:2344 +#: misc/mke2fs.c:2342 #, c-format msgid "" "Warning: %d-byte blocks too big for system (max %d), forced to continue\n" msgstr "" -#: misc/mke2fs.c:2352 +#: misc/mke2fs.c:2350 #, c-format msgid "" "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata " "and journal checksum features.\n" msgstr "" -#: misc/mke2fs.c:2398 +#: misc/mke2fs.c:2396 #, c-format msgid "Unknown filename encoding from profile: %s" msgstr "" -#: misc/mke2fs.c:2409 +#: misc/mke2fs.c:2407 #, c-format msgid "Unknown encoding flags from profile: %s" msgstr "" -#: misc/mke2fs.c:2434 +#: misc/mke2fs.c:2432 #, c-format msgid "" "\n" @@ -5652,28 +5657,28 @@ msgid "" "\n" msgstr "" -#: misc/mke2fs.c:2449 +#: misc/mke2fs.c:2447 #, c-format msgid "%d byte inodes are too small for project quota" msgstr "" -#: misc/mke2fs.c:2465 +#: misc/mke2fs.c:2463 msgid "" "The encrypt and casefold features are not compatible.\n" "They can not be both enabled simultaneously.\n" msgstr "" -#: misc/mke2fs.c:2480 +#: misc/mke2fs.c:2478 msgid "Can't support bigalloc feature without extents feature" msgstr "" -#: misc/mke2fs.c:2487 +#: misc/mke2fs.c:2485 msgid "" "The resize_inode and meta_bg features are not compatible.\n" "They can not be both enabled simultaneously.\n" msgstr "" -#: misc/mke2fs.c:2495 +#: misc/mke2fs.c:2493 msgid "" "\n" "Warning: the bigalloc feature is still under development\n" @@ -5681,39 +5686,39 @@ msgid "" "\n" msgstr "" -#: misc/mke2fs.c:2507 +#: misc/mke2fs.c:2505 msgid "reserved online resize blocks not supported on non-sparse filesystem" msgstr "" -#: misc/mke2fs.c:2516 +#: misc/mke2fs.c:2514 msgid "blocks per group count out of range" msgstr "" -#: misc/mke2fs.c:2538 +#: misc/mke2fs.c:2536 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified" msgstr "" -#: misc/mke2fs.c:2550 +#: misc/mke2fs.c:2548 #, c-format msgid "invalid inode size %d (min %d/max %d)" msgstr "" -#: misc/mke2fs.c:2565 +#: misc/mke2fs.c:2563 #, c-format msgid "%d byte inodes are too small for inline data; specify larger size" msgstr "" -#: misc/mke2fs.c:2580 +#: misc/mke2fs.c:2578 #, c-format msgid "too many inodes (%llu), raise inode ratio?" msgstr "" -#: misc/mke2fs.c:2587 +#: misc/mke2fs.c:2585 #, c-format msgid "too many inodes (%llu), specify < 2^32 inodes" msgstr "" -#: misc/mke2fs.c:2601 +#: misc/mke2fs.c:2599 #, c-format msgid "" "inode_size (%u) * inodes_count (%u) too big for a\n" @@ -5721,153 +5726,153 @@ msgid "" "\tor lower inode count (-N).\n" msgstr "" -#: misc/mke2fs.c:2788 +#: misc/mke2fs.c:2786 msgid "Discarding device blocks: " msgstr "" -#: misc/mke2fs.c:2804 +#: misc/mke2fs.c:2802 msgid "failed - " msgstr "" -#: misc/mke2fs.c:2863 +#: misc/mke2fs.c:2861 msgid "while initializing quota context" msgstr "" -#: misc/mke2fs.c:2870 +#: misc/mke2fs.c:2868 msgid "while writing quota inodes" msgstr "" -#: misc/mke2fs.c:2895 +#: misc/mke2fs.c:2893 #, c-format msgid "bad error behavior in profile - %s" msgstr "" -#: misc/mke2fs.c:2971 +#: misc/mke2fs.c:2969 msgid "in malloc for android_sparse_params" msgstr "" -#: misc/mke2fs.c:2985 +#: misc/mke2fs.c:2983 msgid "while setting up superblock" msgstr "" -#: misc/mke2fs.c:3001 +#: misc/mke2fs.c:2999 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:3008 +#: misc/mke2fs.c:3006 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:3016 +#: misc/mke2fs.c:3014 msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n" msgstr "" -#: misc/mke2fs.c:3040 +#: misc/mke2fs.c:3038 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n" msgstr "" -#: misc/mke2fs.c:3139 +#: misc/mke2fs.c:3137 #, c-format msgid "unknown os - %s" msgstr "" -#: misc/mke2fs.c:3202 +#: misc/mke2fs.c:3200 msgid "Allocating group tables: " msgstr "" -#: misc/mke2fs.c:3210 +#: misc/mke2fs.c:3208 msgid "while trying to allocate filesystem tables" msgstr "" -#: misc/mke2fs.c:3219 +#: misc/mke2fs.c:3217 msgid "" "\n" "\twhile converting subcluster bitmap" msgstr "" -#: misc/mke2fs.c:3225 +#: misc/mke2fs.c:3223 #, c-format msgid "%s may be further corrupted by superblock rewrite\n" msgstr "" -#: misc/mke2fs.c:3266 +#: misc/mke2fs.c:3264 #, c-format msgid "while zeroing block %llu at end of filesystem" msgstr "" -#: misc/mke2fs.c:3279 +#: misc/mke2fs.c:3277 msgid "while reserving blocks for online resize" msgstr "" -#: misc/mke2fs.c:3291 misc/tune2fs.c:1492 +#: misc/mke2fs.c:3289 misc/tune2fs.c:1504 msgid "journal" msgstr "" -#: misc/mke2fs.c:3303 +#: misc/mke2fs.c:3301 #, c-format msgid "Adding journal to device %s: " msgstr "" -#: misc/mke2fs.c:3310 +#: misc/mke2fs.c:3308 #, c-format msgid "" "\n" "\twhile trying to add journal to device %s" msgstr "" -#: 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 +#: misc/mke2fs.c:3313 misc/mke2fs.c:3342 misc/mke2fs.c:3380 +#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1533 misc/tune2fs.c:1552 msgid "done\n" msgstr "" -#: misc/mke2fs.c:3321 +#: misc/mke2fs.c:3319 msgid "Skipping journal creation in super-only mode\n" msgstr "" -#: misc/mke2fs.c:3331 +#: misc/mke2fs.c:3329 #, c-format msgid "Creating journal (%u blocks): " msgstr "" -#: misc/mke2fs.c:3340 +#: misc/mke2fs.c:3338 msgid "" "\n" "\twhile trying to create journal" msgstr "" -#: misc/mke2fs.c:3352 misc/tune2fs.c:1133 +#: misc/mke2fs.c:3350 misc/tune2fs.c:1133 msgid "" "\n" "Error while enabling multiple mount protection feature." msgstr "" -#: misc/mke2fs.c:3357 +#: misc/mke2fs.c:3355 #, c-format msgid "Multiple mount protection is enabled with update interval %d seconds.\n" msgstr "" -#: misc/mke2fs.c:3373 +#: misc/mke2fs.c:3371 msgid "Copying files into the device: " msgstr "" -#: misc/mke2fs.c:3379 +#: misc/mke2fs.c:3377 msgid "while populating file system" msgstr "" -#: misc/mke2fs.c:3386 +#: misc/mke2fs.c:3384 msgid "Writing superblocks and filesystem accounting information: " msgstr "" -#: misc/mke2fs.c:3393 +#: misc/mke2fs.c:3391 msgid "while writing out and closing file system" msgstr "" -#: misc/mke2fs.c:3396 +#: misc/mke2fs.c:3394 msgid "" "done\n" "\n" @@ -5972,19 +5977,19 @@ msgstr "" msgid "while trying to open external journal" msgstr "" -#: misc/tune2fs.c:287 misc/tune2fs.c:2804 +#: misc/tune2fs.c:287 misc/tune2fs.c:2816 #, c-format msgid "%s is not a journal device.\n" msgstr "" -#: misc/tune2fs.c:296 misc/tune2fs.c:2813 +#: misc/tune2fs.c:296 misc/tune2fs.c:2825 #, c-format msgid "" "Journal superblock is corrupted, nr_users\n" "is too high (%d).\n" msgstr "" -#: misc/tune2fs.c:303 misc/tune2fs.c:2820 +#: misc/tune2fs.c:303 misc/tune2fs.c:2832 msgid "Filesystem's UUID not found on journal device.\n" msgstr "" @@ -6146,106 +6151,114 @@ msgstr "" msgid "Cannot disable metadata_csum on a mounted filesystem!\n" msgstr "" -#: misc/tune2fs.c:1334 +#: misc/tune2fs.c:1312 +msgid "Cannot enable uninit_bg on a mounted filesystem!\n" +msgstr "" + +#: misc/tune2fs.c:1327 +msgid "Cannot disable uninit_bg on a mounted filesystem!\n" +msgstr "" + +#: misc/tune2fs.c:1346 #, c-format msgid "Cannot enable 64-bit mode while mounted!\n" msgstr "" -#: misc/tune2fs.c:1344 +#: misc/tune2fs.c:1356 #, c-format msgid "Cannot disable 64-bit mode while mounted!\n" msgstr "" -#: misc/tune2fs.c:1374 +#: misc/tune2fs.c:1386 #, c-format msgid "Cannot enable project feature; inode size too small.\n" msgstr "" -#: misc/tune2fs.c:1395 +#: misc/tune2fs.c:1407 msgid "" "\n" "Warning: '^quota' option overrides '-Q'arguments.\n" msgstr "" -#: misc/tune2fs.c:1405 +#: misc/tune2fs.c:1417 msgid "" "Cannot enable encrypt feature on filesystems with the encoding feature " "enabled.\n" msgstr "" -#: misc/tune2fs.c:1419 +#: misc/tune2fs.c:1431 msgid "" "Setting feature 'metadata_csum_seed' is only supported\n" "on filesystems with the metadata_csum feature enabled.\n" msgstr "" -#: misc/tune2fs.c:1437 +#: misc/tune2fs.c:1449 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:1443 +#: misc/tune2fs.c:1455 msgid "Recalculating checksums could take some time." msgstr "" -#: misc/tune2fs.c:1485 +#: misc/tune2fs.c:1497 msgid "The filesystem already has a journal.\n" msgstr "" -#: misc/tune2fs.c:1505 +#: misc/tune2fs.c:1517 #, c-format msgid "" "\n" "\twhile trying to open journal on %s\n" msgstr "" -#: misc/tune2fs.c:1509 +#: misc/tune2fs.c:1521 #, c-format msgid "Creating journal on device %s: " msgstr "" -#: misc/tune2fs.c:1517 +#: misc/tune2fs.c:1529 #, c-format msgid "while adding filesystem to journal on %s" msgstr "" -#: misc/tune2fs.c:1523 +#: misc/tune2fs.c:1535 msgid "Creating journal inode: " msgstr "" -#: misc/tune2fs.c:1537 +#: misc/tune2fs.c:1549 msgid "" "\n" "\twhile trying to create journal file" msgstr "" -#: misc/tune2fs.c:1575 +#: misc/tune2fs.c:1587 #, c-format msgid "Cannot enable project quota; inode size too small.\n" msgstr "" -#: misc/tune2fs.c:1588 +#: misc/tune2fs.c:1600 msgid "while initializing quota context in support library" msgstr "" -#: misc/tune2fs.c:1603 +#: misc/tune2fs.c:1615 #, c-format msgid "while updating quota limits (%d)" msgstr "" -#: misc/tune2fs.c:1611 +#: misc/tune2fs.c:1623 #, c-format msgid "while writing quota file (%d)" msgstr "" -#: misc/tune2fs.c:1629 +#: misc/tune2fs.c:1641 #, c-format msgid "while removing quota file (%d)" msgstr "" -#: misc/tune2fs.c:1672 +#: misc/tune2fs.c:1684 msgid "" "\n" "Bad quota options specified.\n" @@ -6259,65 +6272,65 @@ msgid "" "\n" msgstr "" -#: misc/tune2fs.c:1730 +#: misc/tune2fs.c:1742 #, c-format msgid "Couldn't parse date/time specifier: %s" msgstr "" -#: misc/tune2fs.c:1755 misc/tune2fs.c:1768 +#: misc/tune2fs.c:1767 misc/tune2fs.c:1780 #, c-format msgid "bad mounts count - %s" msgstr "" -#: misc/tune2fs.c:1811 +#: misc/tune2fs.c:1823 #, c-format msgid "bad gid/group name - %s" msgstr "" -#: misc/tune2fs.c:1844 +#: misc/tune2fs.c:1856 #, c-format msgid "bad interval - %s" msgstr "" -#: misc/tune2fs.c:1873 +#: misc/tune2fs.c:1885 #, c-format msgid "bad reserved block ratio - %s" msgstr "" -#: misc/tune2fs.c:1888 +#: misc/tune2fs.c:1900 msgid "-o may only be specified once" msgstr "" -#: misc/tune2fs.c:1897 +#: misc/tune2fs.c:1909 msgid "-O may only be specified once" msgstr "" -#: misc/tune2fs.c:1914 +#: misc/tune2fs.c:1926 #, c-format msgid "bad reserved blocks count - %s" msgstr "" -#: misc/tune2fs.c:1943 +#: misc/tune2fs.c:1955 #, c-format msgid "bad uid/user name - %s" msgstr "" -#: misc/tune2fs.c:1960 +#: misc/tune2fs.c:1972 #, c-format msgid "bad inode size - %s" msgstr "" -#: misc/tune2fs.c:1967 +#: misc/tune2fs.c:1979 #, c-format msgid "Inode size must be a power of two- %s" msgstr "" -#: misc/tune2fs.c:2064 +#: misc/tune2fs.c:2076 #, c-format msgid "mmp_update_interval too big: %lu\n" msgstr "" -#: misc/tune2fs.c:2069 +#: misc/tune2fs.c:2081 #, c-format msgid "Setting multiple mount protection update interval to %lu second\n" msgid_plural "" @@ -6325,32 +6338,32 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: misc/tune2fs.c:2078 +#: misc/tune2fs.c:2090 #, c-format msgid "Setting filesystem error flag to force fsck.\n" msgstr "" -#: misc/tune2fs.c:2096 +#: misc/tune2fs.c:2108 #, c-format msgid "Invalid RAID stride: %s\n" msgstr "" -#: misc/tune2fs.c:2111 +#: misc/tune2fs.c:2123 #, c-format msgid "Invalid RAID stripe-width: %s\n" msgstr "" -#: misc/tune2fs.c:2126 +#: misc/tune2fs.c:2138 #, c-format msgid "Invalid hash algorithm: %s\n" msgstr "" -#: misc/tune2fs.c:2132 +#: misc/tune2fs.c:2144 #, c-format msgid "Setting default hash algorithm to %s (%d)\n" msgstr "" -#: misc/tune2fs.c:2151 +#: misc/tune2fs.c:2163 msgid "" "\n" "Bad options specified.\n" @@ -6370,72 +6383,72 @@ msgid "" "\t^test_fs\n" msgstr "" -#: misc/tune2fs.c:2622 +#: misc/tune2fs.c:2634 msgid "Failed to read inode bitmap\n" msgstr "" -#: misc/tune2fs.c:2627 +#: misc/tune2fs.c:2639 msgid "Failed to read block bitmap\n" msgstr "" -#: misc/tune2fs.c:2644 resize/resize2fs.c:1277 +#: misc/tune2fs.c:2656 resize/resize2fs.c:1277 msgid "blocks to be moved" msgstr "" -#: misc/tune2fs.c:2647 +#: misc/tune2fs.c:2659 msgid "Failed to allocate block bitmap when increasing inode size\n" msgstr "" -#: misc/tune2fs.c:2653 +#: misc/tune2fs.c:2665 msgid "Not enough space to increase inode size \n" msgstr "" -#: misc/tune2fs.c:2658 +#: misc/tune2fs.c:2670 msgid "Failed to relocate blocks during inode resize \n" msgstr "" -#: misc/tune2fs.c:2690 +#: misc/tune2fs.c:2702 msgid "" "Error in resizing the inode size.\n" "Run e2undo to undo the file system changes. \n" msgstr "" -#: misc/tune2fs.c:2900 +#: misc/tune2fs.c:2912 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 +#: misc/tune2fs.c:2919 #, c-format msgid "" "MMP block magic is bad. Try to fix it by running:\n" "'e2fsck -f %s'\n" msgstr "" -#: misc/tune2fs.c:2919 +#: misc/tune2fs.c:2931 msgid "Cannot modify a journal device.\n" msgstr "" -#: misc/tune2fs.c:2932 +#: misc/tune2fs.c:2944 #, c-format msgid "The inode size is already %lu\n" msgstr "" -#: misc/tune2fs.c:2939 +#: misc/tune2fs.c:2951 msgid "Shrinking inode size is not supported\n" msgstr "" -#: misc/tune2fs.c:2944 +#: misc/tune2fs.c:2956 #, c-format msgid "Invalid inode size %lu (max %d)\n" msgstr "" -#: misc/tune2fs.c:2950 +#: misc/tune2fs.c:2962 msgid "Resizing inodes could take some time." msgstr "" -#: misc/tune2fs.c:2998 +#: misc/tune2fs.c:3009 #, c-format msgid "" "Warning: The journal is dirty. You may wish to replay the journal like:\n" @@ -6446,153 +6459,153 @@ msgid "" "by journal recovery.\n" msgstr "" -#: misc/tune2fs.c:3009 +#: misc/tune2fs.c:3020 #, c-format msgid "Recovering journal.\n" msgstr "" -#: misc/tune2fs.c:3028 +#: misc/tune2fs.c:3039 #, c-format msgid "Setting maximal mount count to %d\n" msgstr "" -#: misc/tune2fs.c:3034 +#: misc/tune2fs.c:3045 #, c-format msgid "Setting current mount count to %d\n" msgstr "" -#: misc/tune2fs.c:3039 +#: misc/tune2fs.c:3050 #, c-format msgid "Setting error behavior to %d\n" msgstr "" -#: misc/tune2fs.c:3044 +#: misc/tune2fs.c:3055 #, c-format msgid "Setting reserved blocks gid to %lu\n" msgstr "" -#: misc/tune2fs.c:3049 +#: misc/tune2fs.c:3060 #, c-format msgid "interval between checks is too big (%lu)" msgstr "" -#: misc/tune2fs.c:3056 +#: misc/tune2fs.c:3067 #, c-format msgid "Setting interval between checks to %lu seconds\n" msgstr "" -#: misc/tune2fs.c:3063 +#: misc/tune2fs.c:3074 #, c-format msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n" msgstr "" -#: misc/tune2fs.c:3069 +#: misc/tune2fs.c:3080 #, c-format msgid "reserved blocks count is too big (%llu)" msgstr "" -#: misc/tune2fs.c:3076 +#: misc/tune2fs.c:3087 #, c-format msgid "Setting reserved blocks count to %llu\n" msgstr "" -#: misc/tune2fs.c:3081 +#: misc/tune2fs.c:3092 msgid "" "\n" "The filesystem already has sparse superblocks.\n" msgstr "" -#: misc/tune2fs.c:3084 +#: misc/tune2fs.c:3095 msgid "" "\n" "Setting the sparse superblock flag not supported\n" "for filesystems with the meta_bg feature enabled.\n" msgstr "" -#: misc/tune2fs.c:3094 +#: misc/tune2fs.c:3105 #, c-format msgid "" "\n" "Sparse superblock flag set. %s" msgstr "" -#: misc/tune2fs.c:3099 +#: misc/tune2fs.c:3110 msgid "" "\n" "Clearing the sparse superblock flag not supported.\n" msgstr "" -#: misc/tune2fs.c:3107 +#: misc/tune2fs.c:3118 #, c-format msgid "Setting time filesystem last checked to %s\n" msgstr "" -#: misc/tune2fs.c:3113 +#: misc/tune2fs.c:3124 #, c-format msgid "Setting reserved blocks uid to %lu\n" msgstr "" -#: misc/tune2fs.c:3145 +#: misc/tune2fs.c:3156 msgid "Error in using clear_mmp. It must be used with -f\n" msgstr "" -#: misc/tune2fs.c:3163 +#: misc/tune2fs.c:3174 msgid "" "The quota feature may only be changed when the filesystem is unmounted.\n" msgstr "" -#: misc/tune2fs.c:3181 +#: misc/tune2fs.c:3192 msgid "Setting the UUID on this filesystem could take some time." msgstr "" -#: misc/tune2fs.c:3196 +#: misc/tune2fs.c:3207 msgid "The UUID may only be changed when the filesystem is unmounted.\n" msgstr "" -#: misc/tune2fs.c:3199 +#: misc/tune2fs.c:3210 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:3229 +#: misc/tune2fs.c:3240 msgid "Invalid UUID format\n" msgstr "" -#: misc/tune2fs.c:3245 +#: misc/tune2fs.c:3256 msgid "Need to update journal superblock.\n" msgstr "" -#: misc/tune2fs.c:3267 +#: misc/tune2fs.c:3278 msgid "The inode size may only be changed when the filesystem is unmounted.\n" msgstr "" -#: misc/tune2fs.c:3274 +#: misc/tune2fs.c:3285 msgid "" "Changing the inode size not supported for filesystems with the flex_bg\n" "feature enabled.\n" msgstr "" -#: misc/tune2fs.c:3292 +#: misc/tune2fs.c:3303 #, c-format msgid "Setting inode size %lu\n" msgstr "" -#: misc/tune2fs.c:3296 +#: misc/tune2fs.c:3307 msgid "Failed to change inode size\n" msgstr "" -#: misc/tune2fs.c:3310 +#: misc/tune2fs.c:3321 #, c-format msgid "Setting stride size to %d\n" msgstr "" -#: misc/tune2fs.c:3315 +#: misc/tune2fs.c:3326 #, c-format msgid "Setting stripe width to %d\n" msgstr "" -#: misc/tune2fs.c:3322 +#: misc/tune2fs.c:3333 #, c-format msgid "Setting extended default mount options to '%s'\n" msgstr "" @@ -7091,7 +7104,7 @@ msgid "Should never happen: resize inode corrupt!\n" msgstr "" #: lib/ext2fs/ext2_err.c:11 -msgid "EXT2FS Library version 1.45.4" +msgid "EXT2FS Library version 1.45.6" msgstr "" #: lib/ext2fs/ext2_err.c:12 @@ -7806,6 +7819,10 @@ msgstr "" 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 "" @@ -7930,68 +7947,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 "" diff --git a/po/ms.po b/po/ms.po index 4269dcb..8944ea0 100644 --- a/po/ms.po +++ b/po/ms.po @@ -1,7 +1,7 @@ # e2fsprogs Bahasa Melayu (Malay) (ms). -# Copyright (C) 2008, 2009, 2015, 2018, 2019 Theodore Tso (msgids) +# Copyright (C) 2008, 2009, 2015, 2018, 2019, 2020 Theodore Tso (msgids) # This file is distributed under the same license as the e2fsprogs package. -# Sharuzzaman Ahmat Raslan , 2008, 2009, 2015, 2018, 2019. +# Sharuzzaman Ahmat Raslan , 2008, 2009, 2015, 2018, 2019, 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, @@ -77,7 +77,7 @@ 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-09-01 22:24+0800\n" +"PO-Revision-Date: 2020-03-18 13:02+0800\n" "Last-Translator: Sharuzzaman Ahmat Raslan \n" "Language-Team: Malay \n" "Language: ms\n" @@ -86,7 +86,7 @@ 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 2.2.3\n" +"X-Generator: Poedit 2.3\n" #: e2fsck/badblocks.c:23 misc/mke2fs.c:220 #, c-format @@ -132,10 +132,8 @@ 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" #: e2fsck/dirinfo.c:331 -#, fuzzy -#| msgid "while reading root inode" msgid "while freeing dir_info tdb file" -msgstr "Ralat apabila membaca fail." +msgstr "ketika membebaskan fail dir_info tdb" #: e2fsck/ehandler.c:55 #, c-format @@ -170,7 +168,7 @@ msgstr "Ralat membaca blok %lu (%s) ketika %s. " #: e2fsck/emptydir.c:57 #, fuzzy msgid "empty dirblocks" -msgstr "kosong" +msgstr "Makro adalah kosong" #: e2fsck/emptydir.c:62 #, fuzzy @@ -205,7 +203,7 @@ msgstr "fail kosong biasa" #: e2fsck/flushb.c:35 #, fuzzy, c-format msgid "Usage: %s disk\n" -msgstr "Penggunaan: %s [PILIHAN]\n" +msgstr "Penggunaan: %s [-r] [-t]\n" #: e2fsck/flushb.c:64 #, c-format @@ -265,7 +263,7 @@ msgstr "%s: fail terlalu pendek untuk menjadi fail gmon\n" #: e2fsck/journal.c:972 misc/fuse2fs.c:3792 #, fuzzy, c-format msgid "%s: recovering journal\n" -msgstr "ketika mendapatkan semula jurnal ext3 bagi %s" +msgstr "%s adalah bukan peranti jurnal.\n" #: e2fsck/journal.c:974 #, c-format @@ -353,7 +351,7 @@ msgstr "" #: e2fsck/message.c:133 #, fuzzy msgid "llost+found" -msgstr "\"%s\" tidak dijumpai" +msgstr "/@l tidak dijumpai." #: e2fsck/message.c:134 #, fuzzy @@ -373,9 +371,8 @@ msgid "oorphaned" msgstr "" #: e2fsck/message.c:138 -#, fuzzy msgid "pproblem in" -msgstr "Sedang Diguna" +msgstr "pproblem dalam" #: e2fsck/message.c:139 msgid "qquota" @@ -475,7 +472,7 @@ msgstr "direktori" #: e2fsck/message.c:331 #, fuzzy msgid "character device" -msgstr "peranti tidak sah %s %s" +msgstr "aksara tidak sah" #: e2fsck/message.c:333 #, fuzzy @@ -485,7 +482,7 @@ msgstr "%s adalah bukan peranti khas.\n" #: e2fsck/message.c:335 #, fuzzy msgid "named pipe" -msgstr "fail dinamakan" +msgstr "(paip)" #: e2fsck/message.c:337 msgid "symbolic link" @@ -532,7 +529,7 @@ msgstr "pengguna" #: e2fsck/message.c:485 #, fuzzy msgid "group" -msgstr "tak dapat menukar ke kumpulan null" +msgstr "Pemerihal kumpulan kelihatan buruk..." #: e2fsck/message.c:488 msgid "project" @@ -542,7 +539,7 @@ msgstr "" #, fuzzy #| msgid "unknown os - %s" msgid "unknown quota type" -msgstr "%s mempunyai jenis fail yang tidak diketahui" +msgstr "Jenis kandungan struktur PKCS tidak diketahui." #: e2fsck/pass1b.c:222 msgid "multiply claimed inode map" @@ -580,7 +577,7 @@ msgstr "membaca direktori %s" #: e2fsck/pass1.c:1224 #, fuzzy msgid "in-use inode map" -msgstr "Tidak dapat memetakan nama \"%s\" ke menu\n" +msgstr "Guna%" #: e2fsck/pass1.c:1235 #, fuzzy @@ -590,18 +587,18 @@ msgstr "Peta terjemahan: sintaks tidak betul" #: e2fsck/pass1.c:1245 #, fuzzy msgid "regular file inode map" -msgstr "Mencipta fail biasa %s\n" +msgstr "fail kosong biasa" #: e2fsck/pass1.c:1254 misc/e2image.c:1282 #, fuzzy msgid "in-use block map" -msgstr "Tidak dapat memetakan nama \"%s\" ke menu\n" +msgstr "Peta terjemahan: sintaks tidak betul" #: e2fsck/pass1.c:1263 #, fuzzy #| msgid "meta-data blocks" msgid "metadata block map" -msgstr "Tidak dapat memetakan nama \"%s\" ke menu\n" +msgstr "Peta terjemahan: sintaks tidak betul" #: e2fsck/pass1.c:1325 #, fuzzy @@ -635,7 +632,7 @@ msgstr "ketika menetapkan inod blok buruk" #: e2fsck/pass1.c:2239 #, fuzzy msgid "imagic inode map" -msgstr "Tidak dapat memetakan nama \"%s\" ke menu\n" +msgstr "Peta terjemahan: sintaks tidak betul" #: e2fsck/pass1.c:2270 msgid "multiply claimed block map" @@ -658,7 +655,7 @@ msgstr " Bitmap block di" #: e2fsck/pass1.c:4066 #, fuzzy msgid "inode bitmap" -msgstr ", Bitmap inode di" +msgstr "ketika menulis inod bitmap" #: e2fsck/pass1.c:4072 #, fuzzy @@ -680,7 +677,7 @@ msgstr "" #: e2fsck/pass3.c:77 #, fuzzy msgid "inode done bitmap" -msgstr ", Bitmap inode di" +msgstr "ketika menulis inod bitmap" #: e2fsck/pass3.c:86 #, fuzzy @@ -695,17 +692,17 @@ msgstr "Ulangan 3: Memeriksa sambungan @d\n" #: e2fsck/pass3.c:344 #, fuzzy msgid "inode loop detection bitmap" -msgstr ", Bitmap inode di" +msgstr "ketika menulis inod bitmap" #: e2fsck/pass4.c:277 #, fuzzy msgid "Pass 4" -msgstr "Katalaluan tidak diketahui?!?" +msgstr "--menunggu-- (lalu %d)\n" #: e2fsck/pass5.c:79 #, fuzzy msgid "Pass 5" -msgstr "Katalaluan tidak diketahui?!?" +msgstr "--menunggu-- (lalu %d)\n" #: e2fsck/pass5.c:102 msgid "check_inode_bitmap_checksum: Memory allocation error" @@ -723,9 +720,7 @@ msgstr "Auto simpan ketika keluar, jangan maklum" #: e2fsck/problem.c:53 #, fuzzy msgid "Fix" -msgstr "" -"Tidak dapat membaiki induk untuk @i %i: %m\n" -"\n" +msgstr "pembetulan boleh diterapkan. Ulang laksana dengan pilihan '--update'." #: e2fsck/problem.c:54 #, fuzzy @@ -754,7 +749,7 @@ msgstr "ketika mencipta /lost+found" #: e2fsck/problem.c:59 #, fuzzy msgid "Create" -msgstr "tidak dapat mencipta paip" +msgstr "tak dapat memcipta fail biasa %s" #: e2fsck/problem.c:60 msgid "Salvage" @@ -932,15 +927,13 @@ msgstr "" #. @-expanded: block bitmap for group %g is not in group. (block %b)\n #: e2fsck/problem.c:115 -#, fuzzy 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:119 -#, fuzzy 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 @@ -999,9 +992,8 @@ msgstr "" #. @-expanded: superblock first_data_block = %b, should have been %c\n #: e2fsck/problem.c:160 -#, fuzzy 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 @@ -1026,7 +1018,7 @@ msgstr "" #: e2fsck/problem.c:180 #, fuzzy msgid "Corruption found in @S. (%s = %N).\n" -msgstr "%s: `%s': padanan tak dijumpai" +msgstr "Hujah sah adalah nombor bulat n seperti: %s\n" #. @-expanded: Error determining size of the physical device: %m\n #: e2fsck/problem.c:186 @@ -1137,7 +1129,7 @@ msgstr "Fail Telah Ada dalam Senarai" #: e2fsck/problem.c:281 #, fuzzy, no-c-format msgid "@I @o @i %i in @S.\n" -msgstr "@i %i (%Q) adalah @I FIFO.\n" +msgstr "@A baru @d @b untuk @i %i (%s): %m\n" #. @-expanded: illegal inode %i in orphaned inode list.\n #: e2fsck/problem.c:287 @@ -1192,7 +1184,7 @@ msgstr "" #: e2fsck/problem.c:325 #, fuzzy msgid "Run @j anyway" -msgstr "mke2fs dipaksa juga.\n" +msgstr "ketika cuba untuk melaksana '%s'" #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n #: e2fsck/problem.c:330 @@ -1225,7 +1217,7 @@ msgstr "" #: e2fsck/problem.c:352 #, fuzzy msgid "Resize @i not valid. " -msgstr "Tidak dapat mengubah saiz tetingkap suntingan" +msgstr "ketika cuba untuk mengulangsaiz %s" #. @-expanded: superblock last mount time (%t,\n #. @-expanded: \tnow = %T) is in the future.\n @@ -1616,7 +1608,7 @@ msgstr "&Cari Bantuan" msgid "@A @b buffer for relocating %s\n" msgstr "" "\n" -"Buffer tidak ditulis ke %s: %s\n" +"Buffer ditulis ke %s\n" #. @-expanded: Relocating group %g's %s from %b to %c...\n #: e2fsck/problem.c:702 @@ -1726,7 +1718,7 @@ msgstr "" #: e2fsck/problem.c:806 #, fuzzy msgid "@j is not regular file. " -msgstr "Mencipta fail biasa %s\n" +msgstr "fail kosong biasa" #. @-expanded: inode %i was part of the orphaned inode list. #: e2fsck/problem.c:812 @@ -2239,7 +2231,7 @@ msgstr "" #: 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 menyalin dalam penggantian @i @B: %m\n" #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n #: e2fsck/problem.c:1298 @@ -2312,7 +2304,7 @@ msgstr "Gagal untuk mengoptima direktori %q (%d): %m" #, fuzzy #| msgid "Optimizing directories: " msgid "Optimizing @x trees: " -msgstr "\t\tX: " +msgstr "Mengoptimakan direktori" #: e2fsck/problem.c:1376 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n" @@ -2502,7 +2494,7 @@ msgstr "" #: e2fsck/problem.c:1550 #, fuzzy, no-c-format msgid "@A icount structure: %m\n" -msgstr "Tidak dapat mengembang /@l: %m\n" +msgstr "Jenis beg struktur PKCS tidak diketahui." #. @-expanded: Error iterating over directory blocks: %m\n #: e2fsck/problem.c:1556 @@ -2927,15 +2919,15 @@ msgstr "" #. @-expanded: unattached zero-length inode %i. #: e2fsck/problem.c:1970 -#, fuzzy, no-c-format +#, no-c-format msgid "@u @z @i %i. " -msgstr "(tiada cadangan)" +msgstr "@u @z @i %i. " #. @-expanded: unattached inode %i\n #: e2fsck/problem.c:1976 -#, fuzzy, no-c-format +#, no-c-format msgid "@u @i %i\n" -msgstr "(tiada cadangan)" +msgstr "@u @i %i\n" #. @-expanded: inode %i ref count is %Il, should be %N. #: e2fsck/problem.c:1981 @@ -2956,7 +2948,7 @@ msgstr "" #: e2fsck/problem.c:1992 #, fuzzy msgid "@a @i %i ref count is %N, @s %n. " -msgstr "i_blocks_hi @F %N, @s sifar.\n" +msgstr "i_fsize @F %N, @s sifar.\n" #. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n #: e2fsck/problem.c:1997 @@ -3103,9 +3095,7 @@ msgstr "DIABAIKAN" #: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59 #, fuzzy msgid "in move_quota_inode" -msgstr "" -"\n" -" Jadual inode di" +msgstr "tak dapat pindahkan %s ke %s" #: e2fsck/scantest.c:79 #, c-format @@ -3236,7 +3226,7 @@ msgid "" msgid_plural "" "\n" "%12u regular files\n" -msgstr[0] "Mencipta fail biasa %s\n" +msgstr[0] "fail kosong biasa" #: e2fsck/unix.c:204 #, fuzzy, c-format @@ -3248,7 +3238,7 @@ msgstr[0] "direktori" #, fuzzy, c-format msgid "%12u character device file\n" msgid_plural "%12u character device files\n" -msgstr[0] "Fail \"%s\" adalah sebuah fail peranti" +msgstr[0] "fail khas aksara" #: e2fsck/unix.c:209 #, fuzzy, c-format @@ -3257,10 +3247,10 @@ msgid_plural "%12u block device files\n" msgstr[0] "%s adalah bukan peranti khas.\n" #: e2fsck/unix.c:211 -#, fuzzy, c-format +#, c-format msgid "%12u fifo\n" msgid_plural "%12u fifos\n" -msgstr[0] "fifo" +msgstr[0] "%12u fifo\n" #: e2fsck/unix.c:213 #, fuzzy, c-format @@ -3290,7 +3280,7 @@ msgstr[0] "soket" #, fuzzy, c-format msgid "%12u file\n" msgid_plural "%12u files\n" -msgstr[0] " Fail: ..." +msgstr[0] "Fail:" #: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129 #: resize/main.c:354 @@ -3318,7 +3308,7 @@ msgstr "%s dilekapkan;" #, fuzzy, c-format #| msgid "%s is mounted. " msgid "%s is in use.\n" -msgstr "opsyen `-%s' sudah luput; guna `-%c %.*s%.*s%s'" +msgstr "Guna%" #: e2fsck/unix.c:272 msgid "" @@ -3412,7 +3402,7 @@ msgstr "Versi EA tidak sah.\n" #, fuzzy #| msgid "Invalid resize parameter: %s\n" msgid "Invalid readahead buffer size.\n" -msgstr "saiz blok tidak sah - %s" +msgstr "Tidak dapat memperoleh saiz buffer paip" #: e2fsck/unix.c:757 #, c-format @@ -3502,7 +3492,7 @@ msgstr "" msgid "" "E2FSCK_JBD_DEBUG \"%s\" not an integer\n" "\n" -msgstr "`%s' adalah bukan integer positif yang sah" +msgstr "integer diluar julat: %s" #: e2fsck/unix.c:1151 #, fuzzy, c-format @@ -3520,7 +3510,7 @@ msgstr "" #: e2fsck/unix.c:1259 e2fsck/unix.c:1264 #, fuzzy msgid "while checking MMP block" -msgstr "ketika menulis bitmap blok" +msgstr "ketika memeriksa kewarasan blok inode buruk" #: e2fsck/unix.c:1266 #, c-format @@ -3532,7 +3522,7 @@ msgstr "" #: e2fsck/unix.c:1282 #, fuzzy msgid "while reading MMP block" -msgstr "ketika menulis bitmap blok" +msgstr "Ralat apabila membaca fail." #: 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 @@ -3641,7 +3631,7 @@ msgstr "" #: e2fsck/unix.c:1749 #, fuzzy, c-format msgid "while checking journal for %s" -msgstr "ketika mendapatkan semula jurnal ext3 bagi %s" +msgstr "ketika mengosongkan inod jurnal" #: e2fsck/unix.c:1752 #, fuzzy @@ -3668,13 +3658,13 @@ msgstr "Superblok jurnal tidak dijumpai!\n" #, fuzzy, c-format #| msgid "Journal removed\n" msgid "Journal corrupted in %s\n" -msgstr "jurnal" +msgstr "Menambah jurnal ke peranti %s:" #: 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" +msgstr "ketika membaca superblok jurnal" #: e2fsck/unix.c:1811 #, c-format @@ -3759,7 +3749,7 @@ msgstr "" #, fuzzy, c-format #| msgid "%s: ***** REBOOT LINUX *****\n" msgid "%s: ***** REBOOT SYSTEM *****\n" -msgstr "%s: ***** ULANGBOOT LINUX *****\n" +msgstr "(dan ulangboot selepas itu!)\n" #: e2fsck/unix.c:2050 e2fsck/util.c:77 #, c-format @@ -3778,9 +3768,8 @@ msgid "nN" msgstr "tTnN" #: e2fsck/util.c:198 -#, fuzzy msgid "aA" -msgstr "Ss" +msgstr "aA" #: e2fsck/util.c:202 #, fuzzy @@ -3788,9 +3777,8 @@ msgid " ('a' enables 'yes' to all) " msgstr "Semua" #: e2fsck/util.c:219 -#, fuzzy msgid "" -msgstr "\t\tY: " +msgstr "" #: e2fsck/util.c:221 #, fuzzy @@ -3800,7 +3788,7 @@ msgstr "Tiada" #: e2fsck/util.c:223 #, fuzzy msgid " (y/n)" -msgstr "Teruskan juga? (y,t)" +msgstr "\t\tY: " #: e2fsck/util.c:246 msgid "cancelled!\n" @@ -3902,7 +3890,7 @@ msgstr "masa lepas: %6.3f\n" #: 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. " +msgstr "ketika membaca inod jurnal" #: e2fsck/util.c:523 e2fsck/util.c:536 #, fuzzy, c-format @@ -3916,7 +3904,7 @@ msgstr "" #: misc/badblocks.c:75 #, fuzzy msgid "done \n" -msgstr "selesai \n" +msgstr "selesai \n" #: misc/badblocks.c:100 #, c-format @@ -3942,12 +3930,12 @@ msgstr "" #: misc/badblocks.c:337 #, fuzzy msgid "Testing with random pattern: " -msgstr "Menyemai penjana nombor rawak..." +msgstr "Gagal untuk mendapatkan data rawak." #: misc/badblocks.c:355 #, fuzzy msgid "Testing with pattern 0x" -msgstr "Corak" +msgstr "Tiada corak carian semasa" #: misc/badblocks.c:387 misc/badblocks.c:460 msgid "during seek" @@ -4103,7 +4091,7 @@ msgstr "ketika membaca dalam senarai blok buruk dari fail" #: misc/badblocks.c:1305 #, fuzzy msgid "input file - bad format" -msgstr "fail masukan mengecil" +msgstr "%s: fail input adalah fail output" #: misc/badblocks.c:1313 misc/badblocks.c:1322 msgid "while adding to in-memory bad block list" @@ -4209,7 +4197,7 @@ msgstr "ketika menulis jadual inod" #: misc/create_inode.c:152 misc/create_inode.c:176 #, fuzzy, c-format msgid "while listing attributes of \"%s\"" -msgstr "tak dapat menyenaraikan direktori tersedia-tersenarai: %s" +msgstr "gagal mendapatkan atribut bagi %s" #: misc/create_inode.c:163 #, fuzzy, c-format @@ -4249,7 +4237,7 @@ msgstr "ketika mengumpukkan penimbal" #: misc/create_inode.c:294 #, fuzzy, c-format msgid "while creating inode \"%s\"" -msgstr "ketika mencipta direktori root" +msgstr "Mencipta inode jurnal:" #: misc/create_inode.c:360 #, fuzzy, c-format @@ -4283,29 +4271,29 @@ msgstr "" #, fuzzy, c-format #| msgid "while creating root dir" msgid "while scanning directory \"%s\"" -msgstr "ketika menetapkan versi pada %s" +msgstr "ketika cuba untuk memadam %s" #: misc/create_inode.c:825 #, fuzzy, c-format #| msgid "while trying to stat %s" msgid "while lstat \"%s\"" -msgstr "tak dapat lstat %s" +msgstr "ketika membuka %s" #: misc/create_inode.c:875 #, fuzzy, c-format msgid "while creating special file \"%s\"" -msgstr "Mencipta fail biasa %s\n" +msgstr "tak boleh mencipta fail istimewa %s" #: misc/create_inode.c:884 #, fuzzy msgid "malloc failed" -msgstr "malloc() gagal. Tidak dapat memperuntukkan memori yang cukup." +msgstr "Gagal" #: 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 memadam %s" +msgstr "tak dapat membaca pautan simbolik %s" #: misc/create_inode.c:899 msgid "symlink increased in size between lstat() and readlink()" @@ -4319,7 +4307,7 @@ msgstr "ketika menulis jadual inod" #: misc/create_inode.c:921 #, fuzzy, c-format msgid "while writing file \"%s\"" -msgstr "Ralat menulis fail sementara: %s" +msgstr "Ralat menulis fail salinan %s: %s" #: misc/create_inode.c:934 #, fuzzy, c-format @@ -4423,19 +4411,21 @@ msgstr "(0x%x, '%s') " #: misc/dumpe2fs.c:263 msgid "," -msgstr "" +msgstr "," #: misc/dumpe2fs.c:265 msgid "" "\n" " " msgstr "" +"\n" +" " #: misc/dumpe2fs.c:266 #, fuzzy #| msgid ", Inode bitmap at " msgid " Inode bitmap at " -msgstr ", Bitmap inode di" +msgstr "ketika menulis inod bitmap" #: misc/dumpe2fs.c:273 msgid "" @@ -4482,12 +4472,12 @@ msgstr "ketika membaca inod jurnal" #: misc/dumpe2fs.c:379 #, fuzzy msgid "while opening journal inode" -msgstr "ketika mengosongkan inod jurnal" +msgstr "ketika membaca inod jurnal" #: misc/dumpe2fs.c:385 #, fuzzy msgid "while reading journal super block" -msgstr "ketika membaca superblok jurnal" +msgstr "ketika membaca inod jurnal" #: misc/dumpe2fs.c:392 #, fuzzy @@ -4577,7 +4567,7 @@ msgstr "" #: misc/e2image.c:110 #, fuzzy, c-format msgid " %s -I device image-file\n" -msgstr "_Kerangka pada fail imej:" +msgstr "\"%s\" adalah sebuah fail peranti" #: misc/e2image.c:111 #, c-format @@ -4603,7 +4593,7 @@ msgstr "ketika menulis bitmap blok" #: misc/e2image.c:198 #, fuzzy msgid "error in generic_write()" -msgstr "Penghurai ASN1: Ralat menghurai generik." +msgstr "ralat menulis" #: misc/e2image.c:215 msgid "Error: header size is bigger than wrt_size\n" @@ -4643,7 +4633,7 @@ msgstr "" #: 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:599 misc/e2image.c:639 #, fuzzy @@ -4778,7 +4768,7 @@ msgstr "" #: misc/e2image.c:1596 #, fuzzy msgid "checking if mounted" -msgstr " Dilekapkan pada\n" +msgstr "Dilekapkan pada" #: misc/e2image.c:1603 msgid "" @@ -4800,17 +4790,17 @@ msgstr "Keluaran:\n" #: misc/e2image.c:1673 #, fuzzy, c-format msgid "Image (%s) is compressed\n" -msgstr "Imej" +msgstr "Terdapat ralat memuatkan gambar bulan: %s" #: misc/e2image.c:1676 #, fuzzy, c-format msgid "Image (%s) is encrypted\n" -msgstr "_Kerangka pada fail imej:" +msgstr "Terdapat ralat memuatkan gambar bulan: %s" #: misc/e2image.c:1679 #, fuzzy, c-format msgid "Image (%s) is corrupted\n" -msgstr "_Kerangka pada fail imej:" +msgstr "Terdapat ralat memuatkan gambar bulan: %s" #: misc/e2image.c:1683 #, c-format @@ -4862,7 +4852,7 @@ msgstr "e2label: ralat membaca superblok\n" #: misc/e2label.c:72 #, fuzzy, c-format msgid "e2label: not an ext2 filesystem\n" -msgstr "Sistem fail " +msgstr "sistemfail" #: misc/e2label.c:97 misc/tune2fs.c:3117 #, c-format @@ -4931,7 +4921,7 @@ msgstr "" #: misc/e2undo.c:340 #, fuzzy, c-format msgid "illegal offset - %s" -msgstr "%s: opsyen tidak dibenarkan -- %c\n" +msgstr "%s: pilihan salah -- %c\n" #: misc/e2undo.c:364 #, c-format @@ -4984,7 +4974,7 @@ msgstr "" #, 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" +msgstr "ketika menentukan sama ada %s telah dilekapkan." #: misc/e2undo.c:439 msgid "e2undo should only be run on unmounted filesystems" @@ -4999,7 +4989,7 @@ msgstr "ketika membuka %s" #: misc/e2undo.c:466 #, fuzzy msgid "specified offset is too large" -msgstr "%s adalah terlalu besar" +msgstr "nombor token terlalu besar" #: misc/e2undo.c:507 #, fuzzy @@ -5104,7 +5094,7 @@ msgstr "" msgid "" "\n" "%11Lu: finished with errno %d\n" -msgstr "Program tempatan [%d] selesai." +msgstr "Selesai dengan %s (status keluar %d)\n" #: misc/fsck.c:343 #, c-format @@ -5253,7 +5243,7 @@ msgstr "" #, fuzzy, c-format #| msgid "Usage: %s [-RVadlv] [files...]\n" msgid "Usage: %s [-RVadlpv] [files...]\n" -msgstr "Penggunaan: %s [-RVadlv] [fail...]\n" +msgstr "Penggunaan: %s [PILIHAN]... FAIL\n" #: misc/lsattr.c:86 #, c-format @@ -5324,7 +5314,7 @@ msgstr "" #: misc/mke2fs.c:343 #, fuzzy msgid "while marking bad blocks as used" -msgstr "ketika membaca dalam senarai blok buruk dari fail" +msgstr "ketika memeriksa kewarasan blok inode buruk" #: misc/mke2fs.c:368 #, fuzzy @@ -5432,7 +5422,7 @@ msgstr "Label sistemfail=%s\n" #: misc/mke2fs.c:681 #, fuzzy, c-format msgid "OS type: %s\n" -msgstr "Jenis OS:" +msgstr "OS tidak diketahui - %s" #: misc/mke2fs.c:683 #, c-format @@ -5442,7 +5432,7 @@ msgstr "Saiz blok=%u (log=%u)\n" #: misc/mke2fs.c:686 #, fuzzy, c-format msgid "Cluster size=%u (log=%u)\n" -msgstr "Saiz blok=%u (log=%u)\n" +msgstr "Saiz pecahan=%u (log=%u)\n" #: misc/mke2fs.c:690 #, c-format @@ -5457,7 +5447,7 @@ msgstr "" #: 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:696 #, c-format @@ -5517,7 +5507,7 @@ msgstr "" #: misc/mke2fs.c:822 #, fuzzy, c-format msgid "%s requires '-O 64bit'\n" -msgstr "Pilihan \"%s\" memerlukan hujah" +msgstr "%s: pilihan `%s' memerlukan hujah\n" #: misc/mke2fs.c:828 #, c-format @@ -5548,7 +5538,7 @@ msgstr "jarakmasa `%s' tidak sah" #, fuzzy, c-format #| msgid "Invalid superblock parameter: %s\n" msgid "Invalid # of backup superblocks: %s\n" -msgstr "tak dapat backup %s" +msgstr "%s: Tak dapat backup fail ini" #: misc/mke2fs.c:920 #, c-format @@ -5576,7 +5566,7 @@ msgstr "" #: misc/mke2fs.c:1015 misc/mke2fs.c:1024 #, fuzzy, c-format msgid "Invalid root_owner: '%s'\n" -msgstr "Pemilik tidak sah" +msgstr "Ralat mencipta root @d (%s): %m\n" #: misc/mke2fs.c:1069 #, fuzzy, c-format @@ -6051,7 +6041,7 @@ msgstr " Blok bebas: " #: misc/mke2fs.c:2804 #, fuzzy msgid "failed - " -msgstr "GAGAL" +msgstr "Gagal" #: misc/mke2fs.c:2863 #, fuzzy @@ -6186,7 +6176,7 @@ msgstr "Mengosongkan peranti jurnal:" #: misc/mke2fs.c:3379 #, fuzzy msgid "while populating file system" -msgstr "Ralat apabila membaca fail." +msgstr "Abai fail tetapan sistem" #: misc/mke2fs.c:3386 msgid "Writing superblocks and filesystem accounting information: " @@ -6218,7 +6208,7 @@ msgstr "" #: misc/mk_hugefiles.c:583 #, fuzzy msgid "Huge files will be zero'ed\n" -msgstr "Salinan fail" +msgstr "Ke Fail" #: misc/mk_hugefiles.c:584 #, fuzzy, c-format @@ -6358,19 +6348,19 @@ msgid "Please run `resize2fs %s %s" msgstr "ketika cuba untuk melaksana '%s'" #: misc/tune2fs.c:493 -#, fuzzy, c-format +#, c-format msgid " -z \"%s\"" -msgstr "@E mempunyai nama @z.\n" +msgstr " -z \"%s\"" #: misc/tune2fs.c:495 #, fuzzy, c-format msgid "' to enable 64-bit mode.\n" -msgstr "Aktifkan gantungan" +msgstr "enable/disable" #: misc/tune2fs.c:497 #, fuzzy, c-format msgid "' to disable 64-bit mode.\n" -msgstr "enable/disable" +msgstr "MOD" #: misc/tune2fs.c:1035 msgid "" @@ -6437,7 +6427,7 @@ msgstr "" #: misc/tune2fs.c:1174 #, fuzzy msgid "while reading MMP block." -msgstr "ketika menulis bitmap blok" +msgstr "Ralat apabila membaca fail." #: misc/tune2fs.c:1206 msgid "" @@ -6703,7 +6693,7 @@ msgstr "" #: misc/tune2fs.c:2622 #, fuzzy msgid "Failed to read inode bitmap\n" -msgstr ", Bitmap inode di" +msgstr "ketika menulis inod bitmap" #: misc/tune2fs.c:2627 #, fuzzy @@ -6784,7 +6774,7 @@ msgstr "" #: misc/tune2fs.c:3009 #, fuzzy, c-format msgid "Recovering journal.\n" -msgstr "ketika mendapatkan semula jurnal ext3 bagi %s" +msgstr "jurnal" #: misc/tune2fs.c:3028 #, c-format @@ -6915,7 +6905,7 @@ msgstr "Menetapkan saiz inod %lu\n" #: 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:3310 #, c-format @@ -7032,18 +7022,9 @@ msgid " %s [-r|t] [-n num] [-s socketpath]\n" msgstr "" #: misc/uuidd.c:53 -#, fuzzy, c-format +#, c-format msgid " %s -k\n" -msgstr "" -" --prologue=FAIL masukkan FAIL.pro sebagai prolog PostScript\n" -" --ppd[=KEKUNCI] pilihan PPD automatik atau tetapkan kepada KEKUNCI\n" -" -n, --copies=NOM cetak NOM salinan bagi setiap laman\n" -" -s, --sides=MOD tetapkan MOD dupleks (`1' atau `simplex',\n" -" `2' atau `duplex', `tumble')\n" -" -S, --setpagedevice=K[:V] hantar laman definisi alat kepada keluaran\n" -" --statusdict=K[:[:]V] hantar definisi statusdict kepada keluaran\n" -" -k, --page-prefeed hidupkan laman prasuap\n" -" -K, --no-page-prefeed matikan laman prasuap\n" +msgstr " %s -k\n" #: misc/uuidd.c:155 #, fuzzy @@ -7053,7 +7034,7 @@ msgstr "Sijil buruk" #: misc/uuidd.c:173 #, fuzzy msgid "connect" -msgstr "IDENT: connect() gagal: %s." +msgstr "IDENT: connect() gagal" #: misc/uuidd.c:192 #, fuzzy @@ -7068,7 +7049,7 @@ msgstr "Kiraan Perkataan" #: misc/uuidd.c:206 #, fuzzy msgid "bad response length" -msgstr "Panjang stride tidak sah" +msgstr "panjang pita tidak sah" #: misc/uuidd.c:271 #, c-format @@ -7103,7 +7084,7 @@ msgstr "" #: misc/uuidd.c:381 #, fuzzy, c-format msgid "Generated time UUID: %s\n" -msgstr "tak memperolehi setem masa bagi %s" +msgstr "masa dalam %s: %ld.%06ld (%ld%%)\n" #: misc/uuidd.c:391 #, c-format @@ -7124,7 +7105,7 @@ msgstr "Format UUID tidak sah\n" #: misc/uuidd.c:433 #, fuzzy, c-format msgid "Invalid operation %d\n" -msgstr "nilai $ tidak sah: %d" +msgstr "Nyahbuat tindakan terakhir" #: misc/uuidd.c:477 misc/uuidd.c:499 #, fuzzy, c-format @@ -7245,7 +7226,7 @@ msgstr "" #: resize/main.c:507 #, fuzzy, c-format msgid "Invalid new size: %s\n" -msgstr "%s: fail saiz tidak sah" +msgstr "saiz blok tidak sah - %s" #: resize/main.c:526 msgid "New size too large to be expressed in 32 bits\n" @@ -7310,12 +7291,12 @@ msgstr "Sistemfail telah mempunyai jurnal.\n" #: resize/main.c:613 #, fuzzy, c-format msgid "Converting the filesystem to 64-bit.\n" -msgstr "Sistem fail " +msgstr "sistemfail" #: resize/main.c:615 #, fuzzy, c-format msgid "Converting the filesystem to 32-bit.\n" -msgstr "Sistem fail " +msgstr "sistemfail" #: resize/main.c:617 #, c-format @@ -7344,7 +7325,7 @@ msgstr "" #: resize/main.c:650 #, fuzzy, c-format msgid "while trying to truncate %s" -msgstr "ketika cuba untuk melaksana '%s'" +msgstr "ketika cuba untuk memadam %s" #: resize/online.c:81 msgid "kernel does not support online resize with sparse_super2" @@ -7417,7 +7398,7 @@ msgstr "" #, fuzzy, c-format #| msgid "inodes (%llu) must be less than %u" msgid "inodes (%llu) must be less than %u\n" -msgstr "inod (%llu) mesti kurang dari %u" +msgstr "inode (%llu) mesti kurang dari %u" #: resize/resize2fs.c:1038 msgid "reserved blocks" @@ -7448,7 +7429,7 @@ msgstr "" #: lib/ext2fs/ext2_err.c:11 #, fuzzy msgid "EXT2FS Library version 1.45.3" -msgstr "Versi pustaka gcrypt terlalu lama." +msgstr "Versi pustaka tasn1 terlalu lama." #: lib/ext2fs/ext2_err.c:12 msgid "Wrong magic number for ext2_filsys structure" @@ -7563,12 +7544,12 @@ msgstr "" #: lib/ext2fs/ext2_err.c:38 #, fuzzy msgid "Can't write an inode bitmap" -msgstr ", Bitmap inode di" +msgstr "Tidak dapat menulis diluar daripada %s" #: lib/ext2fs/ext2_err.c:39 #, fuzzy msgid "Can't read an inode bitmap" -msgstr ", Bitmap inode di" +msgstr "ketika menulis inod bitmap" #: lib/ext2fs/ext2_err.c:40 #, fuzzy @@ -7583,9 +7564,7 @@ msgstr " Bitmap block di" #: lib/ext2fs/ext2_err.c:42 #, fuzzy msgid "Can't write an inode table" -msgstr "" -"\n" -" Jadual inode di" +msgstr "Tidak dapat menulis diluar daripada %s" #: lib/ext2fs/ext2_err.c:43 #, fuzzy @@ -7619,12 +7598,12 @@ msgstr "" #: lib/ext2fs/ext2_err.c:49 #, fuzzy msgid "No free space in the directory" -msgstr "ruang (i.e., ` ')" +msgstr "direktori" #: lib/ext2fs/ext2_err.c:50 #, fuzzy msgid "Inode bitmap not loaded" -msgstr ", Bitmap inode di" +msgstr "ketika menulis inod bitmap" #: lib/ext2fs/ext2_err.c:51 #, fuzzy @@ -7644,7 +7623,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 aliran data dalaman." +msgstr "Ralat dalaman GnuTLS." #: lib/ext2fs/ext2_err.c:55 msgid "Not enough space to build proposed filesystem" @@ -7789,7 +7768,7 @@ msgstr "Terlalu banyak ralat, keluar" #: lib/ext2fs/ext2_err.c:87 #, fuzzy msgid "File not found by ext2_lookup" -msgstr "Ralat ditemui dalam fail .nanorc" +msgstr "/@l tidak dijumpai." #: lib/ext2fs/ext2_err.c:88 #, fuzzy @@ -7804,7 +7783,7 @@ msgstr "Menulis bitmap blok" #: lib/ext2fs/ext2_err.c:90 #, fuzzy msgid "Ext2 directory already exists" -msgstr "tak dapat menyenaraikan direktori tersedia-tersenarai: %s" +msgstr "%s wujud tapi ianya bukan direktori" #: lib/ext2fs/ext2_err.c:91 msgid "Unimplemented ext2 library function" @@ -7813,7 +7792,7 @@ msgstr "" #: lib/ext2fs/ext2_err.c:92 #, fuzzy msgid "User cancel requested" -msgstr "pengguna" +msgstr "Batal" #: lib/ext2fs/ext2_err.c:93 #, fuzzy @@ -7875,7 +7854,7 @@ msgstr " Penghurai kumpulan di" #: lib/ext2fs/ext2_err.c:105 #, fuzzy msgid "Resize inode is corrupt" -msgstr "Tidak dapat mengubah saiz tetingkap bawah" +msgstr "ketika cuba untuk mengulangsaiz %s" #: lib/ext2fs/ext2_err.c:106 msgid "Tried to set block bmap with missing indirect block" @@ -7884,22 +7863,22 @@ msgstr "" #: lib/ext2fs/ext2_err.c:107 #, fuzzy msgid "TDB: Success" -msgstr "tdb_fetch %s gagal\n" +msgstr "Berjaya." #: lib/ext2fs/ext2_err.c:108 #, fuzzy msgid "TDB: Corrupt database" -msgstr "tdb_fetch %s gagal\n" +msgstr "Pengkalan data tidak dinyatakan" #: lib/ext2fs/ext2_err.c:109 #, fuzzy msgid "TDB: IO Error" -msgstr "tdb_open %s gagal\n" +msgstr "ralat" #: lib/ext2fs/ext2_err.c:110 #, fuzzy msgid "TDB: Locking error" -msgstr "tdb_open %s gagal\n" +msgstr "Ralat decode" #: lib/ext2fs/ext2_err.c:111 #, fuzzy @@ -7909,7 +7888,7 @@ msgstr "nano tidak cukup memori!" #: lib/ext2fs/ext2_err.c:112 #, fuzzy msgid "TDB: Record exists" -msgstr "tdb_open %s gagal\n" +msgstr "Rekod melimpah" #: lib/ext2fs/ext2_err.c:113 msgid "TDB: Lock exists on other keys" @@ -7928,7 +7907,7 @@ msgstr "pengguna %s tidak wujud" #: lib/ext2fs/ext2_err.c:116 #, fuzzy msgid "TDB: Write not permitted" -msgstr "tdb_fetch %s gagal\n" +msgstr "Tidak dapat menulis diluar daripada %s" #: lib/ext2fs/ext2_err.c:117 #, fuzzy @@ -8031,7 +8010,7 @@ msgstr "# Loggokan extent:\n" #: lib/ext2fs/ext2_err.c:138 #, fuzzy msgid "No 'down' extent" -msgstr "Turun" +msgstr "Skrol Bawah" #: lib/ext2fs/ext2_err.c:139 #, fuzzy @@ -8041,7 +8020,7 @@ msgstr "Tiada corak carian semasa" #: lib/ext2fs/ext2_err.c:140 #, fuzzy msgid "Ext2fs operation not supported" -msgstr "Arahan tidak disokong." +msgstr "Buat semula tindakan nyahbuat terakhir" #: lib/ext2fs/ext2_err.c:141 msgid "No room to insert extent in node" @@ -8063,7 +8042,7 @@ msgstr "" #: lib/ext2fs/ext2_err.c:145 #, fuzzy msgid "Extent length is invalid" -msgstr "panjang konteks `%s' tidak sah" +msgstr "Panjang stride tidak sah" #: lib/ext2fs/ext2_err.c:146 msgid "I/O Channel does not support 64-bit block numbers" @@ -8080,7 +8059,7 @@ msgstr "" #: lib/ext2fs/ext2_err.c:149 #, fuzzy msgid "MMP: invalid magic number" -msgstr "jumlah hujah tidak sah" +msgstr "nombor versi tidak sah `%s'" #: lib/ext2fs/ext2_err.c:150 msgid "MMP: device currently active" @@ -8152,7 +8131,7 @@ msgstr "Perkara yang sama bagi hujah pilihan.\n" #: lib/ext2fs/ext2_err.c:166 #, fuzzy msgid "Ext2 file already exists" -msgstr "File wujud, TULISGANTI ?" +msgstr "Fail `%s' telah pun dibaca.\n" #: lib/ext2fs/ext2_err.c:167 #, fuzzy @@ -8221,71 +8200,51 @@ msgstr "" #: lib/ext2fs/ext2_err.c:182 #, fuzzy msgid "Journal flags inconsistent" -msgstr "jurnal" +msgstr "ketika membaca penanda pada %s" #: lib/ext2fs/ext2_err.c:183 -#, fuzzy msgid "Undo file corrupt" -msgstr "Nyahbuat" +msgstr "Undur fail yang rosak" #: lib/ext2fs/ext2_err.c:184 -#, fuzzy msgid "Wrong undo file for this filesystem" -msgstr "Penggunaan: %s \n" +msgstr "Fail undur yang salah untuk sistem fail ini" #: lib/ext2fs/ext2_err.c:185 -#, fuzzy msgid "File system is corrupted" -msgstr "" -"\n" -"%s: ***** SISTEM FAIL TELAH DIUBAHSUAI *****\n" +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 "" -"\n" -" Jadual inode di" +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 "" -"\n" -"\n" -"\n" -"profil mendatar:\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 "Bahagian Bras" +msgstr "Seksyen profil tidak dijumpai" #: lib/support/prof_err.c:14 -#, fuzzy msgid "Profile relation not found" -msgstr "" -"\n" -"\n" -"\n" -"profil mendatar:\n" +msgstr "Kaitan profil tidak dijumpai" #: lib/support/prof_err.c:15 msgid "Attempt to add a relation to node which is not a section" @@ -8325,24 +8284,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 -#, fuzzy msgid "Syntax error in profile relation" -msgstr "ralat sintaks, tidak menjangka %s" +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" @@ -8357,23 +8315,20 @@ 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 -#, fuzzy msgid "No more sections" -msgstr "Lagi..." +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" diff --git a/po/zh_CN.po b/po/zh_CN.po index 3c90b92..7278f47 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -3,6 +3,7 @@ # Dark Raven , 2009. # zwpwjwtz , 2015. # Mingye Wang (Arthur2e5) , 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, @@ -28,7 +29,14 @@ #. 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 block number #. %B "indirect block" | "block #" string | string+integer #. %c block number @@ -68,18 +76,18 @@ #. 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: 2018-08-18 21:03-0400\n" -"PO-Revision-Date: 2016-11-24 23:49-0500\n" -"Last-Translator: Mingye Wang (Arthur2e5) \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) \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" @@ -96,12 +104,12 @@ msgstr "进行坏块inode的健全性检查时" msgid "while reading the bad blocks inode" msgstr "读取坏块inode时" -#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550 -#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259 +#: 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: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 +#: 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 时" @@ -125,9 +133,8 @@ msgid "Warning: illegal block %u found in bad block inode. Cleared.\n" msgstr "警告:在坏块inode中发现非法的块%u。已清除。\n" #: e2fsck/dirinfo.c:331 -#, fuzzy msgid "while freeing dir_info tdb file" -msgstr "读取坏撤销文件时" +msgstr "释放 dir_info tdb 文件时" #: e2fsck/ehandler.c:55 #, c-format @@ -204,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:1075 +#: 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:1081 resize/main.c:383 +#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383 #, c-format msgid "while trying to flush %s" msgstr "尝试刷新 %s 时" @@ -219,11 +226,11 @@ msgstr "尝试刷新 %s 时" msgid "while trying to open '%s'" msgstr "尝试打开 “%s” 时" -#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297 +#: 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:1316 +#: e2fsck/iscan.c:127 misc/e2image.c:1342 msgid "while getting next inode" msgstr "获取下一个inode时" @@ -246,7 +253,7 @@ msgstr "%s: 没有发现日志超级块\n" msgid "%s: journal too short\n" msgstr "%s: 日志过短\n" -#: e2fsck/journal.c:972 misc/fuse2fs.c:3786 +#: e2fsck/journal.c:972 misc/fuse2fs.c:3792 #, c-format msgid "%s: recovering journal\n" msgstr "%s:正在修复日志\n" @@ -480,21 +487,19 @@ msgstr "块 #" #: e2fsck/message.c:482 msgid "user" -msgstr "" +msgstr "用户" #: e2fsck/message.c:485 -#, fuzzy msgid "group" -msgstr "g组" +msgstr "组" #: e2fsck/message.c:488 msgid "project" msgstr "" #: e2fsck/message.c:491 -#, fuzzy msgid "unknown quota type" -msgstr "未知操作系统 - %s" +msgstr "未知配额类型" #: e2fsck/pass1b.c:222 msgid "multiply claimed inode map" @@ -519,86 +524,86 @@ msgstr "内部错误:无法查找 %llu 的EA块记录" msgid "internal error: couldn't lookup EA inode record for %u" msgstr "内部错误:无法查找 %u 的EA inode块记录" -#: e2fsck/pass1.c:356 +#: e2fsck/pass1.c:357 #, c-format msgid "while hashing entry with e_value_inum = %u" msgstr "" -#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005 +#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007 msgid "reading directory block" msgstr "正在读取目录块" -#: e2fsck/pass1.c:1223 +#: e2fsck/pass1.c:1224 msgid "in-use inode map" msgstr "使用中的inode映射" -#: e2fsck/pass1.c:1234 +#: e2fsck/pass1.c:1235 msgid "directory inode map" msgstr "目录inode映射" -#: e2fsck/pass1.c:1244 +#: e2fsck/pass1.c:1245 msgid "regular file inode map" msgstr "普通文件inode映射" -#: e2fsck/pass1.c:1253 misc/e2image.c:1272 +#: e2fsck/pass1.c:1254 misc/e2image.c:1282 msgid "in-use block map" msgstr "使用中的块映射" -#: e2fsck/pass1.c:1262 +#: e2fsck/pass1.c:1263 msgid "metadata block map" msgstr "元数据块映射" -#: e2fsck/pass1.c:1324 +#: e2fsck/pass1.c:1325 msgid "opening inode scan" msgstr "开始 inode 扫描" -#: e2fsck/pass1.c:1362 +#: e2fsck/pass1.c:1363 msgid "getting next inode from scan" msgstr "从扫描进度中获取下一个 inode" -#: e2fsck/pass1.c:2066 +#: e2fsck/pass1.c:2067 msgid "Pass 1" msgstr "第 1 步" -#: e2fsck/pass1.c:2127 +#: e2fsck/pass1.c:2128 #, c-format msgid "reading indirect blocks of inode %u" msgstr "读取inode为 %u 的链接块时" -#: e2fsck/pass1.c:2178 +#: e2fsck/pass1.c:2179 msgid "bad inode map" msgstr "坏块映射" -#: e2fsck/pass1.c:2218 +#: e2fsck/pass1.c:2219 msgid "inode in bad block map" msgstr "更新坏块映射时" -#: e2fsck/pass1.c:2238 +#: e2fsck/pass1.c:2239 msgid "imagic inode map" msgstr "inode的imagic映射" -#: e2fsck/pass1.c:2269 +#: e2fsck/pass1.c:2270 msgid "multiply claimed block map" msgstr "重叠块映射" -#: e2fsck/pass1.c:2394 +#: e2fsck/pass1.c:2395 msgid "ext attr block map" msgstr "扩展属性块映射" -#: e2fsck/pass1.c:3637 +#: 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:4054 +#: e2fsck/pass1.c:4060 msgid "block bitmap" msgstr "块位图" -#: e2fsck/pass1.c:4060 +#: e2fsck/pass1.c:4066 msgid "inode bitmap" msgstr "inode 位图" -#: e2fsck/pass1.c:4066 +#: e2fsck/pass1.c:4072 msgid "inode table" msgstr "inode表" @@ -606,7 +611,7 @@ msgstr "inode表" msgid "Pass 2" msgstr "第 2 步" -#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244 +#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246 msgid "Can not continue." msgstr "无法继续。" @@ -642,179 +647,187 @@ msgstr "check_inode_bitmap_checksum:内存分配出错" 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:112 +#: 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:116 +#: 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:121 +#: e2fsck/problem.c:124 msgid "" "@i table for @g %g is not in @g. (@b %b)\n" "WARNING: SEVERE DATA LOSS POSSIBLE.\n" @@ -831,7 +844,7 @@ msgstr "" #. @-expanded: or\n #. @-expanded: e2fsck -b 32768 \n #. @-expanded: \n -#: e2fsck/problem.c:127 +#: e2fsck/problem.c:130 msgid "" "\n" "The @S could not be read or does not describe a valid ext2/ext3/ext4\n" @@ -855,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:138 +#: 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" @@ -868,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:145 +#: e2fsck/problem.c:148 msgid "" "@S @b_size = %b, fragsize = %c.\n" "This version of e2fsck does not support fragment sizes different\n" @@ -879,18 +892,18 @@ msgstr "" "@b大小不同。\n" #. @-expanded: superblock blocks_per_group = %b, should have been %c\n -#: e2fsck/problem.c:152 +#: 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:157 +#: 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:162 +#: e2fsck/problem.c:165 msgid "" "@f did not have a UUID; generating one.\n" "\n" @@ -898,8 +911,8 @@ msgstr "" "@f没有UUID;正在创建新的UUID。\n" "\n" -#: e2fsck/problem.c:167 -#, 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" @@ -915,48 +928,48 @@ msgstr "" "\n" #. @-expanded: Corruption found in superblock. (%s = %N).\n -#: e2fsck/problem.c:176 +#: 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:181 -#, 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:186 +#: e2fsck/problem.c:191 msgid "@i count in @S is %i, @s %j.\n" msgstr "@S中的@i个数为 %i,@s %j。\n" -#: e2fsck/problem.c:190 +#: 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:195 -#, 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:200 +#: 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:205 +#: e2fsck/problem.c:211 msgid "Can't find external @j\n" msgstr "无法找到外部@j\n" #. @-expanded: External journal has bad superblock\n -#: e2fsck/problem.c:210 +#: 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:215 +#: e2fsck/problem.c:221 msgid "External @j does not support this @f\n" msgstr "外部@j不支持此@f\n" @@ -964,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:220 +#: 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" @@ -977,81 +989,81 @@ msgstr "" "\n" #. @-expanded: journal superblock is corrupt.\n -#: e2fsck/problem.c:228 +#: 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:233 +#: 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:238 +#: 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:243 +#: 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:248 +#: 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:253 e2fsck/problem.c:764 +#: 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:258 +#: 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:263 +#: 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:268 +#: 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:273 -#, 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:278 -#, 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:283 +#: 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:288 +#: 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:293 +#: 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:298 -#, c-format +#: e2fsck/problem.c:308 +#, no-c-format msgid "" "Moving @j from /%s to hidden @i.\n" "\n" @@ -1061,8 +1073,8 @@ msgstr "" #. @-expanded: Error moving journal: %m\n #. @-expanded: \n -#: e2fsck/problem.c:303 -#, c-format +#: e2fsck/problem.c:314 +#, no-c-format msgid "" "Error moving @j: %m\n" "\n" @@ -1073,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:308 +#: e2fsck/problem.c:319 msgid "" "Found @n V2 @j @S fields (from V1 @j).\n" "Clearing fields beyond the V1 @j @S...\n" @@ -1084,18 +1096,18 @@ msgstr "" "\n" #. @-expanded: Run journal anyway -#: e2fsck/problem.c:314 +#: 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:319 +#: 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:324 +#: e2fsck/problem.c:335 msgid "" "Backing up @j @i @b information.\n" "\n" @@ -1105,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:330 +#: e2fsck/problem.c:341 msgid "" "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n" "is %N; @s zero. " @@ -1114,18 +1126,18 @@ msgstr "" "(但实际为%N)。 " #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero. -#: e2fsck/problem.c:336 +#: 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:341 +#: 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:346 +#: e2fsck/problem.c:357 msgid "" "@S last mount time (%t,\n" "\tnow = %T) is in the future.\n" @@ -1135,7 +1147,7 @@ msgstr "" #. @-expanded: superblock last write time (%t,\n #. @-expanded: \tnow = %T) is in the future.\n -#: e2fsck/problem.c:351 +#: e2fsck/problem.c:362 msgid "" "@S last write time (%t,\n" "\tnow = %T) is in the future.\n" @@ -1144,14 +1156,14 @@ msgstr "" "\t当前:%T)在未来。 \n" #. @-expanded: superblock hint for external superblock should be %X. -#: e2fsck/problem.c:356 -#, 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:361 +#: e2fsck/problem.c:373 msgid "" "Adding dirhash hint to @f.\n" "\n" @@ -1160,43 +1172,42 @@ msgstr "" "\n" #. @-expanded: group descriptor %g checksum is %04x, should be %04y. -#: e2fsck/problem.c:366 +#: 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:371 -#, 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:376 +#: 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:381 +#: e2fsck/problem.c:394 msgid "Last @g @b @B uninitialized. " msgstr "最后一个@g的@b@B未初始化。 " -#: e2fsck/problem.c:386 -#, 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:391 +#: 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:396 +#: 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" @@ -1204,240 +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:402 +#: 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:408 +#: 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:413 +#: 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:418 +#: e2fsck/problem.c:432 msgid "Setting free @bs count to %c (was %b)\n" msgstr "设置未使用的@b数为 %c(曾为%b)\n" #. @-expanded: Hiding %U quota inode %i (%Q).\n -#: e2fsck/problem.c:423 +#: 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:428 +#: e2fsck/problem.c:442 msgid "@S has invalid MMP block. " msgstr "@S含有无效的MMP块。 " #. @-expanded: superblock has invalid MMP magic. -#: e2fsck/problem.c:433 +#: e2fsck/problem.c:447 msgid "@S has invalid MMP magic. " msgstr "@S含有无效的MMP幻数。 " -#: e2fsck/problem.c:438 -#, c-format +#: e2fsck/problem.c:453 +#, no-c-format msgid "ext2fs_open2: %m\n" msgstr "ext2fs_open2: %m\n" -#: e2fsck/problem.c:443 -#, 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:449 -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. -#: e2fsck/problem.c:455 -#, fuzzy +#: e2fsck/problem.c:471 msgid "@S MMP @b checksum does not match. " -msgstr "@S MMP块校验值与MMP块自身不符。" +msgstr "@S MMP @b 校验值不符。" #. @-expanded: superblock 64bit filesystem needs extents to access the whole disk. -#: e2fsck/problem.c:460 +#: 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:465 +#: 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:470 +#: 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:475 +#: 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:480 -#, 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:485 +#: e2fsck/problem.c:502 msgid "Bad required extra isize in @S (%N). " msgstr "" #. @-expanded: Bad desired extra isize in superblock (%N). -#: e2fsck/problem.c:490 +#: e2fsck/problem.c:507 msgid "Bad desired extra isize in @S (%N). " msgstr "" #. @-expanded: Invalid %U quota inode %i. -#: e2fsck/problem.c:495 -#, fuzzy +#: e2fsck/problem.c:512 msgid "Invalid %U @q @i %i. " -msgstr "@u@z@i %i。 " +msgstr "无效的 %U @q @i %i。 " #. @-expanded: superblock would have too many inodes (%N).\n -#: e2fsck/problem.c:500 +#: e2fsck/problem.c:517 msgid "@S would have too many inodes (%N).\n" -msgstr "" +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:505 +#: 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:513 +#: 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:517 +#: 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:522 +#: 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:527 +#: 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:532 -#, 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:537 -#, 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:542 -#, 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:547 +#: 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:552 +#: 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:557 +#: 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:562 +#: 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:567 +#: 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:572 +#: 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:577 +#: 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:582 +#: 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:587 +#: 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:592 -#, 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:597 -#, 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:602 +#: 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:607 +#: 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:612 +#: 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:617 +#: e2fsck/problem.c:639 msgid "Bad @b %b used as bad @b @i indirect @b. " msgstr "坏@b %b 被用作坏@b@i的链接@b。 " @@ -1445,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:622 +#: e2fsck/problem.c:644 msgid "" "\n" "The bad @b @i has probably been corrupted. You probably\n" @@ -1458,7 +1464,7 @@ msgstr "" #. @-expanded: \n #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n -#: e2fsck/problem.c:629 +#: e2fsck/problem.c:651 msgid "" "\n" "If the @b is really bad, the @f can not be fixed.\n" @@ -1469,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:634 +#: 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" @@ -1480,124 +1486,124 @@ msgstr "" "\n" #. @-expanded: The primary superblock (%b) is on the bad block list.\n -#: e2fsck/problem.c:640 +#: 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:645 +#: 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:651 +#: 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:657 +#: 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:663 +#: 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:669 +#: 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:674 -#, 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:679 +#: 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:684 -#, 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:689 +#: 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:694 +#: 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:699 e2fsck/problem.c:1776 +#: 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:704 +#: 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:709 -#, 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:714 -#, 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:719 -#, 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:724 -#, 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:729 +#: 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:734 +#: 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:740 -#, 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:748 -#, 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:753 -#, 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. " @@ -1606,198 +1612,198 @@ msgstr "" "(保护)或 a(仅追加) 标志。 " #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size. -#: e2fsck/problem.c:759 -#, 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:769 +#: 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:774 +#: 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:779 -#, 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:785 +#: 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:790 +#: 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:795 +#: 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:800 +#: 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:805 +#: 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:810 +#: 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:815 +#: 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:820 +#: 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:825 +#: e2fsck/problem.c:858 msgid "@A @a region allocation structure. " msgstr "构建外部属性区域的分配结构体时出错。" #. @-expanded: extended attribute block %b is corrupt (allocation collision). -#: e2fsck/problem.c:830 +#: 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:835 +#: 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:840 +#: 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:845 -#, 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:849 +#: e2fsck/problem.c:883 msgid "%B (%b) causes @d to be too big. " msgstr "%B(%b)造成@d过大。 " -#: e2fsck/problem.c:854 +#: e2fsck/problem.c:888 msgid "%B (%b) causes file to be too big. " msgstr "%B(%b)造成文件过大。 " -#: e2fsck/problem.c:859 +#: 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:864 -#, 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:869 -#, 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:874 -#, 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:879 +#: 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:884 -#, 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:889 +#: 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:895 +#: 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:901 -#, 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:906 +#: 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:911 +#: 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:916 +#: 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:921 +#: 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:926 +#: 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:931 +#: 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:936 +#: 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:941 -#, 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:946 +#: e2fsck/problem.c:986 msgid "" "Failed to iterate extents in @i %i\n" "\t(op %s, blk %b, lblk %c): %m\n" @@ -1807,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:952 +#: e2fsck/problem.c:992 msgid "" "@i %i has an @n extent\n" "\t(logical @b %c, @n physical @b %b, len %N)\n" @@ -1817,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:957 +#: e2fsck/problem.c:997 msgid "" "@i %i has an @n extent\n" "\t(logical @b %c, physical @b %b, @n len %N)\n" @@ -1826,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:962 -#, 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:967 -#, 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:972 -#, 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:977 -#, 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:982 +#: e2fsck/problem.c:1026 msgid "" "@i %i has out of order extents\n" "\t(@n logical @b %c, physical @b %b, len %N)\n" @@ -1859,40 +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:986 +#: 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:991 -#, 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 a regular file. -#: e2fsck/problem.c:996 -#, fuzzy +#: e2fsck/problem.c:1041 msgid "@q @i is not a regular file. " -msgstr "@q@i不是普通文件。 " +msgstr "@q @i 不是普通文件。 " #. @-expanded: quota inode is not in use, but contains data. -#: e2fsck/problem.c:1001 +#: 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:1006 +#: 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:1011 +#: 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:1016 +#: e2fsck/problem.c:1061 msgid "" "@i %i has zero length extent\n" "\t(@n logical @b %c, physical @b %b)\n" @@ -1901,26 +1906,26 @@ msgstr "" "\t(@n 逻辑@b %c,物理@b %b)\n" #. @-expanded: inode %i seems to contain garbage. -#: e2fsck/problem.c:1021 -#, 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:1026 -#, 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:1031 -#, 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:1039 +#: 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" @@ -1929,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:1048 +#: 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:1053 +#: 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 +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:1059 +#: 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,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:1064 -#, 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:1069 -#, 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:1076 -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:1081 +#: 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:1086 -#, 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:1091 +#: e2fsck/problem.c:1143 msgid "" "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n" "Will fix in pass 1B.\n" @@ -1993,15 +1998,15 @@ msgstr "" "将会在第 1B 步中进行修复。\n" #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found. -#: e2fsck/problem.c:1096 -#, 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:1102 -#, 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. " @@ -2010,42 +2015,42 @@ msgstr "" "extents 或内联数据标志。" #. @-expanded: inode %i has extent header but inline data flag is set.\n -#: e2fsck/problem.c:1108 -#, 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:1113 -#, 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:1118 -#, 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:1123 -#, 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:1128 +#: 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:1133 +#: 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:1138 +#: e2fsck/problem.c:1196 msgid "" "@i %i has a duplicate @x mapping\n" "\t(logical @b %c, @n physical @b %b, len %N)\n" @@ -2054,48 +2059,48 @@ msgstr "" "\t(逻辑块 %c,@n物理块@b %b,长度 %N)\n" #. @-expanded: error allocating memory for encrypted directory list\n -#: e2fsck/problem.c:1143 +#: 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:1148 +#: 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:1153 -#, 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:1158 -#, 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:1163 -#, 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:1168 -#, fuzzy +#: e2fsck/problem.c:1229 msgid "@i %i has @I @a value @i %N.\n" -msgstr "@i %i 有一个 @a@b %b。 " +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:1174 +#: 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:1179 +#: e2fsck/problem.c:1240 msgid "" "EA @i %N for parent @i %i missing EA_INODE flag.\n" " " @@ -2104,7 +2109,7 @@ 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:1187 +#: e2fsck/problem.c:1248 msgid "" "\n" "Running additional passes to resolve @bs claimed by more than one @i...\n" @@ -2115,46 +2120,46 @@ msgstr "" "第 1B 步:重新扫描@m @b\n" #. @-expanded: multiply-claimed block(s) in inode %i: -#: e2fsck/problem.c:1193 -#, c-format +#: e2fsck/problem.c:1255 +#, no-c-format msgid "@m @b(s) in @i %i:" msgstr "@m@b位于@i %i:" -#: e2fsck/problem.c:1208 -#, 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:1213 -#, 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:1218 -#, 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:1223 e2fsck/problem.c:1585 +#: 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:1233 +#: 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:1239 +#: 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:1244 +#: e2fsck/problem.c:1309 msgid "" "File %Q (@i #%i, mod time %IM) \n" " has %r @m @b(s), shared with %N file(s):\n" @@ -2163,18 +2168,18 @@ msgstr "" "与 %N 个文件共享 %r 个@m@b\n" #. @-expanded: \t%Q (inode #%i, mod time %IM)\n -#: e2fsck/problem.c:1250 +#: e2fsck/problem.c:1315 msgid "\t%Q (@i #%i, mod time %IM)\n" msgstr "\t%Q(@i #%i,修改时间 %IM)\n" #. @-expanded: \t\n -#: e2fsck/problem.c:1255 +#: 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:1260 +#: e2fsck/problem.c:1325 msgid "" "(There are %N @is containing @m @bs.)\n" "\n" @@ -2184,7 +2189,7 @@ msgstr "" #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n #. @-expanded: \n -#: e2fsck/problem.c:1265 +#: e2fsck/problem.c:1330 msgid "" "@m @bs already reassigned or cloned.\n" "\n" @@ -2192,346 +2197,347 @@ msgstr "" "@m@b已被重新分配或克隆。\n" "\n" -#: e2fsck/problem.c:1278 -#, 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:1284 +#: 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:1289 -#, 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:1294 +#: e2fsck/problem.c:1361 msgid "Optimizing @x trees: " msgstr "优化@x树:" -#: e2fsck/problem.c:1309 +#: 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:1314 +#: 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:1319 +#: 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:1326 +#: 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:1331 -#, 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:1336 +#: 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:1341 +#: 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:1346 +#: 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:1351 +#: 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:1356 +#: 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:1361 +#: 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:1366 +#: 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:1371 -#, 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:1376 -#, 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:1381 +#: 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:1386 +#: 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:1391 +#: 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:1396 +#: 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_size_high for inode %i (%Q) is %Id, should be zero.\n -#: e2fsck/problem.c:1401 +#: 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:1406 +#: 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:1411 +#: 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:1416 +#: 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:1421 +#: 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:1426 +#: 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:1431 +#: 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:1436 -#, 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:1441 -#, 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:1446 +#: 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:1451 +#: 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:1456 +#: 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:1461 +#: e2fsck/problem.c:1533 msgid "@E is duplicate '..' @e.\n" msgstr "@E为重复的“..”目录@e。\n" -#: e2fsck/problem.c:1466 e2fsck/problem.c:1801 -#, 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:1471 +#: 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:1476 -#, 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:1481 -#, 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:1486 +#: 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:1491 +#: 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:1496 -#, 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:1501 -#, 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:1506 -#, 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:1511 +#: 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:1516 +#: 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:1521 +#: 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:1526 +#: 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:1531 +#: 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:1536 +#: 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:1541 +#: 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:1546 +#: 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:1551 +#: 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:1556 +#: 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:1561 +#: 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:1566 +#: 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:1571 +#: 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:1576 +#: 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:1580 +#: 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:1590 -#, 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:1595 +#: 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:1600 +#: 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:1605 +#: 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:1610 +#: 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:1615 +#: 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:1620 +#: e2fsck/problem.c:1699 #, no-c-format msgid "" "@E has a non-unique filename.\n" @@ -2543,7 +2549,7 @@ msgstr "" #. @-expanded: Duplicate entry '%Dn' found.\n #. @-expanded: \tMarking %p (%i) to be rebuilt.\n #. @-expanded: \n -#: e2fsck/problem.c:1625 +#: e2fsck/problem.c:1704 msgid "" "Duplicate @e '%Dn' found.\n" "\tMarking %p (%i) to be rebuilt.\n" @@ -2554,155 +2560,156 @@ msgstr "" "\n" #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n -#: e2fsck/problem.c:1630 +#: 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:1635 +#: 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:1639 +#: 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:1644 +#: 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:1649 +#: 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:1654 -#, 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:1659 -#, 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:1664 +#: 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:1669 +#: 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:1674 +#: 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:1679 -#, 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:1684 +#: e2fsck/problem.c:1767 msgid "Encrypted @E is too short.\n" msgstr "加密的@E太短。\n" #. @-expanded: Pass 3: Checking directory connectivity\n -#: e2fsck/problem.c:1691 +#: e2fsck/problem.c:1774 msgid "Pass 3: Checking @d connectivity\n" msgstr "第 3 步:检查目录连接性\n" #. @-expanded: root inode not allocated. -#: e2fsck/problem.c:1696 +#: e2fsck/problem.c:1779 msgid "@r not allocated. " msgstr "@r未被分配。 " #. @-expanded: No room in lost+found directory. -#: e2fsck/problem.c:1701 +#: e2fsck/problem.c:1784 msgid "No room in @l @d. " msgstr "@l@d中没有空间。 " #. @-expanded: Unconnected directory inode %i (%p)\n -#: e2fsck/problem.c:1706 -#, 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:1711 +#: 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:1716 +#: 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:1721 +#: 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:1726 -#, c-format +#: e2fsck/problem.c:1812 +#, no-c-format msgid "Could not expand /@l: %m\n" msgstr "无法扩充/@l:%m\n" -#: e2fsck/problem.c:1731 -#, 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:1736 -#, 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:1741 -#, 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:1746 -#, 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:1751 -#, 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:1756 -#, 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:1761 -#, 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:1766 -#, c-format +#: e2fsck/problem.c:1860 +#, no-c-format msgid "" "Couldn't fix parent of @i %i: %m\n" "\n" @@ -2712,8 +2719,8 @@ msgstr "" #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n #. @-expanded: \n -#: e2fsck/problem.c:1771 -#, 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" @@ -2722,41 +2729,41 @@ msgstr "" "\n" #. @-expanded: Error creating root directory (%s): %m\n -#: e2fsck/problem.c:1781 -#, 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:1786 -#, 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:1791 +#: 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:1796 +#: 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:1806 -#, 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:1811 +#: 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:1816 +#: e2fsck/problem.c:1914 msgid "" "Cannot allocate space for /@l.\n" "Place lost files in root directory instead" @@ -2767,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:1821 +#: e2fsck/problem.c:1919 msgid "" "Insufficient space to recover lost files!\n" "Move data off the @f and re-run e2fsck.\n" @@ -2778,52 +2785,52 @@ msgstr "" "\n" #. @-expanded: /lost+found is encrypted\n -#: e2fsck/problem.c:1826 +#: e2fsck/problem.c:1924 msgid "/@l is encrypted\n" msgstr "/@l 已被加密\n" -#: e2fsck/problem.c:1833 +#: e2fsck/problem.c:1931 msgid "Pass 3A: Optimizing directories\n" msgstr "第 3A 步:优化目录\n" -#: e2fsck/problem.c:1838 -#, 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:1843 +#: e2fsck/problem.c:1942 msgid "Failed to optimize directory %q (%d): %m\n" msgstr "优化目录 %q(%d)失败:%m\n" -#: e2fsck/problem.c:1848 +#: e2fsck/problem.c:1947 msgid "Optimizing directories: " msgstr "优化目录: " -#: e2fsck/problem.c:1865 +#: e2fsck/problem.c:1964 msgid "Pass 4: Checking reference counts\n" msgstr "第 4 步:检查引用计数\n" #. @-expanded: unattached zero-length inode %i. -#: e2fsck/problem.c:1870 -#, 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:1875 -#, 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:1880 +#: 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:1884 +#: e2fsck/problem.c:1985 msgid "" "WARNING: PROGRAMMING BUG IN E2FSCK!\n" "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n" @@ -2834,149 +2841,148 @@ msgstr "" "@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:1891 +#: 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:1896 +#: 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:1903 +#: 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:1908 +#: 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:1913 +#: e2fsck/problem.c:2014 msgid "Padding at end of @b @B is not set. " msgstr "@b@B末尾的填充值未设置。 " #. @-expanded: block bitmap differences: -#: e2fsck/problem.c:1918 +#: e2fsck/problem.c:2019 msgid "@b @B differences: " msgstr "@b@B的差异: " #. @-expanded: inode bitmap differences: -#: e2fsck/problem.c:1938 +#: 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:1958 +#: 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:1963 +#: 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:1968 +#: 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:1973 +#: 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:1978 +#: 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:1983 -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:1989 +#: 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:1994 -#, 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:1999 -#, 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:2024 -#, 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:2029 -#, 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:2034 -#, 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:2039 -#, 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:2046 +#: e2fsck/problem.c:2161 msgid "Recreate @j" msgstr "重建@j" -#: e2fsck/problem.c:2051 +#: 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:2056 -#, 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:2061 -#, c-format +#: e2fsck/problem.c:2178 +#, no-c-format msgid "Error writing file system info: %m\n" msgstr "写入文件系统信息时出错:%m\n" -#: e2fsck/problem.c:2066 -#, c-format +#: e2fsck/problem.c:2184 +#, no-c-format msgid "Error flushing writes to storage device: %m\n" msgstr "将缓冲写入到存储设备:%m\n" -#: e2fsck/problem.c:2071 +#: e2fsck/problem.c:2189 msgid "Error writing quota info for quota type %N: %m\n" msgstr "写入配额类型 %N 的配额信息时出错:%m\n" -#: e2fsck/problem.c:2194 +#: e2fsck/problem.c:2352 #, c-format msgid "Unhandled error code (0x%x)!\n" msgstr "未处理的错误码 (0x%x)!\n" -#: e2fsck/problem.c:2320 e2fsck/problem.c:2324 +#: e2fsck/problem.c:2482 e2fsck/problem.c:2486 msgid "IGNORED" msgstr "已忽略" @@ -3003,14 +3009,14 @@ msgid "while doing inode scan" msgstr "进行inode扫描时" #: e2fsck/super.c:224 -#, fuzzy, c-format +#, c-format msgid "while calling ext2fs_block_iterate for inode %u" -msgstr "为inode %d 调用ext2fs_block_iterate时" +msgstr "为 inode %u 调用 ext2fs_block_iterate 时" #: e2fsck/super.c:249 -#, fuzzy, c-format +#, c-format msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u" -msgstr "为inode %d 调用ext2fs_adjust_ea_refcount2时" +msgstr "为 inode %u 调用 ext2fs_adjust_ea_refcount2 时" #: e2fsck/super.c:374 msgid "Truncating" @@ -3020,7 +3026,7 @@ msgstr "正在截断" msgid "Clearing" msgstr "正在清除" -#: e2fsck/unix.c:77 +#: e2fsck/unix.c:78 #, c-format msgid "" "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n" @@ -3031,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" @@ -3050,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" @@ -3068,12 +3073,12 @@ msgstr "" " -L bad_blocks_file 指定坏块列表(文件)\n" " -z undo_file 创建一个撤销文件\n" -#: e2fsck/unix.c:136 +#: 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:162 +#: e2fsck/unix.c:163 #, c-format msgid "" "\n" @@ -3085,46 +3090,46 @@ msgstr[0] "" "\n" "%12u 个已使用的inode(%2.2f%%,总共 %u)\n" -#: e2fsck/unix.c:166 +#: 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:171 +#: 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:176 +#: 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:184 +#: e2fsck/unix.c:185 msgid " Extent depth histogram: " msgstr " Extent深度直方图: " -#: e2fsck/unix.c:193 +#: 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:197 +#: e2fsck/unix.c:198 #, c-format msgid "%12u bad block\n" msgid_plural "%12u bad blocks\n" msgstr[0] "%12u 个坏块\n" -#: e2fsck/unix.c:199 +#: e2fsck/unix.c:200 #, c-format msgid "%12u large file\n" msgid_plural "%12u large files\n" msgstr[0] "%12u 个大文件\n" -#: e2fsck/unix.c:201 +#: e2fsck/unix.c:202 #, c-format msgid "" "\n" @@ -3136,96 +3141,96 @@ msgstr[0] "" "\n" "%12u 个普通文件\n" -#: e2fsck/unix.c:203 +#: e2fsck/unix.c:204 #, c-format msgid "%12u directory\n" msgid_plural "%12u directories\n" msgstr[0] "%12u 个文件夹\n" -#: e2fsck/unix.c:205 +#: 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:208 +#: 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:210 +#: e2fsck/unix.c:211 #, c-format msgid "%12u fifo\n" msgid_plural "%12u fifos\n" msgstr[0] "%12u 个队列文件\n" -#: e2fsck/unix.c:212 +#: e2fsck/unix.c:213 #, c-format msgid "%12u link\n" msgid_plural "%12u links\n" msgstr[0] "%12u 个链接\n" -#: e2fsck/unix.c:214 +#: e2fsck/unix.c:215 #, c-format msgid "%12u symbolic link" msgid_plural "%12u symbolic links" msgstr[0] "%12u 个符号链接" -#: e2fsck/unix.c:216 +#: 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:220 +#: e2fsck/unix.c:221 #, c-format msgid "%12u socket\n" msgid_plural "%12u sockets\n" msgstr[0] "%12u 个套接字文件\n" -#: e2fsck/unix.c:224 +#: e2fsck/unix.c:225 #, c-format msgid "%12u file\n" msgid_plural "%12u files\n" msgstr[0] "%12u 个文件\n" -#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126 +#: 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:258 +#: 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:261 +#: e2fsck/unix.c:262 #, c-format msgid "Warning! %s is in use.\n" msgstr "警告! %s正被使用。\n" -#: e2fsck/unix.c:267 +#: e2fsck/unix.c:268 #, c-format msgid "%s is mounted.\n" msgstr "%s 已挂载。\n" # Same as the above. -#: e2fsck/unix.c:269 +#: e2fsck/unix.c:270 #, c-format msgid "%s is in use.\n" msgstr "%s正被使用。\n" -#: e2fsck/unix.c:271 +#: e2fsck/unix.c:272 msgid "" "Cannot continue, aborting.\n" "\n" msgstr "无法继续,已中止。\n" -#: e2fsck/unix.c:273 +#: e2fsck/unix.c:274 msgid "" "\n" "\n" @@ -3239,86 +3244,96 @@ msgstr "" "使文件系统遭受 *** 严重损坏 ***!\n" "\n" -#: e2fsck/unix.c:278 +#: e2fsck/unix.c:279 msgid "Do you really want to continue" msgstr "你真的想要继续吗" -#: e2fsck/unix.c:280 +#: e2fsck/unix.c:281 msgid "check aborted.\n" msgstr "检查被中止。\n" -#: e2fsck/unix.c:374 +#: e2fsck/unix.c:375 msgid " contains a file system with errors" msgstr " 有一个含有错误的文件系统" -#: e2fsck/unix.c:376 +#: e2fsck/unix.c:377 msgid " was not cleanly unmounted" msgstr " 未被彻底卸载" -#: e2fsck/unix.c:378 +#: e2fsck/unix.c:379 msgid " primary superblock features different from backup" msgstr " 主超级块与备份超级块有差异" -#: e2fsck/unix.c:382 +#: e2fsck/unix.c:383 #, c-format msgid " has been mounted %u times without being checked" msgstr " 已被挂载 %u 次,但尚未被检查" -#: e2fsck/unix.c:389 +#: e2fsck/unix.c:390 msgid " has filesystem last checked time in the future" msgstr " 上一次检查的时间在未来" -#: e2fsck/unix.c:395 +#: e2fsck/unix.c:396 #, c-format msgid " has gone %u days without being checked" msgstr " 已超过 %u 未被检查" -#: e2fsck/unix.c:403 +#: e2fsck/unix.c:404 msgid "ignoring check interval, broken_system_clock set\n" msgstr "" -#: e2fsck/unix.c:409 +#: e2fsck/unix.c:410 msgid ", check forced.\n" msgstr ",强制进行检查。\n" -#: e2fsck/unix.c:442 +#: e2fsck/unix.c:443 #, c-format msgid "%s: clean, %u/%u files, %llu/%llu blocks" msgstr "%s:没有问题,%u/%u 文件,%llu/%llu 块" -#: e2fsck/unix.c:462 +#: e2fsck/unix.c:463 msgid " (check deferred; on battery)" msgstr " (正在使用电池;已推迟检查)" -#: e2fsck/unix.c:465 +#: e2fsck/unix.c:466 msgid " (check after next mount)" msgstr "(将于下次挂载时进行检查)" -#: e2fsck/unix.c:467 +#: e2fsck/unix.c:468 #, c-format msgid " (check in %ld mounts)" msgstr " (每挂载 %ld 次就进行检查)" -#: e2fsck/unix.c:617 +#: e2fsck/unix.c:618 #, c-format msgid "ERROR: Couldn't open /dev/null (%s)\n" msgstr "错误:无法打开/dev/null(%s)\n" -#: e2fsck/unix.c:688 +#: e2fsck/unix.c:689 msgid "Invalid EA version.\n" msgstr "无效的EA版本号。\n" -#: e2fsck/unix.c:701 +#: e2fsck/unix.c:702 msgid "Invalid readahead buffer size.\n" msgstr "预读取缓冲区大小无效。\n" -#: e2fsck/unix.c:750 +#: e2fsck/unix.c:757 #, c-format msgid "Unknown extended option: %s\n" msgstr "未知的扩展属性:%s\n" -#: e2fsck/unix.c:758 +#: 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=\n" +#| "\tblocksize=\n" msgid "" "\n" "Extended options are separated by commas, and may take an argument which\n" @@ -3334,16 +3349,15 @@ msgstr "" "\tsuperblock=<超级块编号>\n" "\tblocksize=<块大小>\n" -#: e2fsck/unix.c:762 +#: e2fsck/unix.c:769 msgid "\tea_ver=\n" -msgstr "" +msgstr "\tea_ver=\n" -#: e2fsck/unix.c:771 -#, fuzzy +#: e2fsck/unix.c:778 msgid "\treadahead_kb=\n" -msgstr "预读取缓冲区大小无效。\n" +msgstr "\treadahead_kb=<缓冲大小>\n" -#: e2fsck/unix.c:783 +#: e2fsck/unix.c:790 #, c-format msgid "" "Syntax error in e2fsck config file (%s, line #%d)\n" @@ -3352,55 +3366,55 @@ msgstr "" "e2fsck 配置文件中语法错误(%s,第 %d 行)\n" "\t%s\n" -#: e2fsck/unix.c:856 +#: e2fsck/unix.c:863 #, c-format msgid "Error validating file descriptor %d: %s\n" msgstr "验证文件描述符 %d 时出错:%s\n" -#: e2fsck/unix.c:860 +#: e2fsck/unix.c:867 msgid "Invalid completion information file descriptor" msgstr "无效的文件描述符信息" -#: e2fsck/unix.c:875 +#: 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:896 +#: 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:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330 -#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054 +#: 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:984 +#: e2fsck/unix.c:991 msgid "The -n and -D options are incompatible." msgstr "%s:-n 和 -D 选项是互相排斥的。" -#: e2fsck/unix.c:989 +#: e2fsck/unix.c:996 msgid "The -n and -c options are incompatible." msgstr "%s:-n 和 -c 选项是互相排斥的。" -#: e2fsck/unix.c:994 +#: e2fsck/unix.c:1001 msgid "The -n and -l/-L options are incompatible." msgstr "%s:-n 和 -l/-L 选项是相互排斥的。" -#: e2fsck/unix.c:1018 +#: e2fsck/unix.c:1025 msgid "The -D and -E fixes_only options are incompatible." msgstr "-D 和 -E fixes_only 选项是互相排斥的。" -#: e2fsck/unix.c:1024 +#: e2fsck/unix.c:1031 msgid "The -E bmap2extent and fixes_only options are incompatible." msgstr "-E bmap2extent 和 fixes_only 选项是互相排斥的。" -#: e2fsck/unix.c:1088 +#: 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:1135 +#: e2fsck/unix.c:1142 #, c-format msgid "" "E2FSCK_JBD_DEBUG \"%s\" not an integer\n" @@ -3409,7 +3423,7 @@ msgstr "" "E2FSCK_JBD_DEBUG “%s”不是整数\n" "\n" -#: e2fsck/unix.c:1144 +#: e2fsck/unix.c:1151 #, c-format msgid "" "\n" @@ -3420,33 +3434,31 @@ msgstr "" "-%c 接收到无效的非数值参数(“%s”)\n" "\n" -#: e2fsck/unix.c:1235 +#: 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:1252 e2fsck/unix.c:1257 +#: e2fsck/unix.c:1259 e2fsck/unix.c:1264 msgid "while checking MMP block" msgstr "检测 MMP 块时" -#: e2fsck/unix.c:1259 -#, fuzzy, c-format +#: 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 "" -"如果你确定文件系统并没有挂载到任何节点上,请运行:\n" -"“tune2fs -f -E clear_mmp {设备}”\n" +"如果您确定文件系统并没有挂载到任何节点上,请运行:\n" +"“tune2fs -f -E clear_mmp %s”\n" -#: e2fsck/unix.c:1275 +#: e2fsck/unix.c:1282 msgid "while reading MMP block" msgstr "读取 MMP 块时" -#: 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 +#: 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" @@ -3457,57 +3469,57 @@ msgstr "" " e2undo %s %s\n" "\n" -#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788 +#: 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:1362 misc/mke2fs.c:2679 resize/main.c:243 +#: 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:1405 +#: e2fsck/unix.c:1412 msgid "Error: ext2fs library version out of date!\n" msgstr "错误:ext2fs库版本过旧!\n" -#: e2fsck/unix.c:1412 +#: e2fsck/unix.c:1419 msgid "while trying to initialize program" msgstr "尝试初始化程序时" -#: e2fsck/unix.c:1435 +#: e2fsck/unix.c:1456 #, c-format msgid "\tUsing %s, %s\n" msgstr "\t使用 %s,%s\n" -#: e2fsck/unix.c:1447 +#: e2fsck/unix.c:1468 msgid "need terminal for interactive repairs" msgstr "需要在终端中进行交互式修复" -#: e2fsck/unix.c:1508 +#: e2fsck/unix.c:1529 #, c-format msgid "%s: %s trying backup blocks...\n" msgstr "%s:%s 尝试备份块\n" -#: e2fsck/unix.c:1510 +#: e2fsck/unix.c:1531 msgid "Superblock invalid," msgstr "超级块无效," -#: e2fsck/unix.c:1511 +#: e2fsck/unix.c:1532 msgid "Group descriptors look bad..." msgstr "组描述符似乎是错误的..." -#: e2fsck/unix.c:1521 +#: e2fsck/unix.c:1542 #, c-format msgid "%s: %s while using the backup blocks" msgstr "%s:尝试备份块时 %s" -#: e2fsck/unix.c:1525 +#: e2fsck/unix.c:1546 #, c-format msgid "%s: going back to original superblock\n" msgstr "%s:回到原先的超级块\n" -#: e2fsck/unix.c:1554 +#: 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" @@ -3517,105 +3529,108 @@ msgstr "" "(也有可能超级块已损坏)\n" "\n" -#: e2fsck/unix.c:1561 +#: e2fsck/unix.c:1582 msgid "Could this be a zero-length partition?\n" msgstr "分区长度为零吗?\n" -#: e2fsck/unix.c:1563 +#: 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:1569 +#: e2fsck/unix.c:1590 msgid "Possibly non-existent or swap device?\n" msgstr "" "可能为swap分区,或该设备不存在?\n" "\n" -#: e2fsck/unix.c:1571 +#: e2fsck/unix.c:1592 msgid "Filesystem mounted or opened exclusively by another program?\n" msgstr "文件系统可能已挂载,或正被其他程序独占使用?\n" -#: e2fsck/unix.c:1575 +#: e2fsck/unix.c:1596 msgid "Possibly non-existent device?\n" msgstr "可能该设备不存在?\n" -#: e2fsck/unix.c:1578 +#: 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:1592 +#: e2fsck/unix.c:1613 #, c-format msgid "%s: Trying to load superblock despite errors...\n" -msgstr "" +msgstr "%s:尽管有错误,仍然尝试读取超级块...\n" -#: e2fsck/unix.c:1667 +#: e2fsck/unix.c:1688 msgid "Get a newer version of e2fsck!" msgstr "请获取新版本的e2fsck!" -#: e2fsck/unix.c:1711 +#: e2fsck/unix.c:1749 #, c-format msgid "while checking journal for %s" msgstr "检查 %s 的日志时" -#: e2fsck/unix.c:1714 +#: e2fsck/unix.c:1752 msgid "Cannot proceed with file system check" msgstr "无法在系统检查时进行" -#: e2fsck/unix.c:1725 -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:1737 +#: e2fsck/unix.c:1775 #, c-format msgid "unable to set superblock flags on %s\n" msgstr "" "无法设置 %s 的超级块标志。\n" "\n" -#: e2fsck/unix.c:1743 +#: e2fsck/unix.c:1781 #, c-format msgid "Journal checksum error found in %s\n" msgstr "在 %s 中发现日志校验值错误\n" -#: e2fsck/unix.c:1747 +#: e2fsck/unix.c:1785 #, c-format msgid "Journal corrupted in %s\n" msgstr "%s 中的日志已损坏\n" -#: e2fsck/unix.c:1751 +#: e2fsck/unix.c:1789 #, c-format msgid "while recovering journal of %s" msgstr "恢复 %s 的日志时" -#: e2fsck/unix.c:1773 +#: e2fsck/unix.c:1811 #, c-format msgid "%s has unsupported feature(s):" msgstr "%s 有不被支持的特性:" -#: e2fsck/unix.c:1832 +#: 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:1835 +#: e2fsck/unix.c:1879 msgid "This doesn't bode well, but we'll try to go on...\n" msgstr "这并不是一个好预兆,然而我们将继续进行...\n" -#: e2fsck/unix.c:1875 +#: e2fsck/unix.c:1919 #, c-format msgid "Creating journal (%d blocks): " msgstr "创建日志(%d 个块):" -#: e2fsck/unix.c:1885 +#: e2fsck/unix.c:1929 msgid " Done.\n" msgstr "完毕。\n" -#: e2fsck/unix.c:1887 +#: e2fsck/unix.c:1931 msgid "" "\n" "*** journal has been regenerated ***\n" @@ -3623,38 +3638,38 @@ msgstr "" "\n" "*** 日志已被重建 ***\n" -#: e2fsck/unix.c:1893 +#: e2fsck/unix.c:1937 msgid "aborted" msgstr "已中止" -#: e2fsck/unix.c:1895 +#: e2fsck/unix.c:1939 #, c-format msgid "%s: e2fsck canceled.\n" msgstr "%s:e2fsck被取消。\n" -#: e2fsck/unix.c:1922 +#: e2fsck/unix.c:1966 msgid "Restarting e2fsck from the beginning...\n" msgstr "正在从头开始e2fsck...\n" -#: e2fsck/unix.c:1926 +#: e2fsck/unix.c:1970 msgid "while resetting context" msgstr "重置上下文时" -#: e2fsck/unix.c:1985 -#, fuzzy, c-format +#: e2fsck/unix.c:2029 +#, c-format msgid "" "\n" "%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n" msgstr "" "\n" -"%s:***** 文件系统已修改 *****\n" +"%s:***** 文件系统错误已修正 *****\n" -#: e2fsck/unix.c:1987 -#, fuzzy, c-format +#: e2fsck/unix.c:2031 +#, c-format msgid "%s: File system was modified.\n" -msgstr "文件系统已损坏" +msgstr "%s:文件系统已被修改。\n" -#: e2fsck/unix.c:1991 e2fsck/util.c:71 +#: e2fsck/unix.c:2035 e2fsck/util.c:71 #, c-format msgid "" "\n" @@ -3663,12 +3678,12 @@ msgstr "" "\n" "%s:***** 文件系统已修改 *****\n" -#: e2fsck/unix.c:1996 +#: e2fsck/unix.c:2040 #, c-format msgid "%s: ***** REBOOT SYSTEM *****\n" msgstr "%s:***** 请重新启动系统 *****\n" -#: e2fsck/unix.c:2006 e2fsck/util.c:77 +#: e2fsck/unix.c:2050 e2fsck/util.c:77 #, c-format msgid "" "\n" @@ -3683,7 +3698,7 @@ msgstr "" msgid "yY" msgstr "yY" -#: e2fsck/util.c:197 +#: e2fsck/util.c:197 misc/util.c:112 msgid "nN" msgstr "nN" @@ -3816,9 +3831,7 @@ msgid "while writing inode %lu in %s" msgstr "写入 %2$s 中的inode %1$lu 时" #: e2fsck/util.c:792 -msgid "" -"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is " -"running.\n" +msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n" msgstr "未预期的不连续性:文件系统在运行fsck时被修改。\n" #: misc/badblocks.c:75 @@ -3826,15 +3839,14 @@ msgid "done \n" msgstr "已完成 \n" #: misc/badblocks.c:100 -#, fuzzy, c-format +#, 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" +" [-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" @@ -3935,7 +3947,7 @@ msgstr "" msgid "during test data write, block %lu" msgstr "正在测试数据写入,位于块 %lu" -#: misc/badblocks.c:1007 misc/util.c:131 +#: misc/badblocks.c:1007 misc/util.c:134 #, c-format msgid "%s is mounted; " msgstr "%s 已经挂载; " @@ -3948,7 +3960,7 @@ msgstr "强制进行坏块处理。期望/etc/mtab中反映的并非真实情况 msgid "it's not safe to run badblocks!\n" msgstr "进行坏块处理有风险!\n" -#: misc/badblocks.c:1019 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 显然正被系统使用; " @@ -4027,230 +4039,227 @@ 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:79 misc/create_inode.c:118 +#: misc/create_inode.c:80 misc/create_inode.c:119 #, c-format msgid "while reading inode %u" msgstr "读取 inode %u 时" -#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352 -#: misc/create_inode.c:390 +#: 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:96 +#: misc/create_inode.c:97 #, c-format msgid "while linking \"%s\"" msgstr "链接“%s”时" -#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321 +#: 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:151 misc/create_inode.c:175 +#: misc/create_inode.c:152 misc/create_inode.c:176 #, c-format msgid "while listing attributes of \"%s\"" msgstr "尝试列出“%s”的属性时" -#: misc/create_inode.c:162 +#: misc/create_inode.c:163 #, c-format msgid "while opening inode %u" msgstr "打开 inode %u 时" -#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975 +#: 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:188 misc/create_inode.c:204 +#: 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:213 +#: misc/create_inode.c:214 #, c-format msgid "while writing attribute \"%s\" to inode %u" msgstr "写入标志“%s”到 inode %u 时" -#: misc/create_inode.c:223 +#: misc/create_inode.c:224 #, c-format msgid "while closing inode %u" msgstr "关闭 inode %u 时" -#: misc/create_inode.c:274 +#: misc/create_inode.c:275 #, c-format msgid "while allocating inode \"%s\"" msgstr "分配 inode“%s”时" -#: misc/create_inode.c:293 +#: misc/create_inode.c:294 #, c-format msgid "while creating inode \"%s\"" msgstr "创建 inode “%s”时" -#: misc/create_inode.c:359 +#: misc/create_inode.c:360 #, c-format msgid "while creating symlink \"%s\"" msgstr "创建符号链接“%s”时" -#: misc/create_inode.c:377 misc/create_inode.c:896 +#: misc/create_inode.c:378 misc/create_inode.c:963 #, c-format msgid "while looking up \"%s\"" msgstr "查找“%s”时" -#: misc/create_inode.c:397 +#: misc/create_inode.c:398 #, c-format msgid "while creating directory \"%s\"" msgstr "创建目录“%s”时" -#: misc/create_inode.c:625 +#: misc/create_inode.c:627 #, c-format msgid "while opening \"%s\" to copy" msgstr "打开“%s”并拷贝时" -#: misc/create_inode.c:739 +#: misc/create_inode.c:805 #, c-format msgid "while changing working directory to \"%s\"" msgstr "改变工作目录为“%s”时" -#: misc/create_inode.c:747 +#: 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:757 +#: misc/create_inode.c:825 #, c-format msgid "while lstat \"%s\"" msgstr "对“%s”进行lstat调用时" -#: misc/create_inode.c:808 +#: misc/create_inode.c:875 #, c-format msgid "while creating special file \"%s\"" msgstr "创建特殊文件“%s”时" -#: misc/create_inode.c:817 +#: misc/create_inode.c:884 msgid "malloc failed" msgstr "内存分配失败" -#: misc/create_inode.c:825 +#: misc/create_inode.c:892 #, c-format msgid "while trying to read link \"%s\"" msgstr "尝试读取链接“%s”时" -#: misc/create_inode.c:832 +#: misc/create_inode.c:899 msgid "symlink increased in size between lstat() and readlink()" msgstr "在执行 lstat() 和 readlink() 期间,符号链接的大小发生改变" -#: misc/create_inode.c:843 +#: misc/create_inode.c:910 #, c-format msgid "while writing symlink\"%s\"" msgstr "写入符号链接“%s”时" -#: misc/create_inode.c:854 +#: misc/create_inode.c:921 #, c-format msgid "while writing file \"%s\"" msgstr "写入文件“%s”时" -#: misc/create_inode.c:867 +#: misc/create_inode.c:934 #, c-format msgid "while making dir \"%s\"" msgstr "创建目录“%s”时" -#: misc/create_inode.c:885 +#: misc/create_inode.c:952 msgid "while changing directory" msgstr "改变目录时" -#: misc/create_inode.c:891 +#: misc/create_inode.c:958 #, c-format msgid "ignoring entry \"%s\"" msgstr "忽略项“%s”" -#: misc/create_inode.c:904 +#: misc/create_inode.c:971 #, c-format msgid "while setting inode for \"%s\"" msgstr "为“%s”设置 inode 时" -#: misc/create_inode.c:911 +#: misc/create_inode.c:978 #, c-format msgid "while setting xattrs for \"%s\"" msgstr "设置“%s”的 xattrs 时" -#: misc/create_inode.c:937 +#: misc/create_inode.c:1004 msgid "while saving inode data" msgstr "保存 inode 数据时" #: misc/dumpe2fs.c:56 -#, fuzzy, c-format -msgid "" -"Usage: %s [-bfghimxV] [-o superblock=] [-o blocksize=] device\n" -msgstr "" -"用法:%s [-bfghixV] [-o superblock=<超级块编号>] [-o blocksize=<块大小>] 设" -"备\n" +#, c-format +msgid "Usage: %s [-bfghimxV] [-o superblock=] [-o blocksize=] device\n" +msgstr "用法:%s [-bfghimxV] [-o superblock=<超级块编号>] [-o blocksize=<块大小>] 设备\n" #: misc/dumpe2fs.c:159 msgid "blocks" @@ -4368,7 +4377,7 @@ msgstr "输出坏块列表时" msgid "Bad blocks: %u" msgstr "坏块数:%u" -#: misc/dumpe2fs.c:373 misc/tune2fs.c:367 +#: misc/dumpe2fs.c:373 misc/tune2fs.c:373 msgid "while reading journal inode" msgstr "读取日志inode时" @@ -4393,16 +4402,16 @@ msgid "Couldn't find journal superblock magic numbers" msgstr "无法找到日志超级块的幻数" #: misc/dumpe2fs.c:468 -#, fuzzy msgid "failed to alloc MMP buffer\n" -msgstr "为缓冲区分配内存时" +msgstr "分配 MMP 缓冲失败\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:507 misc/mke2fs.c:798 misc/tune2fs.c:2073 +#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027 msgid "Couldn't allocate memory to parse options!\n" msgstr "无法为解析选项获取内存!\n" @@ -4438,12 +4447,12 @@ msgstr "" "\tsuperblock=<超级块编号>\n" "\tblocksize=<块大小>\n" -#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845 +#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889 #, c-format msgid "\tUsing %s\n" msgstr "\t使用 %s\n" -#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949 +#: 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" @@ -4451,210 +4460,208 @@ msgstr "找不到有效的文件系统超级块。\n" #: misc/dumpe2fs.c:716 #, c-format msgid "%s: MMP feature not enabled.\n" -msgstr "" +msgstr "%s: MMP 特性未启用。\n" #: misc/dumpe2fs.c:747 -#, fuzzy, c-format +#, c-format msgid "while trying to read '%s' bitmaps\n" -msgstr "重新尝试读取 %s 的位图时" +msgstr "尝试读取“%s”位图时\n" #: misc/dumpe2fs.c:756 msgid "" "*** Run e2fsck now!\n" "\n" msgstr "" +"*** 请立刻运行 e2fsck!\n" +"\n" #: misc/e2image.c:107 -#, fuzzy, c-format -msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n" -msgstr "用法:%s [ -r|Q ] [ -fr ] 设备 镜像文件\n" +#, c-format +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:109 +#: misc/e2image.c:110 #, c-format msgid " %s -I device image-file\n" msgstr " %s -I 设备 镜像文件\n" -#: misc/e2image.c:110 +#: 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:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185 +#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595 +#: misc/e2image.c:1194 msgid "while allocating buffer" msgstr "为缓冲区分配内存时" -#: misc/e2image.c:180 +#: misc/e2image.c:181 #, c-format msgid "Writing block %llu\n" msgstr "正在写入到块 %llu\n" -#: misc/e2image.c:194 +#: misc/e2image.c:195 #, c-format msgid "error writing block %llu" msgstr "写块 %llu 出错" -#: misc/e2image.c:197 +#: misc/e2image.c:198 msgid "error in generic_write()" msgstr "generic_write() 函数出错" -#: misc/e2image.c:214 +#: misc/e2image.c:215 msgid "Error: header size is bigger than wrt_size\n" msgstr "错误:头部大小超过wrt_size\n" -#: misc/e2image.c:219 +#: misc/e2image.c:220 msgid "Couldn't allocate header buffer\n" msgstr "无法为头缓冲区分配内存\n" -#: misc/e2image.c:247 +#: misc/e2image.c:248 msgid "while writing superblock" msgstr "写入超级块时" -#: misc/e2image.c:256 +#: misc/e2image.c:257 msgid "while writing inode table" msgstr "写入inode表时" -#: misc/e2image.c:264 +#: misc/e2image.c:265 msgid "while writing block bitmap" msgstr "写入块位图时" -#: misc/e2image.c:272 +#: misc/e2image.c:273 msgid "while writing inode bitmap" msgstr "写入inode位图时" -#: misc/e2image.c:506 +#: 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:518 +#: 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:559 +#: misc/e2image.c:568 #, c-format msgid "%llu / %llu blocks (%d%%)" msgstr "%llu / %llu 块(%d%%)" -#: misc/e2image.c:590 misc/e2image.c:630 +#: misc/e2image.c:599 misc/e2image.c:639 msgid "Copying " msgstr "正在拷贝 " -#: misc/e2image.c:627 -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:653 +#: misc/e2image.c:662 #, c-format msgid " %s remaining at %.2f MB/s" msgstr " 剩余 %s,速度 %.2f MB/s" -#: misc/e2image.c:665 misc/e2image.c:1195 +#: misc/e2image.c:674 misc/e2image.c:1204 #, c-format msgid "error reading block %llu" msgstr "读取块 %llu 错误" -#: misc/e2image.c:719 +#: misc/e2image.c:728 #, c-format msgid "Copied %llu / %llu blocks (%d%%) in %s " msgstr "已复制 %llu / %llu 块(%d%%),用时 %s " -#: misc/e2image.c:723 +#: misc/e2image.c:732 #, c-format msgid "at %.2f MB/s" msgstr "速度 %.2f MB/s" -#: misc/e2image.c:759 +#: misc/e2image.c:768 msgid "while allocating l1 table" msgstr "分配l1表时" -#: misc/e2image.c:804 +#: misc/e2image.c:813 msgid "while allocating l2 cache" msgstr "分配l2表时" -#: 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 "" -"警告:当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:1152 +#: misc/e2image.c:1161 msgid "while allocating ext2_qcow2_image" msgstr "为ext2_qcow2_image分配内存时" -#: misc/e2image.c:1159 +#: misc/e2image.c:1168 msgid "while initializing ext2_qcow2_image" msgstr "初始化ext2_qcow2_image时" -#: misc/e2image.c:1218 misc/e2image.c:1236 +#: misc/e2image.c:1227 misc/e2image.c:1245 msgid "Programming error: multiple sequential refcount blocks created!\n" msgstr "程序错误:创建了多重序列的引用计数块!\n" -#: misc/e2image.c:1276 +#: misc/e2image.c:1286 msgid "while allocating block bitmap" msgstr "写入块位图时" -#: misc/e2image.c:1285 +#: misc/e2image.c:1295 msgid "while allocating scramble block bitmap" msgstr "写入加扰块位图时" -#: misc/e2image.c:1292 +#: misc/e2image.c:1318 msgid "Scanning inodes...\n" msgstr "扫描inode中...\n" -#: misc/e2image.c:1304 +#: misc/e2image.c:1330 msgid "Can't allocate block buffer" msgstr "无法为块缓存分配内存" -#: misc/e2image.c:1343 misc/e2image.c:1357 +#: misc/e2image.c:1369 misc/e2image.c:1383 #, c-format msgid "while iterating over inode %u" msgstr "获取遍历inode %u 时" -#: misc/e2image.c:1389 +#: misc/e2image.c:1415 msgid "Raw and qcow2 images cannot be installed" msgstr "原始镜像和qcow2镜像无法被安装" -#: misc/e2image.c:1411 +#: misc/e2image.c:1437 msgid "error reading bitmaps" msgstr "读取位图时发生错误" -#: misc/e2image.c:1423 +#: misc/e2image.c:1449 msgid "while opening device file" msgstr "打开设备文件时" -#: misc/e2image.c:1434 +#: misc/e2image.c:1460 msgid "while restoring the image table" msgstr "存储镜像表时" -#: misc/e2image.c:1531 +#: 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:1537 +#: misc/e2image.c:1576 msgid "Offsets are only allowed with raw images." msgstr "偏移量只能用于原始镜像" -#: misc/e2image.c:1542 +#: misc/e2image.c:1581 msgid "Move mode is only allowed with raw images." msgstr "移动模式只能用于原始镜像" -#: misc/e2image.c:1547 +#: misc/e2image.c:1586 msgid "Move mode requires all data mode." msgstr "原始镜像需要完全数据模式。" -#: misc/e2image.c:1557 +#: misc/e2image.c:1596 msgid "checking if mounted" msgstr "检测其是否已挂载" -#: misc/e2image.c:1564 +#: misc/e2image.c:1603 msgid "" "\n" "Running e2image on a R/W mounted filesystem can result in an\n" @@ -4665,51 +4672,51 @@ msgstr "" "对可读写的文件系统上运行e2image可能导致镜像不连续,\n" "这样的镜像也无法用于调试。如果你确实需要这样做,请使用 -f 选项。\n" -#: misc/e2image.c:1618 +#: misc/e2image.c:1657 msgid "QCOW2 image can not be written to the stdout!\n" msgstr "无法写入qcow2镜像到标准输出!\n" -#: misc/e2image.c:1624 +#: misc/e2image.c:1663 msgid "Can not stat output\n" msgstr "无法对输出进行stat操作\n" -#: misc/e2image.c:1634 +#: misc/e2image.c:1673 #, c-format msgid "Image (%s) is compressed\n" msgstr "镜像(%s)已被压缩\n" -#: misc/e2image.c:1637 +#: misc/e2image.c:1676 #, c-format msgid "Image (%s) is encrypted\n" msgstr "镜像(%s)已被加密\n" -#: misc/e2image.c:1640 -#, fuzzy, c-format +#: misc/e2image.c:1679 +#, c-format msgid "Image (%s) is corrupted\n" -msgstr "镜像(%s)已被加密\n" +msgstr "镜像(%s)已损坏\n" -#: misc/e2image.c:1644 +#: 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:1654 +#: misc/e2image.c:1693 msgid "The -c option only supported in raw mode\n" msgstr "只有原始模式支持 -c 选项\n" -#: misc/e2image.c:1659 +#: misc/e2image.c:1698 msgid "The -c option not supported when writing to stdout\n" msgstr "写入到标准输出时无法使用 -c 选项\n" -#: misc/e2image.c:1666 +#: misc/e2image.c:1705 msgid "while allocating check_buf" msgstr "为check_buf分配内存时" -#: misc/e2image.c:1672 +#: misc/e2image.c:1711 msgid "The -p option only supported in raw mode\n" msgstr "只有原始模式支持 -p 选项\n" -#: misc/e2image.c:1682 +#: misc/e2image.c:1721 #, c-format msgid "%d blocks already contained the data to be copied\n" msgstr "%d 个块已包含需要被拷贝的数据\n" @@ -4739,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:3152 +#: misc/e2label.c:97 misc/tune2fs.c:3117 #, c-format msgid "Warning: label too long, truncating.\n" msgstr "警告:卷标太长,已截短。\n" @@ -4754,17 +4761,15 @@ msgstr "e2label:无法定位到superblock\n" msgid "e2label: error writing superblock\n" msgstr "e2label:写入超级块时出错\n" -#: misc/e2label.c:117 misc/tune2fs.c:1733 +#: misc/e2label.c:117 misc/tune2fs.c:1687 #, c-format msgid "Usage: e2label device [newlabel]\n" msgstr "用法:e2label 设备 [新卷标]\n" #: misc/e2undo.c:124 -#, fuzzy, c-format -msgid "" -"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] " -"\n" -msgstr "用法:%s [-f] [-h] [-n] [-v] <事务文件> <文件系统>\n" +#, c-format +msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] \n" +msgstr "用法:%s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <事务文件> <文件系统>\n" #: misc/e2undo.c:149 msgid "The file system superblock doesn't match the undo file.\n" @@ -4956,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 @@ -5041,9 +5042,7 @@ msgstr "" #: 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:918 @@ -5061,11 +5060,8 @@ msgid "--waiting-- (pass %d)\n" msgstr "--请稍候-- (第 %d 步)n\n" #: misc/fsck.c:1085 -msgid "" -"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n" -msgstr "" -"用法:fsck [-AMNPRTV] [ -C [ fd ] ] [-t 文件系统类型] [文件系统选项] [文件系" -"统 ...]\n" +msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n" +msgstr "用法:fsck [-AMNPRTV] [ -C [ fd ] ] [-t 文件系统类型] [文件系统选项] [文件系统 ...]\n" #: misc/fsck.c:1127 #, c-format @@ -5077,53 +5073,53 @@ msgstr "%s:设备过多\n" msgid "%s: too many arguments\n" msgstr "%s:参数过多\n" -#: misc/fuse2fs.c:3739 +#: misc/fuse2fs.c:3745 msgid "Mounting read-only.\n" msgstr "以只读模式挂载。\n" -#: misc/fuse2fs.c:3763 +#: misc/fuse2fs.c:3769 #, c-format msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n" msgstr "%s:允许用户分配所有块。这样做很危险!\n" -#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789 +#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795 #, c-format msgid "%s: %s.\n" msgstr "%s:%s。\n" -#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049 +#: 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:3798 +#: 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:3806 +#: misc/fuse2fs.c:3812 #, c-format msgid "%s: Writing to the journal is not supported.\n" msgstr "%s:不支持写入日志。\n" -#: misc/fuse2fs.c:3821 +#: misc/fuse2fs.c:3827 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n" msgstr "警告:正在挂载未经检查的文件系统,建议您先运行 e2fsck。\n" -#: misc/fuse2fs.c:3825 +#: misc/fuse2fs.c:3831 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n" msgstr "" "警告:尝试挂载次数超过最大值,建议您运行 e2fsck。\n" "\n" -#: misc/fuse2fs.c:3830 +#: misc/fuse2fs.c:3836 msgid "Warning: Check time reached; running e2fsck is recommended.\n" msgstr "警告:检查超时,建议您运行 e2fsck。\n" -#: misc/fuse2fs.c:3834 +#: misc/fuse2fs.c:3840 msgid "Orphans detected; running e2fsck is recommended.\n" msgstr "检测到孤立块;建议您运行 e2fsck。\n" -#: misc/fuse2fs.c:3838 +#: misc/fuse2fs.c:3844 msgid "Errors detected; running e2fsck is required.\n" msgstr "检测到错误;请运行 e2fsck。\n" @@ -5156,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" @@ -5212,9 +5207,8 @@ msgid "while marking bad blocks as used" msgstr "将坏块标记为已使用的" #: misc/mke2fs.c:368 -#, fuzzy msgid "while writing reserved inodes" -msgstr "写入配额 inode 时" +msgstr "写入预留 inode 时" #: misc/mke2fs.c:420 msgid "Writing inode tables: " @@ -5229,7 +5223,7 @@ msgstr "" "\n" "无法写入 %d 个块到起始于%llu的inode表:%s\n" -#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131 +#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214 msgid "done \n" msgstr "完成 \n" @@ -5400,73 +5394,102 @@ msgstr "文件系统UUID:%s\n" msgid "Superblock backups stored on blocks: " msgstr "超级块的备份存储于下列块: " -#: misc/mke2fs.c:820 +#: misc/mke2fs.c:822 #, c-format msgid "%s requires '-O 64bit'\n" msgstr "" "%s 需要“-O 64bit”选项\n" "\n" -#: misc/mke2fs.c:826 +#: misc/mke2fs.c:828 #, c-format msgid "'%s' must be before 'resize=%u'\n" msgstr "“%s”选项必须位于“resize=%u”之前\n" -#: misc/mke2fs.c:839 +#: misc/mke2fs.c:841 #, c-format msgid "Invalid desc_size: '%s'\n" msgstr "desc_size值无效:“%s”\n" -#: misc/mke2fs.c:853 +#: 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:865 +#: misc/mke2fs.c:867 #, c-format msgid "Invalid offset: %s\n" msgstr "无效的偏移量: %s\n" -#: misc/mke2fs.c:879 misc/tune2fs.c:2101 +#: misc/mke2fs.c:881 misc/tune2fs.c:2055 #, c-format msgid "Invalid mmp_update_interval: %s\n" msgstr "无效mmp更新间隔:%s\n" -#: misc/mke2fs.c:896 +#: misc/mke2fs.c:898 #, c-format msgid "Invalid # of backup superblocks: %s\n" msgstr "备份超级块编号无效:%s\n" -#: misc/mke2fs.c:918 +#: misc/mke2fs.c:920 #, c-format msgid "Invalid stride parameter: %s\n" msgstr "无效的步长参数:%s\n" -#: misc/mke2fs.c:933 +#: misc/mke2fs.c:935 #, c-format msgid "Invalid stripe-width parameter: %s\n" msgstr "无效的带宽参数:%s\n" -#: misc/mke2fs.c:956 +#: misc/mke2fs.c:958 #, c-format msgid "Invalid resize parameter: %s\n" msgstr "无效的改变大小参数:%s\n" -#: misc/mke2fs.c:963 +#: misc/mke2fs.c:965 msgid "The resize maximum must be greater than the filesystem size.\n" msgstr "所需改变的大小必须大于当前文件系统的大小。\n" -#: misc/mke2fs.c:987 +#: misc/mke2fs.c:989 msgid "On-line resizing not supported with revision 0 filesystems\n" msgstr "版本为0的文件系统不支持在线改变大小。\n" -#: misc/mke2fs.c:1013 misc/mke2fs.c:1022 +#: misc/mke2fs.c:1015 misc/mke2fs.c:1024 #, c-format msgid "Invalid root_owner: '%s'\n" msgstr "无效的根目录所有者:“%s”\n" -#: misc/mke2fs.c:1065 +#: 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=\n" +#| "\tnum_backup_sb=<0|1|2>\n" +#| "\tstride=\n" +#| "\tstripe-width=\n" +#| "\toffset=\n" +#| "\tresize=\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=:\n" +#| "\ttest_fs\n" +#| "\tdiscard\n" +#| "\tnodiscard\n" +#| "\tquotatype=\n" +#| "\n" msgid "" "\n" "Bad option(s) specified: %s\n" @@ -5488,6 +5511,8 @@ msgid "" "\ttest_fs\n" "\tdiscard\n" "\tnodiscard\n" +"\tencoding=\n" +"\tencoding_flags=\n" "\tquotatype=\n" "\n" msgstr "" @@ -5513,7 +5538,7 @@ msgstr "" "\tquotatype=<要启用的配额类型>\n" "\n" -#: misc/mke2fs.c:1090 +#: misc/mke2fs.c:1114 #, c-format msgid "" "\n" @@ -5525,7 +5550,17 @@ msgstr "" "\n" "\n" -#: misc/mke2fs.c:1135 +#: 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" @@ -5534,17 +5569,17 @@ msgstr "" "mke2fs配置文件中有语法错误(%s,第 %d 行)\n" "\t%s\n" -#: misc/mke2fs.c:1148 misc/tune2fs.c:1120 +#: misc/mke2fs.c:1192 misc/tune2fs.c:1068 #, c-format msgid "Invalid filesystem option set: %s\n" msgstr "设置了无效的文件系统选项:%s\n" -#: misc/mke2fs.c:1160 misc/tune2fs.c:411 +#: misc/mke2fs.c:1204 misc/tune2fs.c:417 #, c-format msgid "Invalid mount option set: %s\n" msgstr "设置了无效的挂载选项:%s\n" -#: misc/mke2fs.c:1296 +#: misc/mke2fs.c:1340 #, c-format msgid "" "\n" @@ -5553,7 +5588,7 @@ msgstr "" "\n" "你的mke2fs.conf文件中没有定义类型 %s 的文件系统。\n" -#: misc/mke2fs.c:1300 +#: misc/mke2fs.c:1344 msgid "" "You probably need to install an updated mke2fs.conf file.\n" "\n" @@ -5561,11 +5596,11 @@ msgstr "" "你可能需要升级mke2fs.conf文件。\n" "\n" -#: misc/mke2fs.c:1304 +#: misc/mke2fs.c:1348 msgid "Aborting...\n" msgstr "正在终止...\n" -#: misc/mke2fs.c:1345 +#: misc/mke2fs.c:1389 #, c-format msgid "" "\n" @@ -5576,156 +5611,154 @@ msgstr "" "警告:mke2fs.conf中未定义文件系统类型 %s\n" "\n" -#: misc/mke2fs.c:1527 +#: misc/mke2fs.c:1571 msgid "Couldn't allocate memory for new PATH.\n" msgstr "无法为新路径分配内存。\n" -#: misc/mke2fs.c:1564 +#: misc/mke2fs.c:1608 #, c-format msgid "Couldn't init profile successfully (error: %ld).\n" msgstr "无法成功初始化配置(错误:%ld)。\n" -#: misc/mke2fs.c:1597 +#: misc/mke2fs.c:1641 #, c-format msgid "invalid block size - %s" msgstr "无效的块大小 - %s" -#: misc/mke2fs.c:1601 +#: misc/mke2fs.c:1645 #, c-format msgid "Warning: blocksize %d not usable on most systems.\n" msgstr "警告:块大小 %d 在很多系统中不可用。\n" -#: misc/mke2fs.c:1617 +#: misc/mke2fs.c:1661 #, c-format msgid "invalid cluster size - %s" msgstr "无效的簇大小 - %s" -#: misc/mke2fs.c:1630 +#: misc/mke2fs.c:1674 msgid "'-R' is deprecated, use '-E' instead" msgstr "“-R” 选项已被废弃,请使用“-E”选项" -#: misc/mke2fs.c:1644 misc/tune2fs.c:1830 +#: misc/mke2fs.c:1688 misc/tune2fs.c:1784 #, c-format msgid "bad error behavior - %s" msgstr "出错行为有误 - %s" -#: misc/mke2fs.c:1656 +#: misc/mke2fs.c:1700 msgid "Illegal number for blocks per group" msgstr "非法的每组块数" -#: misc/mke2fs.c:1661 +#: misc/mke2fs.c:1705 msgid "blocks per group must be multiple of 8" msgstr "每组块数必须是8的倍数" -#: misc/mke2fs.c:1669 +#: misc/mke2fs.c:1713 msgid "Illegal number for flex_bg size" msgstr "非法的弹性组大小" -#: misc/mke2fs.c:1675 +#: misc/mke2fs.c:1719 msgid "flex_bg size must be a power of 2" msgstr "弹性组的大小必须是2的次方" -#: misc/mke2fs.c:1680 +#: 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:1690 +#: misc/mke2fs.c:1734 #, c-format msgid "invalid inode ratio %s (min %d/max %d)" msgstr "无效的inode比 %s(最小 %d /最大 %d)" -#: misc/mke2fs.c:1700 +#: misc/mke2fs.c:1744 #, c-format msgid "invalid inode size - %s" msgstr "无效的inode大小 - %s" -#: misc/mke2fs.c:1713 -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:1724 +#: misc/mke2fs.c:1768 msgid "in malloc for bad_blocks_filename" msgstr "为bad_blocks_filename分配内存时" -#: misc/mke2fs.c:1733 +#: misc/mke2fs.c:1777 #, c-format msgid "" "Warning: label too long; will be truncated to '%s'\n" "\n" msgstr "警告:卷标太长,已截短为“%s”\n" -#: misc/mke2fs.c:1742 +#: misc/mke2fs.c:1786 #, c-format msgid "invalid reserved blocks percent - %s" msgstr "无效的保留块百分比 - %s" -#: misc/mke2fs.c:1757 +#: misc/mke2fs.c:1801 #, c-format msgid "bad num inodes - %s" msgstr "错误的inode数 - %s" -#: misc/mke2fs.c:1770 +#: misc/mke2fs.c:1814 msgid "while allocating fs_feature string" msgstr "分配 fs_feature 字符串时" -#: misc/mke2fs.c:1787 +#: misc/mke2fs.c:1831 #, c-format msgid "bad revision level - %s" msgstr "错误的版本号 - %s" -#: misc/mke2fs.c:1792 +#: misc/mke2fs.c:1836 #, c-format msgid "while trying to create revision %d" msgstr "尝试创建版本 %d 时" -#: misc/mke2fs.c:1806 +#: misc/mke2fs.c:1850 msgid "The -t option may only be used once" msgstr "-t 选项只能被指定一次" -#: misc/mke2fs.c:1814 +#: misc/mke2fs.c:1858 msgid "The -T option may only be used once" msgstr "-T 选项只能被指定一次" -#: misc/mke2fs.c:1870 misc/mke2fs.c:3215 +#: 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:1876 +#: misc/mke2fs.c:1920 #, c-format msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n" msgstr "日志设备的块大小(%d)不能低于最小的块大小 %d\n" -#: misc/mke2fs.c:1882 +#: misc/mke2fs.c:1926 #, c-format msgid "Using journal device's blocksize: %d\n" msgstr "根据日志设备确定块大小:%d\n" -#: misc/mke2fs.c:1893 +#: misc/mke2fs.c:1937 #, c-format msgid "invalid blocks '%s' on device '%s'" msgstr "无效的块数“%s”于设备“%s”" -#: misc/mke2fs.c:1923 +#: misc/mke2fs.c:1967 msgid "filesystem" msgstr "文件系统" -#: misc/mke2fs.c:1941 resize/main.c:497 +#: misc/mke2fs.c:1985 resize/main.c:497 msgid "while trying to determine filesystem size" msgstr "尝试确定文件系统大小时" -#: misc/mke2fs.c:1947 +#: 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:1954 +#: 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" @@ -5736,50 +5769,48 @@ msgstr "" "\t执行fdisk后未被重新加载(分区正被占用)导致的。\n" "\t你可能需要重启后重新读取分区表。\n" -#: misc/mke2fs.c:1971 +#: misc/mke2fs.c:2015 msgid "Filesystem larger than apparent device size." msgstr "文件系统大小超过设备的实际大小。" -#: misc/mke2fs.c:1991 +#: misc/mke2fs.c:2035 msgid "Failed to parse fs types list\n" msgstr "解析文件系统类型列表失败\n" -#: misc/mke2fs.c:2040 +#: misc/mke2fs.c:2085 msgid "The HURD does not support the filetype feature.\n" msgstr "HURD 不支持文件类型。\n" -#: misc/mke2fs.c:2045 +#: misc/mke2fs.c:2090 msgid "The HURD does not support the huge_file feature.\n" msgstr "HURD 不支持大文件特性。\n" -#: misc/mke2fs.c:2050 +#: misc/mke2fs.c:2095 msgid "The HURD does not support the metadata_csum feature.\n" msgstr "HURD 不支持元数据校验值特性。\n" -#: misc/mke2fs.c:2055 -#, fuzzy +#: misc/mke2fs.c:2100 msgid "The HURD does not support the ea_inode feature.\n" -msgstr "HURD 不支持大文件特性。\n" +msgstr "HURD 不支持 ea_inode 特性。\n" -#: misc/mke2fs.c:2065 +#: misc/mke2fs.c:2110 msgid "while trying to determine hardware sector size" msgstr "尝试确定硬件扇区大小时" -#: misc/mke2fs.c:2071 +#: misc/mke2fs.c:2116 msgid "while trying to determine physical sector size" msgstr "尝试确定物理扇区大小时" -#: misc/mke2fs.c:2103 +#: misc/mke2fs.c:2148 msgid "while setting blocksize; too small for device\n" msgstr "设置块大小时;对于设备来说太小\n" -#: misc/mke2fs.c:2108 +#: 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:2132 +#: misc/mke2fs.c:2177 #, c-format msgid "" "%s: Size of device (0x%llx blocks) %s too big to be expressed\n" @@ -5788,8 +5819,11 @@ msgstr "" "%1$s:设备 %3$s 的尺寸(0x%2$llx 个块)太大,无法用32位数表示\n" "\t改为使用 %4$d 的块大小。\n" -#: misc/mke2fs.c:2144 +#: 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" @@ -5797,80 +5831,82 @@ msgstr "" "%1$s:设备 %3$s 的尺寸(0x%2$llx 个块)太大,无法用32位数表示\n" "\t改为使用 %4$d 的块大小。\n" -#: misc/mke2fs.c:2166 +#: misc/mke2fs.c:2213 msgid "fs_types for mke2fs.conf resolution: " msgstr "mke2fs.conf中有关文件系统类型的解释: " -#: misc/mke2fs.c:2173 +#: misc/mke2fs.c:2220 msgid "Filesystem features not supported with revision 0 filesystems\n" msgstr "" "版本为0的文件系统不支持这些特性\n" "\n" -#: misc/mke2fs.c:2181 +#: misc/mke2fs.c:2228 msgid "Sparse superblocks not supported with revision 0 filesystems\n" msgstr "版本为0的文件系统不支持分散式超级块\n" -#: misc/mke2fs.c:2191 +#: misc/mke2fs.c:2238 msgid "Journals not supported with revision 0 filesystems\n" msgstr "版本为0的文件系统不支持日志\n" -#: misc/mke2fs.c:2204 +#: misc/mke2fs.c:2251 #, c-format msgid "invalid reserved blocks percent - %lf" msgstr "无效的保留块百分比 - %lf" -#: misc/mke2fs.c:2221 -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:2241 +#: misc/mke2fs.c:2288 msgid "The cluster size may not be smaller than the block size.\n" msgstr "簇大小不能小于块大小。\n" -#: misc/mke2fs.c:2247 +#: misc/mke2fs.c:2294 msgid "specifying a cluster size requires the bigalloc feature" msgstr "指定簇大小需要启用bigalloc特性" -#: misc/mke2fs.c:2267 +#: misc/mke2fs.c:2314 #, c-format msgid "warning: Unable to get device geometry for %s\n" msgstr "警告:无法获取 %s 的设备布局\n" -#: misc/mke2fs.c:2270 +#: misc/mke2fs.c:2317 #, c-format msgid "%s alignment is offset by %lu bytes.\n" msgstr "%s 未对齐,偏移了 %lu 个字节。\n" -#: misc/mke2fs.c:2272 +#: 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:2293 +#: misc/mke2fs.c:2340 #, c-format msgid "%d-byte blocks too big for system (max %d)" msgstr "%d字节的块对于系统来说太大(最大为 %d)" -#: misc/mke2fs.c:2297 +#: 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:2305 +#: 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 "" + +#: misc/mke2fs.c:2409 +#, c-format +msgid "Unknown encoding flags from profile: %s" msgstr "" -"建议:使用 3.18 以上的 Linux 内核以提高元数据稳定性,以及使用日志校验值特" -"性。\n" -#: misc/mke2fs.c:2360 +#: misc/mke2fs.c:2434 #, c-format msgid "" "\n" @@ -5884,16 +5920,29 @@ msgstr "" "将创建含有 %llu 个块的文件系统,这可能与您的预期不服。\n" "\n" -#: misc/mke2fs.c:2375 +#: 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:2397 +#: 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:2404 +#: misc/mke2fs.c:2487 msgid "" "The resize_inode and meta_bg features are not compatible.\n" "They can not be both enabled simultaneously.\n" @@ -5901,7 +5950,7 @@ msgstr "" "resize_inode 和 meta_bg 特性不兼容。\n" "无法同时启用它们。\n" -#: misc/mke2fs.c:2412 +#: misc/mke2fs.c:2495 msgid "" "\n" "Warning: the bigalloc feature is still under development\n" @@ -5913,39 +5962,39 @@ msgstr "" "更多详情请参见 https://ext4.wiki.kernel.org/index.php/Bigalloc\n" "\n" -#: misc/mke2fs.c:2424 +#: misc/mke2fs.c:2507 msgid "reserved online resize blocks not supported on non-sparse filesystem" msgstr "非分散式文件系统不支持为在线调整大小设置保留块" -#: misc/mke2fs.c:2433 +#: misc/mke2fs.c:2516 msgid "blocks per group count out of range" msgstr "每组块数超过允许范围" -#: misc/mke2fs.c:2455 +#: misc/mke2fs.c:2538 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified" msgstr "弹性组特性未启用,所以无法指定弹性组尺寸" -#: misc/mke2fs.c:2467 +#: misc/mke2fs.c:2550 #, c-format msgid "invalid inode size %d (min %d/max %d)" msgstr "无效的inode大小 %d(最小 %d /最大 %d)" -#: misc/mke2fs.c:2482 +#: 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:2497 +#: misc/mke2fs.c:2580 #, c-format msgid "too many inodes (%llu), raise inode ratio?" msgstr "inode太多(%llu),是否提高inode比?" -#: misc/mke2fs.c:2504 +#: misc/mke2fs.c:2587 #, c-format msgid "too many inodes (%llu), specify < 2^32 inodes" msgstr "inode数量太多(%llu),请指定小于 2^32 的inode数" -#: misc/mke2fs.c:2518 +#: misc/mke2fs.c:2601 #, c-format msgid "" "inode_size (%u) * inodes_count (%u) too big for a\n" @@ -5956,78 +6005,69 @@ msgstr "" "\t的系统来说太大,请指定更高的inode比(使用 -i 选项)\n" "\t或更少的inode数(-N)。\n" -#: misc/mke2fs.c:2705 +#: misc/mke2fs.c:2788 msgid "Discarding device blocks: " msgstr "丢弃设备块: " -#: misc/mke2fs.c:2721 +#: misc/mke2fs.c:2804 msgid "failed - " msgstr "已失败 - " -#: misc/mke2fs.c:2780 +#: misc/mke2fs.c:2863 msgid "while initializing quota context" msgstr "初始化配额上下文时" -#: misc/mke2fs.c:2787 +#: misc/mke2fs.c:2870 msgid "while writing quota inodes" msgstr "写入配额 inode 时" -#: misc/mke2fs.c:2812 +#: misc/mke2fs.c:2895 #, c-format msgid "bad error behavior in profile - %s" msgstr "配置中的出错行为有误 - %s" -#: misc/mke2fs.c:2888 -#, fuzzy +#: misc/mke2fs.c:2971 msgid "in malloc for android_sparse_params" -msgstr "为bad_blocks_filename分配内存时" +msgstr "为 android_sparse_params 分配内存时" -#: misc/mke2fs.c:2902 +#: misc/mke2fs.c:2985 msgid "while setting up superblock" msgstr "设置superblock时" -#: 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 "" -"未启用 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: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" +#: 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:2933 +#: 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:2957 +#: misc/mke2fs.c:3040 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n" msgstr "舍弃成功,将会返回0值 - 跳过擦除inode表\n" -#: misc/mke2fs.c:3056 +#: misc/mke2fs.c:3139 #, c-format msgid "unknown os - %s" msgstr "未知操作系统 - %s" -#: misc/mke2fs.c:3119 +#: misc/mke2fs.c:3202 msgid "Allocating group tables: " msgstr "正在分配组表: " -#: misc/mke2fs.c:3127 +#: misc/mke2fs.c:3210 msgid "while trying to allocate filesystem tables" msgstr "尝试分配文件系统表时" -#: misc/mke2fs.c:3136 +#: misc/mke2fs.c:3219 msgid "" "\n" "\twhile converting subcluster bitmap" @@ -6035,30 +6075,30 @@ msgstr "" "\n" "\t转换子簇位图时" -#: misc/mke2fs.c:3142 +#: misc/mke2fs.c:3225 #, c-format msgid "%s may be further corrupted by superblock rewrite\n" msgstr "%s 可能因超级块被改写而损\n" -#: misc/mke2fs.c:3183 +#: misc/mke2fs.c:3266 #, c-format msgid "while zeroing block %llu at end of filesystem" msgstr "对文件系统末尾的块 %llu 填零时" -#: misc/mke2fs.c:3196 +#: misc/mke2fs.c:3279 msgid "while reserving blocks for online resize" msgstr "为在线改变大小保留块时" -#: misc/mke2fs.c:3208 misc/tune2fs.c:1538 +#: misc/mke2fs.c:3291 misc/tune2fs.c:1492 msgid "journal" msgstr "日志" -#: misc/mke2fs.c:3220 +#: misc/mke2fs.c:3303 #, c-format msgid "Adding journal to device %s: " msgstr "将日志添加到设备 %s: " -#: misc/mke2fs.c:3227 +#: misc/mke2fs.c:3310 #, c-format msgid "" "\n" @@ -6067,21 +6107,21 @@ msgstr "" "\n" "尝试将日志添加到设备 %s时" -#: 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 +#: 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:3238 +#: misc/mke2fs.c:3321 msgid "Skipping journal creation in super-only mode\n" msgstr "跳过创建日志的步骤(唯超级块模式)\n" -#: misc/mke2fs.c:3248 +#: misc/mke2fs.c:3331 #, c-format msgid "Creating journal (%u blocks): " msgstr "创建日志(%u 个块)" -#: misc/mke2fs.c:3257 +#: misc/mke2fs.c:3340 msgid "" "\n" "\twhile trying to create journal" @@ -6089,7 +6129,7 @@ msgstr "" "\n" "\t尝试创建日志时" -#: misc/mke2fs.c:3269 misc/tune2fs.c:1185 +#: misc/mke2fs.c:3352 misc/tune2fs.c:1133 msgid "" "\n" "Error while enabling multiple mount protection feature." @@ -6097,29 +6137,28 @@ msgstr "" "\n" "启用MMP特性失败。" -#: misc/mke2fs.c:3274 +#: 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:3290 +#: misc/mke2fs.c:3373 msgid "Copying files into the device: " msgstr "将文件复制到设备:" -#: misc/mke2fs.c:3296 +#: misc/mke2fs.c:3379 msgid "while populating file system" msgstr "于填充文件系统时" -#: misc/mke2fs.c:3303 +#: misc/mke2fs.c:3386 msgid "Writing superblocks and filesystem accounting information: " msgstr "写入超级块和文件系统账户统计信息: " -#: misc/mke2fs.c:3310 -#, fuzzy +#: misc/mke2fs.c:3393 msgid "while writing out and closing file system" -msgstr "对文件系统末尾的块 %llu 填零时" +msgstr "写出并关闭文件系统时" -#: misc/mke2fs.c:3313 +#: misc/mke2fs.c:3396 msgid "" "done\n" "\n" @@ -6129,30 +6168,30 @@ msgstr "" #: 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:514 +#: 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:581 +#: misc/mk_hugefiles.c:583 msgid "Huge files will be zero'ed\n" msgstr "将对大文件填零\n" -#: misc/mk_hugefiles.c:582 +#: misc/mk_hugefiles.c:584 #, c-format msgid "Creating %lu huge file(s) " msgstr "创建 %lu 个大文件" -#: misc/mk_hugefiles.c:584 +#: misc/mk_hugefiles.c:586 #, c-format msgid "with %llu blocks each" msgstr "每个使用 %llu 个块" -#: misc/mk_hugefiles.c:593 +#: misc/mk_hugefiles.c:595 #, c-format msgid "while creating huge file %lu" msgstr "创建大文件 %lu 时" @@ -6204,16 +6243,27 @@ 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: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: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" @@ -6241,16 +6291,25 @@ msgstr "日志超级块未找到!\n" msgid "while trying to open external journal" msgstr "尝试打开外部日志时" -#: misc/tune2fs.c:287 misc/tune2fs.c:2845 +#: misc/tune2fs.c:287 misc/tune2fs.c:2804 #, c-format msgid "%s is not a journal device.\n" msgstr "%s 不是日志设备。\n" -#: misc/tune2fs.c:297 misc/tune2fs.c:2856 +#: 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:321 +#: misc/tune2fs.c:327 msgid "" "Cannot locate journal device. It was NOT removed\n" "Use -f option to remove missing journal device.\n" @@ -6259,52 +6318,52 @@ msgstr "" "请使用 -f 选项来移除丢失的日志设备。\n" "\n" -#: misc/tune2fs.c:330 +#: misc/tune2fs.c:336 msgid "Journal removed\n" msgstr "日志已删除\n" -#: misc/tune2fs.c:374 +#: misc/tune2fs.c:380 msgid "while reading bitmaps" msgstr "读取位图时" -#: misc/tune2fs.c:382 +#: misc/tune2fs.c:388 msgid "while clearing journal inode" msgstr "读取坏块inode时" -#: misc/tune2fs.c:393 +#: misc/tune2fs.c:399 msgid "while writing journal inode" msgstr "写入日志inode时" -#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465 +#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471 msgid "(and reboot afterwards!)\n" msgstr "(并且过后重启!)\n" -#: misc/tune2fs.c:480 +#: misc/tune2fs.c:486 #, c-format msgid "After running e2fsck, please run `resize2fs %s %s" msgstr "在运行 e2fsck 后,请运行“resize2fs %s %s" -#: misc/tune2fs.c:483 +#: misc/tune2fs.c:489 #, c-format msgid "Please run `resize2fs %s %s" msgstr "请运行“resize2fs %s %s" -#: misc/tune2fs.c:487 +#: misc/tune2fs.c:493 #, c-format msgid " -z \"%s\"" msgstr " -z \"%s\"" -#: misc/tune2fs.c:489 +#: misc/tune2fs.c:495 #, c-format msgid "' to enable 64-bit mode.\n" msgstr "”来启用 64 位模式。\n" -#: misc/tune2fs.c:491 +#: misc/tune2fs.c:497 #, c-format msgid "' to disable 64-bit mode.\n" msgstr "”来禁用 64 位模式。\n" -#: misc/tune2fs.c:1087 +#: misc/tune2fs.c:1035 msgid "" "WARNING: Could not confirm kernel support for metadata_csum_seed.\n" " This requires Linux >= v4.4.\n" @@ -6312,29 +6371,29 @@ msgstr "" "警告:无法确定内核是否支持 metadata_csum_seed 特性。\n" " 该特性仅被 4.4 以上的 Linux 内核支持。\n" -#: misc/tune2fs.c:1123 +#: misc/tune2fs.c:1071 #, c-format msgid "Clearing filesystem feature '%s' not supported.\n" msgstr "移除不被支持的文件系统特性“%s”。\n" -#: misc/tune2fs.c:1129 +#: misc/tune2fs.c:1077 #, c-format msgid "Setting filesystem feature '%s' not supported.\n" msgstr "设置不被支持的文件系统特性“%s”。\n" -#: misc/tune2fs.c:1138 +#: 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:1146 +#: 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:1164 +#: misc/tune2fs.c:1112 msgid "" "Setting filesystem feature 'sparse_super' not supported\n" "for filesystems with the meta_bg feature enabled.\n" @@ -6342,100 +6401,89 @@ msgstr "" "启用了meta_bg特性的文件系统不支持“sparse_super”\n" "特性。\n" -#: misc/tune2fs.c:1177 +#: 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:1195 +#: 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:1204 +#: 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:1212 +#: misc/tune2fs.c:1160 msgid "Error while reading bitmaps\n" msgstr "读取位图时发生错误\n" -#: misc/tune2fs.c:1221 +#: 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:1226 +#: misc/tune2fs.c:1174 msgid "while reading MMP block." msgstr "读取MMP块时" -#: misc/tune2fs.c:1258 +#: 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:1269 +#: 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:1280 +#: misc/tune2fs.c:1228 msgid "Enabling checksums could take some time." msgstr "启用校验值需要花费一段时间。" -#: misc/tune2fs.c:1282 +#: misc/tune2fs.c:1230 msgid "Cannot enable metadata_csum on a mounted filesystem!\n" msgstr "无法在已挂载的文件系统上启用元数据校验特性!\n" -#: 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 "" -"未启用 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: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 "" -"未启用 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:1321 +#: misc/tune2fs.c:1269 msgid "Disabling checksums could take some time." msgstr "禁用校验值需要花费一段时间。" -#: misc/tune2fs.c:1323 +#: misc/tune2fs.c:1271 msgid "Cannot disable metadata_csum on a mounted filesystem!\n" msgstr "无法在已挂载的文件系统上禁用元数据校验特性!\n" -#: misc/tune2fs.c:1386 +#: misc/tune2fs.c:1334 #, c-format msgid "Cannot enable 64-bit mode while mounted!\n" msgstr "无法在已挂载的文件系统上启用 64 位模式!\n" -#: misc/tune2fs.c:1396 +#: misc/tune2fs.c:1344 #, c-format msgid "Cannot disable 64-bit mode while mounted!\n" msgstr "无法在已挂载的文件系统上禁用 64 位模式!\n" -#: misc/tune2fs.c:1426 +#: misc/tune2fs.c:1374 #, c-format msgid "Cannot enable project feature; inode size too small.\n" msgstr "" -#: misc/tune2fs.c:1447 +#: misc/tune2fs.c:1395 msgid "" "\n" "Warning: '^quota' option overrides '-Q'arguments.\n" @@ -6443,7 +6491,11 @@ msgstr "" "\n" "警告:“^quota”选项将覆盖“-Q”的参数。\n" -#: misc/tune2fs.c:1465 +#: 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" @@ -6451,26 +6503,23 @@ msgstr "" "只有在启用了元数据校验值特性的文件系统才支持\n" "“metadata_csum_seed”特性。\n" -#: misc/tune2fs.c:1483 +#: 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:1489 -#, fuzzy +#: misc/tune2fs.c:1443 msgid "Recalculating checksums could take some time." -msgstr "启用校验值需要花费一段时间。" +msgstr "重新计算校验值需要花费一段时间。" -#: misc/tune2fs.c:1531 +#: misc/tune2fs.c:1485 msgid "The filesystem already has a journal.\n" msgstr "文件系统已有日志。\n" -#: misc/tune2fs.c:1551 +#: misc/tune2fs.c:1505 #, c-format msgid "" "\n" @@ -6479,21 +6528,21 @@ msgstr "" "\n" "\t尝试打开位于 %s 的日志时\n" -#: misc/tune2fs.c:1555 +#: misc/tune2fs.c:1509 #, c-format msgid "Creating journal on device %s: " msgstr "在设备 %s 上创建日志: " -#: misc/tune2fs.c:1563 +#: misc/tune2fs.c:1517 #, c-format msgid "while adding filesystem to journal on %s" msgstr "将文件系统添加到 %s 上的日志" -#: misc/tune2fs.c:1569 +#: misc/tune2fs.c:1523 msgid "Creating journal inode: " msgstr "创建日志inode: " -#: misc/tune2fs.c:1583 +#: misc/tune2fs.c:1537 msgid "" "\n" "\twhile trying to create journal file" @@ -6501,37 +6550,36 @@ msgstr "" "\n" "\t尝试创建日志文件时" -#: misc/tune2fs.c:1621 +#: misc/tune2fs.c:1575 #, c-format msgid "Cannot enable project quota; inode size too small.\n" msgstr "" -#: misc/tune2fs.c:1634 +#: misc/tune2fs.c:1588 msgid "while initializing quota context in support library" msgstr "初始化支持库中的引用上下文时" -#: misc/tune2fs.c:1649 +#: misc/tune2fs.c:1603 #, c-format msgid "while updating quota limits (%d)" msgstr "更新配额限制(%d)时" -#: misc/tune2fs.c:1657 +#: misc/tune2fs.c:1611 #, c-format msgid "while writing quota file (%d)" msgstr "写入配额文件(%d)时" -#: misc/tune2fs.c:1675 +#: misc/tune2fs.c:1629 #, c-format msgid "while removing quota file (%d)" msgstr "移除配额文件(%d)时" -#: misc/tune2fs.c:1718 +#: 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" @@ -6548,93 +6596,112 @@ msgstr "" "\n" "\n" -#: misc/tune2fs.c:1776 +#: misc/tune2fs.c:1730 #, c-format msgid "Couldn't parse date/time specifier: %s" msgstr "无法解析日期/时间描述符:%s" -#: misc/tune2fs.c:1801 misc/tune2fs.c:1814 +#: misc/tune2fs.c:1755 misc/tune2fs.c:1768 #, c-format msgid "bad mounts count - %s" msgstr "错误挂载计数 - %s" -#: misc/tune2fs.c:1857 +#: misc/tune2fs.c:1811 #, c-format msgid "bad gid/group name - %s" msgstr "错误的gid/组名 - %s" -#: misc/tune2fs.c:1890 +#: misc/tune2fs.c:1844 #, c-format msgid "bad interval - %s" msgstr "错误的间隔 - %s" -#: misc/tune2fs.c:1919 +#: misc/tune2fs.c:1873 #, c-format msgid "bad reserved block ratio - %s" msgstr "错误的保留块比 - %s" -#: misc/tune2fs.c:1934 +#: misc/tune2fs.c:1888 msgid "-o may only be specified once" msgstr "-o只能被指定一次" -#: misc/tune2fs.c:1943 +#: misc/tune2fs.c:1897 msgid "-O may only be specified once" msgstr "-O只能被指定一次" -#: misc/tune2fs.c:1960 +#: misc/tune2fs.c:1914 #, c-format msgid "bad reserved blocks count - %s" msgstr "错误的保留块数 - %s" -#: misc/tune2fs.c:1989 +#: misc/tune2fs.c:1943 #, c-format msgid "bad uid/user name - %s" msgstr "错误的uid/用户名 - %s" -#: misc/tune2fs.c:2006 +#: misc/tune2fs.c:1960 #, c-format msgid "bad inode size - %s" msgstr "无效的inode大小 - %s" -#: misc/tune2fs.c:2013 +#: misc/tune2fs.c:1967 #, c-format msgid "Inode size must be a power of two- %s" msgstr "Inode 大小必须是2的次方- %s" -#: misc/tune2fs.c:2110 +#: misc/tune2fs.c:2064 #, c-format msgid "mmp_update_interval too big: %lu\n" msgstr "MMP更新间隔太长:%lu\n" -#: misc/tune2fs.c:2115 +#: 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:2138 +#: 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:2153 +#: misc/tune2fs.c:2111 #, c-format msgid "Invalid RAID stripe-width: %s\n" msgstr "无效的带宽参数:%s\n" -#: misc/tune2fs.c:2168 +#: misc/tune2fs.c:2126 #, c-format msgid "Invalid hash algorithm: %s\n" msgstr "无效的hash算法:%s\n" -#: misc/tune2fs.c:2174 +#: misc/tune2fs.c:2132 #, c-format msgid "Setting default hash algorithm to %s (%d)\n" msgstr "将默认hash算法设置为 %s (%d)\n" -#: misc/tune2fs.c:2193 +#: 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=\n" +#| "\tmount_opts=\n" +#| "\tstride=\n" +#| "\tstripe_width=\n" +#| "\ttest_fs\n" +#| "\t^test_fs\n" msgid "" "\n" "Bad options specified.\n" @@ -6649,6 +6716,7 @@ msgid "" "\tmmp_update_interval=\n" "\tstride=\n" "\tstripe_width=\n" +"\tforce_fsck\n" "\ttest_fs\n" "\t^test_fs\n" msgstr "" @@ -6666,31 +6734,31 @@ msgstr "" "\ttest_fs\n" "\t^test_fs\n" -#: misc/tune2fs.c:2663 +#: misc/tune2fs.c:2622 msgid "Failed to read inode bitmap\n" msgstr "读取inode位图失败\n" -#: misc/tune2fs.c:2668 +#: misc/tune2fs.c:2627 msgid "Failed to read block bitmap\n" msgstr "读取块位图失败\n" -#: misc/tune2fs.c:2685 resize/resize2fs.c:1277 +#: misc/tune2fs.c:2644 resize/resize2fs.c:1277 msgid "blocks to be moved" msgstr "需要移动的块" -#: misc/tune2fs.c:2688 +#: misc/tune2fs.c:2647 msgid "Failed to allocate block bitmap when increasing inode size\n" msgstr "增加inode大小时为分配块位图失败\n" -#: misc/tune2fs.c:2694 +#: misc/tune2fs.c:2653 msgid "Not enough space to increase inode size \n" msgstr "没有足够的空间用于增加inode大小\n" -#: misc/tune2fs.c:2699 +#: misc/tune2fs.c:2658 msgid "Failed to relocate blocks during inode resize \n" msgstr "改变块大小时重定位块失败 \n" -#: misc/tune2fs.c:2731 +#: misc/tune2fs.c:2690 msgid "" "Error in resizing the inode size.\n" "Run e2undo to undo the file system changes. \n" @@ -6698,7 +6766,7 @@ msgstr "" "改变inode大小时出错。\n" "请运行e2undo来撤销对文件系统的更改。\n" -#: misc/tune2fs.c:2936 +#: 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" @@ -6706,7 +6774,7 @@ msgstr "" "如果你确定文件系统并没有挂载到任何节点上,请运行:\n" "“tune2fs -f -E clear_mmp {设备}”\n" -#: misc/tune2fs.c:2943 +#: misc/tune2fs.c:2907 #, c-format msgid "" "MMP block magic is bad. Try to fix it by running:\n" @@ -6715,29 +6783,29 @@ msgstr "" "MMP块幻数错误。请尝试运行一下命令来修复:\n" "“e2fsck -f %s”\n" -#: misc/tune2fs.c:2955 +#: misc/tune2fs.c:2919 msgid "Cannot modify a journal device.\n" msgstr "无法修改日志设备。\n" -#: misc/tune2fs.c:2968 +#: misc/tune2fs.c:2932 #, c-format msgid "The inode size is already %lu\n" msgstr "inode大小已经为 %lu\n" -#: misc/tune2fs.c:2975 +#: misc/tune2fs.c:2939 msgid "Shrinking inode size is not supported\n" msgstr "不支持缩小inode大小\n" -#: misc/tune2fs.c:2980 +#: misc/tune2fs.c:2944 #, c-format msgid "Invalid inode size %lu (max %d)\n" msgstr "无效的inode大小 %lu(最大 %d)\n" -#: misc/tune2fs.c:2986 +#: misc/tune2fs.c:2950 msgid "Resizing inodes could take some time." msgstr "改变 inode 大小需要花费一段时间。" -#: misc/tune2fs.c:3034 +#: misc/tune2fs.c:2998 #, c-format msgid "" "Warning: The journal is dirty. You may wish to replay the journal like:\n" @@ -6753,57 +6821,57 @@ msgstr "" "\n" "然后重新运行本命令。否则,任何所做更改都可能被日志恢复操作所覆盖。\n" -#: misc/tune2fs.c:3045 +#: misc/tune2fs.c:3009 #, c-format msgid "Recovering journal.\n" msgstr "正在修复日志。\n" -#: misc/tune2fs.c:3063 +#: misc/tune2fs.c:3028 #, c-format msgid "Setting maximal mount count to %d\n" msgstr "设置最大挂载次数为 %d\n" -#: misc/tune2fs.c:3069 +#: misc/tune2fs.c:3034 #, c-format msgid "Setting current mount count to %d\n" msgstr "设置当前挂载次数为 %d\n" -#: misc/tune2fs.c:3074 +#: misc/tune2fs.c:3039 #, c-format msgid "Setting error behavior to %d\n" msgstr "将出错行为设置为 %d\n" -#: misc/tune2fs.c:3079 +#: misc/tune2fs.c:3044 #, c-format msgid "Setting reserved blocks gid to %lu\n" msgstr "设置保留块的gid为 %lu\n" -#: misc/tune2fs.c:3084 +#: misc/tune2fs.c:3049 #, c-format msgid "interval between checks is too big (%lu)" msgstr "检查间隔太长(%lu)" -#: misc/tune2fs.c:3091 +#: misc/tune2fs.c:3056 #, c-format msgid "Setting interval between checks to %lu seconds\n" msgstr "将检查间隔设置为 %lu 秒\n" -#: misc/tune2fs.c:3098 +#: misc/tune2fs.c:3063 #, c-format msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n" msgstr "将保留块所占百分比设置为 %g%%(%llu 个块)\n" -#: misc/tune2fs.c:3104 +#: misc/tune2fs.c:3069 #, c-format msgid "reserved blocks count is too big (%llu)" msgstr "保留块的数量太大(%llu)" -#: misc/tune2fs.c:3111 +#: misc/tune2fs.c:3076 #, c-format msgid "Setting reserved blocks count to %llu\n" msgstr "设置保留块数为 %llu\n" -#: misc/tune2fs.c:3116 +#: misc/tune2fs.c:3081 msgid "" "\n" "The filesystem already has sparse superblocks.\n" @@ -6811,7 +6879,7 @@ msgstr "" "\n" "文件系统已经含有分散式超级块\n" -#: misc/tune2fs.c:3119 +#: misc/tune2fs.c:3084 msgid "" "\n" "Setting the sparse superblock flag not supported\n" @@ -6822,7 +6890,7 @@ msgstr "" "超级块标志。\n" "\n" -#: misc/tune2fs.c:3129 +#: misc/tune2fs.c:3094 #, c-format msgid "" "\n" @@ -6831,7 +6899,7 @@ msgstr "" "\n" "已设置分散式超级块标志。 %s" -#: misc/tune2fs.c:3134 +#: misc/tune2fs.c:3099 msgid "" "\n" "Clearing the sparse superblock flag not supported.\n" @@ -6839,115 +6907,109 @@ msgstr "" "\n" "移除不被支持的分散式超级块标志。\n" -#: misc/tune2fs.c:3142 +#: misc/tune2fs.c:3107 #, c-format msgid "Setting time filesystem last checked to %s\n" msgstr "设置上一次检查的时间为 %s\n" -#: misc/tune2fs.c:3148 +#: misc/tune2fs.c:3113 #, c-format msgid "Setting reserved blocks uid to %lu\n" msgstr "设置保留块的uid为 %lu\n" -#: misc/tune2fs.c:3180 +#: 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:3198 -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:3222 +#: 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:3225 -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:3234 -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:3259 +#: misc/tune2fs.c:3229 msgid "Invalid UUID format\n" msgstr "无效的 UUID 格式\n" -#: misc/tune2fs.c:3275 +#: misc/tune2fs.c:3245 msgid "Need to update journal superblock.\n" msgstr "需要更新日志超级块。\n" -#: misc/tune2fs.c:3301 +#: misc/tune2fs.c:3267 msgid "The inode size may only be changed when the filesystem is unmounted.\n" msgstr "只有当文件系统被卸载时才能改变inode大小。\n" -#: misc/tune2fs.c:3308 +#: 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:3326 +#: misc/tune2fs.c:3292 #, c-format msgid "Setting inode size %lu\n" msgstr "正在将inode大小设置为 %lu\n" -#: misc/tune2fs.c:3330 +#: misc/tune2fs.c:3296 msgid "Failed to change inode size\n" msgstr "改变inode大小失败 \n" -#: misc/tune2fs.c:3344 +#: misc/tune2fs.c:3310 #, c-format msgid "Setting stride size to %d\n" msgstr "设置步长为 %d\n" -#: misc/tune2fs.c:3349 +#: misc/tune2fs.c:3315 #, c-format msgid "Setting stripe width to %d\n" msgstr "设置带宽为 %d\n" -#: misc/tune2fs.c:3356 +#: misc/tune2fs.c:3322 #, c-format msgid "Setting extended default mount options to '%s'\n" msgstr "设置默认挂载的扩展选项为 “%s”\n" -#: misc/util.c:100 +#: misc/util.c:101 msgid "\n" msgstr "<处理中>\n" -#: misc/util.c:104 -#, fuzzy, c-format +#: misc/util.c:105 +#, c-format msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) " -msgstr "无论如何也要继续(或等待 %d 秒)?(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" @@ -6956,7 +7018,7 @@ msgstr "" "\n" "无法找到匹配 %s 的日志设备\n" -#: misc/util.c:213 +#: misc/util.c:216 msgid "" "\n" "Bad journal options specified.\n" @@ -6986,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" @@ -6994,7 +7056,7 @@ msgstr "" "\n" "文件系统太小,无法容纳日志\n" -#: misc/util.c:251 +#: misc/util.c:254 #, c-format msgid "" "\n" @@ -7005,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" @@ -7013,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" @@ -7165,14 +7227,12 @@ msgid "#\tNum=%llu, Size=%llu, Cursor=%llu, Sorted=%llu\n" msgstr "#\t数量=%llu,大小=%llu,指针=%llu,按序=%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] " -"[-S RAID-stride] [-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:73 @@ -7276,9 +7336,7 @@ msgstr "无法设置/取消设置 64 位特性。\n" #: 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:581 @@ -7288,9 +7346,7 @@ msgstr "无法在已挂载的文件系统上改变 64 位特性。\n" #: 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:593 @@ -7420,15 +7476,13 @@ msgstr "尝试添加组 #%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" +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 -#, fuzzy, c-format +#, c-format msgid "inodes (%llu) must be less than %u\n" -msgstr "inode数(%llu)必须小于 %u32" +msgstr "inode数(%llu)必须小于 %u\n" #: resize/resize2fs.c:1038 msgid "reserved blocks" @@ -7438,26 +7492,25 @@ msgstr "保留块" msgid "meta-data blocks" msgstr "元数据块" -#: resize/resize2fs.c:1386 resize/resize2fs.c:2475 +#: resize/resize2fs.c:1386 resize/resize2fs.c:2421 msgid "new meta blocks" msgstr "新的元数据块" -#: resize/resize2fs.c:2698 +#: resize/resize2fs.c:2644 msgid "Should never happen! No sb in last super_sparse bg?\n" msgstr "不应当出现的情况:最后一个分散式超级块块组中没有超级块!\n" -#: resize/resize2fs.c:2703 +#: resize/resize2fs.c:2649 msgid "Should never happen! Unexpected old_desc in super_sparse bg?\n" msgstr "不应当出现的情况:分散式超级块块组中有未预期的old_desc!\n" -#: resize/resize2fs.c:2776 +#: 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.44.4" -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" @@ -8016,9 +8069,8 @@ msgid "MMP: device currently active" msgstr "MMP:设备当前为活动状态" #: lib/ext2fs/ext2_err.c:151 -#, fuzzy msgid "MMP: e2fsck being run" -msgstr "MMP:fsck正在运行" +msgstr "MMP:e2fsck 正在运行" #: lib/ext2fs/ext2_err.c:152 msgid "MMP: block number beyond filesystem range" @@ -8073,13 +8125,12 @@ msgid "Unknown checksum algorithm" msgstr "位置的校验值算法" #: lib/ext2fs/ext2_err.c:165 -#, fuzzy msgid "MMP block checksum does not match" -msgstr "MMP块校验值与MMP块自身不符" +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" @@ -8166,9 +8217,8 @@ 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" @@ -8364,46 +8414,14 @@ msgstr " %s 有一个 %s 文件系统\n" #: lib/support/plausible.c:276 #, c-format msgid "%s contains `%s' data\n" -msgstr "" -" %s 含有“%s”数据\n" -"\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" - -#, fuzzy -#~ msgid "" -#~ "\n" -#~ "Warning, had trouble writing out superblocks.\n" -#~ msgstr "" -#~ "\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 "日志特性:: " @@ -8452,6 +8470,38 @@ msgstr "" #~ 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" @@ -8540,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 index d55e24c..8acdcf6 100644 --- a/resize/Android.bp +++ b/resize/Android.bp @@ -1,10 +1,16 @@ // Copyright 2017 The Android Open Source Project -cc_binary { - name: "resize2fs", - host_supported: true, - defaults: ["e2fsprogs-defaults"], +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", @@ -13,12 +19,32 @@ cc_binary { "sim_progress.c", "resource_track.c", ], - shared_libs: [ - "libext2fs", - "libext2_com_err", - "libext2_e2p", - "libext2_uuid", - "libext2_blkid", - ], +} + +cc_binary { + name: "resize2fs", + host_supported: 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/resize2fs.c b/resize/resize2fs.c index c2e1047..8a3d08d 100644 --- a/resize/resize2fs.c +++ b/resize/resize2fs.c @@ -2926,11 +2926,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); diff --git a/scrub/e2scrub.in b/scrub/e2scrub.in index b778a92..30ab7cb 100644 --- a/scrub/e2scrub.in +++ b/scrub/e2scrub.in @@ -66,7 +66,7 @@ exitcode() { # 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}" ]; then + if [ -n "${SERVICE_MODE}" -a "${ret}" -ne 0 ]; then test "${ret}" -ne 0 && ret=1 sleep 2 fi @@ -201,7 +201,7 @@ mark_corrupt() { setup() { # Try to remove snapshot for 30s, bail out if we can't remove it. - lveremove_deadline="$(( $(date "+%s") + 30))" + 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 diff --git a/scrub/e2scrub_all.in b/scrub/e2scrub_all.in index 1418a22..4288b96 100644 --- a/scrub/e2scrub_all.in +++ b/scrub/e2scrub_all.in @@ -56,14 +56,8 @@ exitcode() { # 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}" ]; then + if [ -n "${SERVICE_MODE}" -a "${ret}" -ne 0 ]; then test "${ret}" -ne 0 && ret=1 - sleep 2 fi exit "${ret}" @@ -80,9 +74,18 @@ while getopts "nrAV" opt; do done shift "$((OPTIND - 1))" -if [ -n "${SERVICE_MODE}" -a "${reap}" -ne 1 -a "${periodic_e2scrub}" -ne 1 ] -then - exitcode 0 +# 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 @@ -92,6 +95,12 @@ exec 3<&- # 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?" @@ -156,13 +165,13 @@ escape_path_for_systemd() { } # Scrub any mounted fs on lvm by creating a snapshot and fscking that. -stdin="$(realpath /dev/stdin)" -ls_targets | while read tgt; do +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 < "${stdin}" + ${DBG} systemctl start "e2scrub@${tgt_esc}" 2> /dev/null res=$? if [ "${res}" -eq 0 ] || [ "${res}" -eq 1 ]; then continue; @@ -170,7 +179,7 @@ ls_targets | while read tgt; do fi # Otherwise use direct invocation - ${DBG} "@root_sbindir@/e2scrub" ${scrub_args} "${tgt}" < "${stdin}" + ${DBG} "@root_sbindir@/e2scrub" ${scrub_args} "${tgt}" done exitcode 0 diff --git a/tests/f_dir_bad_csum/expect.1 b/tests/f_dir_bad_csum/expect.1 index 94e72da..2c684fe 100644 --- a/tests/f_dir_bad_csum/expect.1 +++ b/tests/f_dir_bad_csum/expect.1 @@ -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 diff --git a/tests/f_mmp/script b/tests/f_mmp/script index 07ae232..f433bd5 100644 --- a/tests/f_mmp/script +++ b/tests/f_mmp/script @@ -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=$? diff --git a/tests/f_mmp_garbage/script b/tests/f_mmp_garbage/script index 6d451a6..69be338 100644 --- a/tests/f_mmp_garbage/script +++ b/tests/f_mmp_garbage/script @@ -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=$? diff --git a/tests/f_rebuild_csum_rootdir/expect.1 b/tests/f_rebuild_csum_rootdir/expect.1 index 4df58f9..bab07e0 100644 --- a/tests/f_rebuild_csum_rootdir/expect.1 +++ b/tests/f_rebuild_csum_rootdir/expect.1 @@ -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 diff --git a/tests/f_resize_inode_meta_bg/expect.1 b/tests/f_resize_inode_meta_bg/expect.1 index 12055fc..c733c18 100644 --- a/tests/f_resize_inode_meta_bg/expect.1 +++ b/tests/f_resize_inode_meta_bg/expect.1 @@ -5,9 +5,6 @@ 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 -Directory inode 2, block #0, offset 0: directory has no checksum. -Fix? yes - First entry '' (inode=348) in directory inode 2 (???) should be '.' Fix? yes @@ -19,6 +16,9 @@ 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 @@ -42,6 +42,9 @@ 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 (0), should be / (2). Fix? yes diff --git a/tests/filter.sed b/tests/filter.sed index f37986c..796186e 100644 --- a/tests/filter.sed +++ b/tests/filter.sed @@ -37,3 +37,4 @@ 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/ diff --git a/tests/m_image_mmp/script b/tests/m_image_mmp/script index bc6f320..5af6f55 100644 --- a/tests/m_image_mmp/script +++ b/tests/m_image_mmp/script @@ -1,14 +1,3 @@ -# 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 -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1 status=$? if [ "$status" != 0 ] ; then diff --git a/tests/m_mmp/script b/tests/m_mmp/script index 6a9394d..e456183 100644 --- a/tests/m_mmp/script +++ b/tests/m_mmp/script @@ -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 diff --git a/tests/m_mmp_bad_csum/script b/tests/m_mmp_bad_csum/script index 4c8fe16..a5e222e 100644 --- a/tests/m_mmp_bad_csum/script +++ b/tests/m_mmp_bad_csum/script @@ -1,13 +1,3 @@ -# 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 diff --git a/tests/m_mmp_bad_magic/script b/tests/m_mmp_bad_magic/script index 4c8fe16..a5e222e 100644 --- a/tests/m_mmp_bad_magic/script +++ b/tests/m_mmp_bad_magic/script @@ -1,13 +1,3 @@ -# 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 diff --git a/tests/t_mmp_1on/script b/tests/t_mmp_1on/script index cfed2ca..733395e 100644 --- a/tests/t_mmp_1on/script +++ b/tests/t_mmp_1on/script @@ -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 diff --git a/tests/t_mmp_2off/script b/tests/t_mmp_2off/script index 6556201..ccd859b 100644 --- a/tests/t_mmp_2off/script +++ b/tests/t_mmp_2off/script @@ -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 diff --git a/util/android-README.version.in b/util/android-README.version.in index 0fe3cba..c8a3217 100644 --- a/util/android-README.version.in +++ b/util/android-README.version.in @@ -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 diff --git a/util/android_types.h b/util/android_types.h index a8d7cff..5f05903 100644 --- a/util/android_types.h +++ b/util/android_types.h @@ -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; diff --git a/util/gen-android-files b/util/gen-android-files index 937496b..cab4e8d 100755 --- a/util/gen-android-files +++ b/util/gen-android-files @@ -37,9 +37,16 @@ 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 debugfs/ cp e2fsck/recovery.c e2fsck/revoke.c debugfs/ diff --git a/version.h b/version.h index f300479..ad8fce1 100644 --- a/version.h +++ b/version.h @@ -7,5 +7,5 @@ * file may be redistributed under the GNU Public License v2. */ -#define E2FSPROGS_VERSION "1.45.4" -#define E2FSPROGS_DATE "23-Sep-2019" +#define E2FSPROGS_VERSION "1.45.6" +#define E2FSPROGS_DATE "20-Mar-2020"