diff options
68 files changed, 3904 insertions, 3259 deletions
@@ -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 @@ -1,4 +1,4 @@ - This is the new version (1.45.4) of the second extended file + This is the new version (1.45.5) 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 ae6a5a33..df496822 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.5.txt
\ No newline at end of file diff --git a/acinclude.m4 b/acinclude.m4 index 0b91745e..13b1e022 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 <sys/mount.h>], diff --git a/config/config.guess b/config/config.guess index 8ca6a44c..45001cfe 100644..100755 --- 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 <features.h> #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 <stdio.h> /* 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 <sys/systemcfg.h> @@ -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 <unistd.h> 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" <<EOF +#ifdef _SEQUENT_ +#include <sys/types.h> +#include <sys/utsname.h> +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include <signal.h> +#if defined(_SIZE_T_) || defined(SIGLOST) +#include <sys/utsname.h> +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include <sys/param.h> +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in @@ -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 0b218edc..f02d43ad 100644..100755 --- 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 <config-patches@gnu.org>." 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 <<EOF +$1 +EOF -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 +# Separate into logical components for further validation +case $1 in + *-*-*-*-*) + echo Invalid configuration \`"$1"\': more than four components >&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 <<EOF +$basic_machine +EOF ;; - sa29200) - basic_machine=a29k-amd - os=-udi + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + cpu=$basic_machine + vendor=pc ;; - sb1) - basic_machine=mipsisa64sb1-unknown + # These rules are duplicated from below for sake of the special case above; + # i.e. things that normalized to x86 arches should also default to "pc" + pc98) + cpu=i386 + vendor=pc ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown + x64 | amd64) + cpu=x86_64 + vendor=pc ;; - sde) - basic_machine=mipsisa32-sde - os=-elf + # Recognize the basic CPU types without company name. + *) + cpu=$basic_machine + vendor=unknown ;; - sei) - basic_machine=mips-sei - os=-seiux +esac + +unset -v basic_machine + +# Decode basic machines in the full and proper CPU-Company form. +case $cpu-$vendor in + # Here we handle the default manufacturer of certain CPU types in canonical form. It is in + # some cases the only manufacturer, in others, it is the most popular. + craynv-unknown) + vendor=cray + os=${os:-unicosmp} ;; - sequent) - basic_machine=i386-sequent + c90-unknown | c90-cray) + vendor=cray + os=${os:-unicos} ;; - sh5el) - basic_machine=sh5le-unknown + fx80-unknown) + vendor=alliant ;; - simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks + romp-unknown) + vendor=ibm ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 + mmix-unknown) + vendor=knuth ;; - spur) - basic_machine=spur-unknown + microblaze-unknown | microblazeel-unknown) + vendor=xilinx ;; - st2000) - basic_machine=m68k-tandem + rs6000-unknown) + vendor=ibm ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 + vax-unknown) + vendor=dec ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` + pdp11-unknown) + vendor=dec ;; - sun2) - basic_machine=m68000-sun + we32k-unknown) + vendor=att ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 + cydra-unknown) + vendor=cydrome ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 + i370-ibm*) + vendor=ibm ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 + orion-unknown) + vendor=highlevel ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 + xps-unknown | xps100-unknown) + cpu=xps100 + vendor=honeywell ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 + + # Here we normalize CPU types with a missing or matching vendor + dpx20-unknown | dpx20-bull) + cpu=rs6000 + vendor=bull + os=${os:-bosx} ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 + + # Here we normalize CPU types irrespective of the vendor + amd64-*) + cpu=x86_64 ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 + blackfin-*) + cpu=bfin + os=linux ;; - sun3 | sun3-*) - basic_machine=m68k-sun + c54x-*) + cpu=tic54x ;; - sun4) - basic_machine=sparc-sun + c55x-*) + cpu=tic55x ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun + c6x-*) + cpu=tic6x ;; - sv1) - basic_machine=sv1-cray - os=-unicos + e500v[12]-*) + cpu=powerpc + os=$os"spe" ;; - symmetry) - basic_machine=i386-sequent - os=-dynix + mips3*-*) + cpu=mips64 ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos + ms1-*) + cpu=mt ;; - t90) - basic_machine=t90-cray - os=-unicos + m68knommu-*) + cpu=m68k + os=linux ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu + m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) + cpu=s12z ;; - tx39) - basic_machine=mipstx39-unknown + openrisc-*) + cpu=or32 ;; - tx39el) - basic_machine=mipstx39el-unknown + parisc-*) + cpu=hppa + os=linux ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + cpu=i586 ;; - tower | tower-32) - basic_machine=m68k-ncr + pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + cpu=i686 ;; - tpf) - basic_machine=s390x-ibm - os=-tpf + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + cpu=i686 ;; - udi29k) - basic_machine=a29k-amd - os=-udi + pentium4-*) + cpu=i786 ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 + pc98-*) + cpu=i386 ;; - v810 | necv810) - basic_machine=v810-nec - os=-none + ppc-* | ppcbe-*) + cpu=powerpc ;; - vaxv) - basic_machine=vax-dec - os=-sysv + ppcle-* | powerpclittle-*) + cpu=powerpcle ;; - vms) - basic_machine=vax-dec - os=-vms + ppc64-*) + cpu=powerpc64 ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu + ppc64le-* | powerpc64little-*) + cpu=powerpc64le ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks + sb1-*) + cpu=mipsisa64sb1 ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks + sb1el-*) + cpu=mipsisa64sb1el ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks + sh5e[lb]-*) + cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` ;; - w65*) - basic_machine=w65-wdc - os=-none + spur-*) + cpu=spur ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf + strongarm-* | thumb-*) + cpu=arm ;; - x64) - basic_machine=x86_64-pc + tx39-*) + cpu=mipstx39 ;; - xbox) - basic_machine=i686-pc - os=-mingw32 + tx39el-*) + cpu=mipstx39el ;; - xps | xps100) - basic_machine=xps100-honeywell + x64-*) + cpu=x86_64 ;; xscale-* | xscalee[bl]-*) - basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - none) - basic_machine=none-none - os=-none + cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm + # Recognize the canonical CPU Types that limit and/or modify the + # company names they are paired with. + cr16-*) + os=${os:-elf} ;; - mmix) - basic_machine=mmix-knuth + crisv32-* | etraxfs*-*) + cpu=crisv32 + vendor=axis ;; - rs6000) - basic_machine=rs6000-ibm + cris-* | etrax*-*) + cpu=cris + vendor=axis ;; - vax) - basic_machine=vax-dec + crx-*) + os=${os:-elf} ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att + neo-tandem) + cpu=neo + vendor=tandem ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown + nse-tandem) + cpu=nse + vendor=tandem ;; - cydra) - basic_machine=cydra-cydrome + nsr-tandem) + cpu=nsr + vendor=tandem ;; - orion) - basic_machine=orion-highlevel + nsv-tandem) + cpu=nsv + vendor=tandem ;; - orion105) - basic_machine=clipper-highlevel + nsx-tandem) + cpu=nsx + vendor=tandem ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple + s390-*) + cpu=s390 + vendor=ibm ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple + s390x-*) + cpu=s390x + vendor=ibm ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. + tile*-*) + os=${os:-linux-gnu} ;; + *) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv64 \ + | rl78 | romp | rs6000 | rx \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -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: "'" @@ -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 14203050..652317e2 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 e9f46b4a..f53f1ed8 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 a014744a..658a7514 100644 --- a/contrib/android/basefs_allocator.c +++ b/contrib/android/basefs_allocator.c @@ -1,3 +1,4 @@ +#include <limits.h> #include <sys/types.h> #include <sys/stat.h> #include "basefs_allocator.h" @@ -8,108 +9,249 @@ struct base_fs_allocator { struct ext2fs_hashmap *entries; struct basefs_entry *cur_entry; + /* 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); + } + } +} + +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); + } + 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 block_range *blocks) +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 int 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; + + while (list->head) { + 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); + *ret = block; + return 0; + } + if (ext2fs_test_block_bitmap2(dedup_map, block)) { + ext2fs_unmark_block_bitmap2(dedup_map, block); + *ret = block; + return 0; + } + } + return -1; } 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 (!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) { + /* 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; + } + } + 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; - - 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; - } - + 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, @@ -140,9 +282,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 f1109cd6..6d1c65e3 100644 --- a/contrib/android/basefs_allocator.h +++ b/contrib/android/basefs_allocator.h @@ -5,7 +5,7 @@ # include <ext2fs/ext2fs.h> 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 25dcc514..63cc1a22 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 2f951c78..0a068826 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 31e3c23f..cf7971e8 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 3264a99f..1beb1e25 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/debian/changelog b/debian/changelog index e9120cd1..d26f8db3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,35 @@ +e2fsprogs (1.45.5-1) unstable; urgency=medium + + * New upstream feature + * E2fsck will no longer force a full file system check if time-based + forced checks are disabled and the last mount time or last write time in + the superblock are in the future. + * Fix spurious weekly e-mails when e2scrub_all is run via a cron job + on non-systemd systems. (Closes: #944033) + * Remove an unnecessary sleep in e2scrub which could add up to an + additional two second delay during the boot up. Also, avoid + trying to reap aborted snapshots if it has been disabled via + e2scrub.conf. (Closes: #948193) + * Resize2fs -M's estimates are now more accurate on mounted file systems. + * Tune2fs prohibits enabling or disabling the uninit_bg feature on + mounted file systems, since this is unsafe. + * Fix support of 32-bit uid's and gid's in fuse2fs and in mke2fs -d. + * Fix mke2fs's setting bad blocks to bigalloc file systems. + * Fix a bug where fuse2fs would incorrectly report the i_blocks fields for + bigalloc file systems. + * Fix potential crash in e2fsck when rebuilding very large directories on + file systems which have the new large_dir feature enable. + * Fix FTBFS problem hurd/i386. (Closes: #944649) + * Fix CVE-2019-5188: potential a out of bounds write in mutate_name() + when checking a maliciously corrupted file systems + * Add autopkgtest tests smoke and fuse2fs + * Updated and clarified various man pages + * Update the debhelper compatibility level to 12 + * Update the Chinese and Malay translations + * Update the Debian policy compliance to 4.4.1 + + -- Theodore Y. Ts'o <tytso@mit.edu> Tue, 07 Jan 2020 09:18:39 -0500 + e2fsprogs (1.45.4-1) unstable; urgency=medium * New upstream feature diff --git a/debian/compat b/debian/compat index b4de3947..48082f72 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -11 +12 diff --git a/debian/control b/debian/control index f074a056..71613e11 100644 --- a/debian/control +++ b/debian/control @@ -2,8 +2,8 @@ Source: e2fsprogs Section: admin Priority: required Maintainer: Theodore Y. Ts'o <tytso@mit.edu> -Build-Depends: gettext, texinfo, pkg-config, libfuse-dev [linux-any kfreebsd-any] <!pkg.e2fsprogs.no-fuse2fs>, 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] <!pkg.e2fsprogs.no-fuse2fs>, libattr1-dev, 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 78c20b22..3645c67b 100644 --- a/debian/libext2fs2.symbols +++ b/debian/libext2fs2.symbols @@ -175,6 +175,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 +326,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 @@ -514,6 +519,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 00000000..e149342f --- /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 00000000..8b4e08af --- /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 00000000..966be966 --- /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/doc/RelNotes/v1.45.5.txt b/doc/RelNotes/v1.45.5.txt new file mode 100644 index 00000000..70cef96e --- /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/libext2fs.texinfo b/doc/libext2fs.texinfo index a001be53..3ad28efa 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.5) @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.5 +@subtitle January 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.5. @menu * Introduction to the EXT2FS Library:: diff --git a/e2fsck/extents.c b/e2fsck/extents.c index 3073725a..e9af1bbe 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, diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index b1469088..c9e8bf82 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 5693b9cf..bca701ca 100644 --- a/e2fsck/pass1b.c +++ b/e2fsck/pass1b.c @@ -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 8b40e93d..06f09549 100644 --- a/e2fsck/pass2.c +++ b/e2fsck/pass2.c @@ -934,6 +934,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 +1005,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/rehash.c b/e2fsck/rehash.c index a5fc1be1..54bc6803 100644 --- a/e2fsck/rehash.c +++ b/e2fsck/rehash.c @@ -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; @@ -272,7 +276,11 @@ static errcode_t alloc_size_dir(ext2_filsys fs, struct out_dir *outdir, outdir->hashes = new_mem; } else { outdir->buf = malloc(blocks * fs->blocksize); + if (!outdir->buf) + return ENOMEM; outdir->hashes = malloc(blocks * sizeof(ext2_dirhash_t)); + if (!outdir->hashes) + return ENOMEM; outdir->num = 0; } outdir->max = blocks; @@ -293,7 +301,11 @@ 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; } @@ -401,6 +413,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 +649,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 +741,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 +751,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) @@ -1019,6 +1047,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/super.c b/e2fsck/super.c index e5932be6..18affcf7 100644 --- a/e2fsck/super.c +++ b/e2fsck/super.c @@ -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/e2fsprogs.lsm b/e2fsprogs.lsm index 311e9d1e..e90b44e9 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.5 +Entered-date: 2020-01-07 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.5.tar.gz + 1kB e2fsprogs-1.45.5.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/lib/Android.bp b/lib/Android.bp index 771bb598..77f69da7 100644 --- a/lib/Android.bp +++ b/lib/Android.bp @@ -6,6 +6,7 @@ cc_library_headers { name: "libext2-headers", host_supported: true, + vendor_available: true, recovery_available: true, target: { windows: { diff --git a/lib/e2p/Android.bp b/lib/e2p/Android.bp index d30272b3..d74ba685 100644 --- a/lib/e2p/Android.bp +++ b/lib/e2p/Android.bp @@ -7,6 +7,7 @@ cc_library { unique_host_soname: true, defaults: ["e2fsprogs-defaults"], srcs: [ + "encoding.c", "feature.c", "fgetflags.c", "fsetflags.c", diff --git a/lib/e2p/feature.c b/lib/e2p/feature.c index 117acf25..ae7f7f0a 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" }, diff --git a/lib/ext2fs/Android.bp b/lib/ext2fs/Android.bp index e09ec3fb..909c4fa8 100644 --- a/lib/ext2fs/Android.bp +++ b/lib/ext2fs/Android.bp @@ -68,6 +68,7 @@ cc_library { "namei.c", "native.c", "newdir.c", + "nls_utf8.c", "openfs.c", "progress.c", "punch.c", diff --git a/lib/ext2fs/blknum.c b/lib/ext2fs/blknum.c index 9ee5c66e..ec77a067 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/dirhash.c b/lib/ext2fs/dirhash.c index d560e20b..42fe98bb 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_fs.h b/lib/ext2fs/ext2_fs.h index cbb44bdb..febcb476 100644 --- a/lib/ext2fs/ext2_fs.h +++ b/lib/ext2fs/ext2_fs.h @@ -810,6 +810,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 +912,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) diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index 59fd9742..cbf0c6f4 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); diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c index 78a823a9..871319a5 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/inode_io.c b/lib/ext2fs/inode_io.c index f3d94c89..d7474a6d 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 6cd497dc..c0215692 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) diff --git a/lib/ext2fs/qcow2.c b/lib/ext2fs/qcow2.c index 71a4792f..ee701f7a 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 5576348a..b649c9cf 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 f1c4188b..d80c9eb8 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 a1560045..e795278d 100644 --- a/lib/ext2fs/swapfs.c +++ b/lib/ext2fs/swapfs.c @@ -22,7 +22,6 @@ #include "ext2fsP.h" #include <ext2fs/ext2_ext_attr.h> -#ifdef WORDS_BIGENDIAN void ext2fs_swap_super(struct ext2_super_block * sb) { int i; @@ -479,5 +478,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 74fc8a75..628e60c3 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/mkquota.c b/lib/support/mkquota.c index ddb53124..6f7ae6d6 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/uuid/Android.bp b/lib/uuid/Android.bp index ea349e3e..7d4dfcac 100644 --- a/lib/uuid/Android.bp +++ b/lib/uuid/Android.bp @@ -4,6 +4,7 @@ cc_library { name: "libext2_uuid", host_supported: true, recovery_available: true, + vendor_available: true, unique_host_soname: true, defaults: ["e2fsprogs-defaults"], srcs: [ diff --git a/misc/Makefile.in b/misc/Makefile.in index f2554446..9f2a8939 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 1c9e8964..66e791db 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,9 +79,9 @@ 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. +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. .PP 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 @@ -101,21 +102,20 @@ 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 +A file with the 'd' attribute set is not a candidate for backup when the .BR dump (8) program is run. .PP 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 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 +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). @@ -132,7 +132,7 @@ Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute. .PP 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). @@ -146,7 +146,8 @@ attribute has no effect. Only the superuser or a process possessing the CAP_SYS_RESOURCE capability can set or clear this attribute. .PP 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). @@ -164,15 +165,15 @@ and written back to the disk. Note: please make sure to read the bugs and limitations section at the end of this document. .PP 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 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. +files. Note: As of this writing, the ext2, ext3, and ext4 filesystems do +not support tail-merging. .PP A directory with the 'T' attribute will be deemed to be the top of directory hierarchies for the purposes of the Orlov block allocator. @@ -189,6 +190,15 @@ saved. This allows the user to ask for its undeletion. Note: please make sure to read the bugs and limitations section at the end of this document. .PP +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 was written by Remy Card <Remy.Card@linux.org>. It is currently being diff --git a/misc/check_fuzzer.c b/misc/check_fuzzer.c new file mode 100644 index 00000000..cee21bfe --- /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 <stdio.h> +#include <string.h> +#include <unistd.h> +#include <stdlib.h> +#include <time.h> +#include <sys/types.h> +#include <sys/time.h> + +#include <ext2fs/ext2_fs.h> +#include <ext2fs/ext2fs.h> + +int main (int argc, char *argv[]) +{ + errcode_t retval = 0; + ext2_filsys fs; + int exit_status = 1; + + initialize_ext2_error_table(); + + if (argc != 2) { + fprintf(stderr, "%s: Usage <device|filesystem>\n", argv[0]); + exit(1); + } + + retval = ext2fs_open(argv[1], 0, 0, 0, + unix_io_manager, &fs); + if (retval) { + com_err(argv[0], retval, "while trying to open '%s'", + argv[1]); + exit(1); + } + + retval = ext2fs_read_inode_bitmap(fs); + if (retval) { + com_err(argv[0], retval, "while trying to read inode bitmaps"); + goto errout; + } + + retval = ext2fs_read_block_bitmap(fs); + if (retval) { + com_err(argv[0], retval, "while trying to read inode bitmaps"); + goto errout; + } + + retval = ext2fs_check_directory(fs, EXT2_ROOT_INO); + if (retval) { + com_err(argv[0], retval, "while trying to read inode bitmaps"); + goto errout; + } + exit_status = 0; +errout: + ext2fs_close(fs); + return exit_status; +} diff --git a/misc/create_inode.c b/misc/create_inode.c index 0091b723..5161d5e3 100644 --- a/misc/create_inode.c +++ b/misc/create_inode.c @@ -121,7 +121,9 @@ 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; + ext2fs_set_i_gid_high(inode, st->st_gid >> 16); inode.i_mode |= st->st_mode; inode.i_atime = st->st_atime; inode.i_mtime = st->st_mtime; diff --git a/misc/e2image.8.in b/misc/e2image.8.in index bbbb57ae..ef124867 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 3c881fee..56183ad6 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); diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index be2cd1db..68ddddd3 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); @@ -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.c b/misc/mke2fs.c index d7cf257e..30e353d3 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); } diff --git a/misc/tune2fs.c b/misc/tune2fs.c index 7d2d38d7..301cf388 100644 --- a/misc/tune2fs.c +++ b/misc/tune2fs.c @@ -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) diff --git a/po/e2fsprogs.pot b/po/e2fsprogs.pot index 9dcf76dd..0ad3b291 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 <tytso@mit.edu>, 2019. +# Theodore Ts'o <tytso@mit.edu>, 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.5\n" "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n" -"POT-Creation-Date: 2019-09-23 15:43-0400\n" +"POT-Creation-Date: 2020-01-05 23:49-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -107,7 +107,7 @@ msgstr "" #: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431 #: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430 #: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236 -#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414 +#: misc/tune2fs.c:2808 misc/tune2fs.c:2907 resize/main.c:414 #, c-format msgid "while trying to open %s" 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,81 +527,81 @@ 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:1009 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 "" @@ -609,7 +609,7 @@ msgstr "" msgid "Pass 2" msgstr "" -#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246 +#: e2fsck/pass2.c:1082 e2fsck/pass2.c:1249 msgid "Can not continue." msgstr "" @@ -3100,7 +3100,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:2998 misc/util.c:129 #: resize/main.c:354 #, c-format msgid "while determining whether %s is mounted." @@ -3261,7 +3261,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 +3328,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:2696 misc/mke2fs.c:2747 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,7 +3337,7 @@ 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:2736 misc/tune2fs.c:2759 #: resize/main.c:222 #, c-format msgid "while trying to delete %s" @@ -3949,8 +3949,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 +3959,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 "" @@ -4243,7 +4243,7 @@ msgstr "" msgid "reading MMP block %llu from '%s'\n" msgstr "" -#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027 +#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2039 msgid "Couldn't allocate memory to parse options!\n" msgstr "" @@ -4276,7 +4276,7 @@ msgstr "" msgid "\tUsing %s\n" msgstr "" -#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913 +#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2925 #: resize/main.c:416 msgid "Couldn't find valid filesystem superblock.\n" msgstr "" @@ -4300,8 +4300,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 +4312,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 +4571,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:3129 #, c-format msgid "Warning: label too long, truncating.\n" msgstr "" @@ -4586,7 +4586,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 "" @@ -4892,51 +4892,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:3025 #, 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 "" @@ -5219,7 +5219,7 @@ msgstr "" msgid "Invalid offset: %s\n" msgstr "" -#: misc/mke2fs.c:881 misc/tune2fs.c:2055 +#: misc/mke2fs.c:881 misc/tune2fs.c:2067 #, c-format msgid "Invalid mmp_update_interval: %s\n" msgstr "" @@ -5380,7 +5380,7 @@ msgstr "" msgid "'-R' is deprecated, use '-E' instead" msgstr "" -#: misc/mke2fs.c:1688 misc/tune2fs.c:1784 +#: misc/mke2fs.c:1688 misc/tune2fs.c:1796 #, c-format msgid "bad error behavior - %s" msgstr "" @@ -5804,7 +5804,7 @@ msgstr "" msgid "while reserving blocks for online resize" msgstr "" -#: misc/mke2fs.c:3291 misc/tune2fs.c:1492 +#: misc/mke2fs.c:3291 misc/tune2fs.c:1504 msgid "journal" msgstr "" @@ -5821,7 +5821,7 @@ msgid "" 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/mk_hugefiles.c:600 misc/tune2fs.c:1533 misc/tune2fs.c:1552 msgid "done\n" msgstr "" @@ -5972,19 +5972,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 +6146,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 +6267,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 +6333,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 +6378,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:3010 #, c-format msgid "" "Warning: The journal is dirty. You may wish to replay the journal like:\n" @@ -6446,153 +6454,153 @@ msgid "" "by journal recovery.\n" msgstr "" -#: misc/tune2fs.c:3009 +#: misc/tune2fs.c:3021 #, c-format msgid "Recovering journal.\n" msgstr "" -#: misc/tune2fs.c:3028 +#: misc/tune2fs.c:3040 #, c-format msgid "Setting maximal mount count to %d\n" msgstr "" -#: misc/tune2fs.c:3034 +#: misc/tune2fs.c:3046 #, c-format msgid "Setting current mount count to %d\n" msgstr "" -#: misc/tune2fs.c:3039 +#: misc/tune2fs.c:3051 #, c-format msgid "Setting error behavior to %d\n" msgstr "" -#: misc/tune2fs.c:3044 +#: misc/tune2fs.c:3056 #, c-format msgid "Setting reserved blocks gid to %lu\n" msgstr "" -#: misc/tune2fs.c:3049 +#: misc/tune2fs.c:3061 #, c-format msgid "interval between checks is too big (%lu)" msgstr "" -#: misc/tune2fs.c:3056 +#: misc/tune2fs.c:3068 #, c-format msgid "Setting interval between checks to %lu seconds\n" msgstr "" -#: misc/tune2fs.c:3063 +#: misc/tune2fs.c:3075 #, c-format msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n" msgstr "" -#: misc/tune2fs.c:3069 +#: misc/tune2fs.c:3081 #, c-format msgid "reserved blocks count is too big (%llu)" msgstr "" -#: misc/tune2fs.c:3076 +#: misc/tune2fs.c:3088 #, c-format msgid "Setting reserved blocks count to %llu\n" msgstr "" -#: misc/tune2fs.c:3081 +#: misc/tune2fs.c:3093 msgid "" "\n" "The filesystem already has sparse superblocks.\n" msgstr "" -#: misc/tune2fs.c:3084 +#: misc/tune2fs.c:3096 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:3106 #, c-format msgid "" "\n" "Sparse superblock flag set. %s" msgstr "" -#: misc/tune2fs.c:3099 +#: misc/tune2fs.c:3111 msgid "" "\n" "Clearing the sparse superblock flag not supported.\n" msgstr "" -#: misc/tune2fs.c:3107 +#: misc/tune2fs.c:3119 #, c-format msgid "Setting time filesystem last checked to %s\n" msgstr "" -#: misc/tune2fs.c:3113 +#: misc/tune2fs.c:3125 #, c-format msgid "Setting reserved blocks uid to %lu\n" msgstr "" -#: misc/tune2fs.c:3145 +#: misc/tune2fs.c:3157 msgid "Error in using clear_mmp. It must be used with -f\n" msgstr "" -#: misc/tune2fs.c:3163 +#: misc/tune2fs.c:3175 msgid "" "The quota feature may only be changed when the filesystem is unmounted.\n" msgstr "" -#: misc/tune2fs.c:3181 +#: misc/tune2fs.c:3193 msgid "Setting the UUID on this filesystem could take some time." msgstr "" -#: misc/tune2fs.c:3196 +#: misc/tune2fs.c:3208 msgid "The UUID may only be changed when the filesystem is unmounted.\n" msgstr "" -#: misc/tune2fs.c:3199 +#: misc/tune2fs.c:3211 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:3241 msgid "Invalid UUID format\n" msgstr "" -#: misc/tune2fs.c:3245 +#: misc/tune2fs.c:3257 msgid "Need to update journal superblock.\n" msgstr "" -#: misc/tune2fs.c:3267 +#: misc/tune2fs.c:3279 msgid "The inode size may only be changed when the filesystem is unmounted.\n" msgstr "" -#: misc/tune2fs.c:3274 +#: misc/tune2fs.c:3286 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:3304 #, c-format msgid "Setting inode size %lu\n" msgstr "" -#: misc/tune2fs.c:3296 +#: misc/tune2fs.c:3308 msgid "Failed to change inode size\n" msgstr "" -#: misc/tune2fs.c:3310 +#: misc/tune2fs.c:3322 #, c-format msgid "Setting stride size to %d\n" msgstr "" -#: misc/tune2fs.c:3315 +#: misc/tune2fs.c:3327 #, c-format msgid "Setting stripe width to %d\n" msgstr "" -#: misc/tune2fs.c:3322 +#: misc/tune2fs.c:3334 #, c-format msgid "Setting extended default mount options to '%s'\n" msgstr "" @@ -7091,7 +7099,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.5" msgstr "" #: lib/ext2fs/ext2_err.c:12 @@ -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: 2019-12-27 12:44+0800\n" "Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>\n" "Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\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.2.4\n" #: e2fsck/badblocks.c:23 misc/mke2fs.c:220 #, c-format @@ -384,7 +384,7 @@ msgstr "" #: e2fsck/message.c:140 #, fuzzy msgid "rroot @i" -msgstr "<i>(tiada cadangan)</i>" +msgstr "@u @z @i %i. " #: e2fsck/message.c:141 #, fuzzy @@ -542,7 +542,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" @@ -590,7 +590,7 @@ 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 @@ -723,9 +723,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 @@ -1026,7 +1024,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 @@ -1403,7 +1401,7 @@ msgstr "" #: e2fsck/problem.c:512 #, fuzzy msgid "Invalid %U @q @i %i. " -msgstr "@i %i (%Q) adalah @I FIFO.\n" +msgstr "@u @z @i %i. " #. @-expanded: superblock would have too many inodes (%N).\n #: e2fsck/problem.c:517 @@ -1456,7 +1454,7 @@ msgstr "" #: e2fsck/problem.c:562 #, fuzzy, no-c-format msgid "@i %i is a @z @d. " -msgstr "/@l adalah bukan sejenis @d (ino=%i)\n" +msgstr "@u @z @i %i. " #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n #: e2fsck/problem.c:567 @@ -1726,7 +1724,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 +2237,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 @@ -2291,9 +2289,7 @@ msgstr "" #: e2fsck/problem.c:1344 #, fuzzy, no-c-format msgid "Couldn't clone file: %m\n" -msgstr "" -"Tidak dapat membaiki induk untuk @i %i: %m\n" -"\n" +msgstr "Tidak dapat membuka fail profil" #. @-expanded: Pass 1E: Optimizing extent trees\n #: e2fsck/problem.c:1350 @@ -2358,7 +2354,7 @@ msgstr "" #: e2fsck/problem.c:1414 #, fuzzy msgid "@E @L to '.' " -msgstr "/@l tidak dijumpai." +msgstr "@E adalah salinan '.' @e.\n" #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n #: e2fsck/problem.c:1419 @@ -2927,15 +2923,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 "<i>(tiada cadangan)</i>" +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 "<i>(tiada cadangan)</i>" +msgstr "@u @i %i\n" #. @-expanded: inode %i ref count is %Il, should be %N. #: e2fsck/problem.c:1981 @@ -2956,7 +2952,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_frag @F %N, @s sifar.\n" #. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n #: e2fsck/problem.c:1997 @@ -3226,7 +3222,7 @@ msgstr[0] "ketika menetapkan inod blok buruk" #, fuzzy, c-format msgid "%12u large file\n" msgid_plural "%12u large files\n" -msgstr[0] "%s adalah terlalu besar" +msgstr[0] "%12u fifo\n" #: e2fsck/unix.c:202 #, fuzzy, c-format @@ -3236,13 +3232,13 @@ msgid "" msgid_plural "" "\n" "%12u regular files\n" -msgstr[0] "Mencipta fail biasa %s\n" +msgstr[0] "fail biasa" #: e2fsck/unix.c:204 #, fuzzy, c-format msgid "%12u directory\n" msgid_plural "%12u directories\n" -msgstr[0] "direktori" +msgstr[0] "%12u fifo\n" #: e2fsck/unix.c:206 #, fuzzy, c-format @@ -3257,16 +3253,16 @@ 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 msgid "%12u link\n" msgid_plural "%12u links\n" -msgstr[0] "Pautan ke %s\n" +msgstr[0] "%12u fifo\n" #: e2fsck/unix.c:215 #, fuzzy, c-format @@ -3284,13 +3280,13 @@ msgstr[0] "pautan simbolik" #, fuzzy, c-format msgid "%12u socket\n" msgid_plural "%12u sockets\n" -msgstr[0] "soket" +msgstr[0] "%12u fifo\n" #: e2fsck/unix.c:225 #, fuzzy, c-format msgid "%12u file\n" msgid_plural "%12u files\n" -msgstr[0] " Fail: ..." +msgstr[0] "%12u fifo\n" #: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129 #: resize/main.c:354 @@ -3301,7 +3297,7 @@ msgstr "ketika menentukan sama ada %s telah dilekapkan." #: e2fsck/unix.c:259 #, fuzzy, c-format msgid "Warning! %s is mounted.\n" -msgstr "\tterakhir dilekapkan pada %s" +msgstr "\tterakhir dilekapkan pada %s pada %s" #: e2fsck/unix.c:262 #, fuzzy, c-format @@ -3778,9 +3774,8 @@ msgid "nN" msgstr "tTnN" #: e2fsck/util.c:198 -#, fuzzy msgid "aA" -msgstr "Ss" +msgstr "aA" #: e2fsck/util.c:202 #, fuzzy @@ -3788,9 +3783,8 @@ msgid " ('a' enables 'yes' to all) " msgstr "Semua" #: e2fsck/util.c:219 -#, fuzzy msgid "<y>" -msgstr "\t\tY: " +msgstr "<y>" #: e2fsck/util.c:221 #, fuzzy @@ -3942,7 +3936,7 @@ 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 @@ -4423,13 +4417,15 @@ msgstr "(0x%x, '%s') " #: misc/dumpe2fs.c:263 msgid "," -msgstr "" +msgstr "," #: misc/dumpe2fs.c:265 msgid "" "\n" " " msgstr "" +"\n" +" " #: misc/dumpe2fs.c:266 #, fuzzy @@ -4795,7 +4791,7 @@ msgstr "" #: misc/e2image.c:1663 #, fuzzy msgid "Can not stat output\n" -msgstr "Keluaran:\n" +msgstr "ketika cuba untuk stat %s" #: misc/e2image.c:1673 #, fuzzy, c-format @@ -4999,7 +4995,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 @@ -5324,7 +5320,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 @@ -5442,7 +5438,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 @@ -5695,7 +5691,7 @@ msgstr "" #: misc/mke2fs.c:1661 #, fuzzy, c-format msgid "invalid cluster size - %s" -msgstr "saiz blok tidak sah - %s" +msgstr "saiz pecahan tidak sah - %s" #: misc/mke2fs.c:1674 msgid "'-R' is deprecated, use '-E' instead" @@ -6218,7 +6214,7 @@ msgstr "" #: misc/mk_hugefiles.c:583 #, fuzzy msgid "Huge files will be zero'ed\n" -msgstr "Salinan fail" +msgstr " %d fail," #: misc/mk_hugefiles.c:584 #, fuzzy, c-format @@ -6358,14 +6354,14 @@ 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 @@ -7032,18 +7028,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 @@ -7058,7 +7045,7 @@ msgstr "IDENT: connect() gagal: %s." #: misc/uuidd.c:192 #, fuzzy msgid "write" -msgstr "Tidak dapat menulis diluar daripada %s" +msgstr "Tidak dapat menulis salinan: %s" #: misc/uuidd.c:200 #, fuzzy @@ -7068,7 +7055,7 @@ msgstr "Kiraan Perkataan" #: misc/uuidd.c:206 #, fuzzy msgid "bad response length" -msgstr "Panjang stride tidak sah" +msgstr "\t\t\tKekangan Panjang Laluan: %d\n" #: misc/uuidd.c:271 #, c-format @@ -7245,7 +7232,7 @@ msgstr "" #: resize/main.c:507 #, fuzzy, c-format msgid "Invalid new size: %s\n" -msgstr "%s: fail saiz tidak sah" +msgstr "saiz inode tidak sah - %s" #: resize/main.c:526 msgid "New size too large to be expressed in 32 bits\n" @@ -7344,7 +7331,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" @@ -7448,7 +7435,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" @@ -7644,7 +7631,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" @@ -7804,7 +7791,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 "Seksyen telah wujud" #: lib/ext2fs/ext2_err.c:91 msgid "Unimplemented ext2 library function" @@ -8041,7 +8028,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" @@ -8152,7 +8139,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 "Seksyen telah wujud" #: lib/ext2fs/ext2_err.c:167 #, fuzzy @@ -8250,42 +8237,28 @@ msgid "The journal superblock is corrupt" msgstr "ketika membaca superblok jurnal" #: 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" @@ -8329,20 +8302,19 @@ msgstr "" #: 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 +8329,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 3c90b929..7278f478 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -3,6 +3,7 @@ # Dark Raven <drdarkraven@gmail.com>, 2009. # zwpwjwtz <zwpwjwtz@126.com>, 2015. # Mingye Wang (Arthur2e5) <arthur200126@gmail.com>, 2016. +# Boyuan Yang <073plan@gmail.com>, 2019. # #. The strings in e2fsck's problem.c can be very hard to translate, #. since the strings are expanded in two different ways. First of all, @@ -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 <blk> block number #. %B "indirect block" | "block #"<blkcount> string | string+integer #. %c <blk2> 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) <arthur200126@gmail.com>\n" +"POT-Creation-Date: 2019-07-14 20:56-0400\n" +"PO-Revision-Date: 2019-12-24 10:56-0500\n" +"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 2.2.4\n" "X-Poedit-Bookmarks: -1,591,-1,-1,-1,-1,-1,-1,-1,-1\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -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 <device>\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<filesystem metadata>\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=<superblock number>\n" +#| "\tblocksize=<blocksize>\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=<ea_version (1 or 2)>\n" -msgstr "" +msgstr "\tea_ver=<ea_version (1 或 2)>\n" -#: e2fsck/unix.c:771 -#, fuzzy +#: e2fsck/unix.c:778 msgid "\treadahead_kb=<buffer size>\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=<num>] [-o blocksize=<num>] device\n" -msgstr "" -"用法:%s [-bfghixV] [-o superblock=<超级块编号>] [-o blocksize=<块大小>] 设" -"备\n" +#, c-format +msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n" +msgstr "用法:%s [-bfghimxV] [-o superblock=<超级块编号>] [-o blocksize=<块大小>] 设备\n" #: misc/dumpe2fs.c:159 msgid "blocks" @@ -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] <transaction file> " -"<filesystem>\n" -msgstr "用法:%s [-f] [-h] [-n] [-v] <事务文件> <文件系统>\n" +#, c-format +msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n" +msgstr "用法:%s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <事务文件> <文件系统>\n" #: misc/e2undo.c: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=<interval>\n" +#| "\tnum_backup_sb=<0|1|2>\n" +#| "\tstride=<RAID per-disk data chunk in blocks>\n" +#| "\tstripe-width=<RAID stride * data disks in blocks>\n" +#| "\toffset=<offset to create the file system>\n" +#| "\tresize=<resize maximum size in blocks>\n" +#| "\tpacked_meta_blocks=<0 to disable, 1 to enable>\n" +#| "\tlazy_itable_init=<0 to disable, 1 to enable>\n" +#| "\tlazy_journal_init=<0 to disable, 1 to enable>\n" +#| "\troot_owner=<uid of root dir>:<gid of root dir>\n" +#| "\ttest_fs\n" +#| "\tdiscard\n" +#| "\tnodiscard\n" +#| "\tquotatype=<quota type(s) to be enabled>\n" +#| "\n" msgid "" "\n" "Bad option(s) specified: %s\n" @@ -5488,6 +5511,8 @@ msgid "" "\ttest_fs\n" "\tdiscard\n" "\tnodiscard\n" +"\tencoding=<encoding>\n" +"\tencoding_flags=<flags>\n" "\tquotatype=<quota type(s) to be enabled>\n" "\n" msgstr "" @@ -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=<hash algorithm>\n" +#| "\tmount_opts=<extended default mount options>\n" +#| "\tstride=<RAID per-disk chunk size in blocks>\n" +#| "\tstripe_width=<RAID stride*data disks in blocks>\n" +#| "\ttest_fs\n" +#| "\t^test_fs\n" msgid "" "\n" "Bad options specified.\n" @@ -6649,6 +6716,7 @@ msgid "" "\tmmp_update_interval=<mmp update interval in seconds>\n" "\tstride=<RAID per-disk chunk size in blocks>\n" "\tstripe_width=<RAID stride*data disks in blocks>\n" +"\tforce_fsck\n" "\ttest_fs\n" "\t^test_fs\n" msgstr "" @@ -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 "<proceeding>\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/resize2fs.c b/resize/resize2fs.c index c2e10471..8a3d08db 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 b778a92a..30ab7cbd 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 1418a229..4288b969 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/util/android-README.version.in b/util/android-README.version.in index 0fe3cbad..c8a32175 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/gcc-wall-cleanup b/util/gcc-wall-cleanup deleted file mode 100644 index cef7a2dc..00000000 --- a/util/gcc-wall-cleanup +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sed -f -# -# This script filters out gcc-wall crud that we're not interested in seeing. -# -/^cc /d -/^kcc /d -/^gcc /d -/does not support `long long'/d -/forbids long long integer constants/d -/does not support the `ll' length modifier/d -/does not support the `ll' printf length modifier/d -/ANSI C forbids long long integer constants/d -/traditional C rejects string concatenation/d -/integer constant is unsigned in ANSI C, signed with -traditional/d -/ISO C forbids conversion of object pointer to function pointer type/,+2d -/ISO C does not support ‘__FUNCTION__’ predefined identifier/d -/At top level:/d -/In file included from/d -/In function `.*':/d -/zero-length format string/d -/warning: (near initialization for/d -/^[ ]*from/d - diff --git a/util/static-analysis-cleanup b/util/static-analysis-cleanup deleted file mode 100644 index 67492597..00000000 --- a/util/static-analysis-cleanup +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sed -f -# -# This script filters out gcc-wall crud that we're not interested in seeing. -# -/^cc /d -/^kcc /d -/^gcc /d -/does not support `long long'/d -/forbids long long integer constants/d -/does not support the `ll' length modifier/d -/does not support the `ll' printf length modifier/d -/ANSI C forbids long long integer constants/d -/traditional C rejects string concatenation/d -/integer constant is unsigned in ANSI C, signed with -traditional/d -/warning: missing initializer/d -/warning: (near initialization for/d -/^[ ]*from/d -/unused parameter/d -/e2_types.h" not found.$/d -/e2_bitops.h" not found.$/d @@ -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.5" +#define E2FSPROGS_DATE "07-Jan-2020" |