[Forensics-changes] [SCM] debian-forensics/dc3dd branch, debian, updated. upstream/6.12.3-26-g8601a6c
Christophe Monniez
christophe.monniez at fccu.be
Thu Mar 17 14:56:32 UTC 2011
The following commit has been merged in the debian branch:
commit 112267936b5952371ad6ef7e279d2d03cd6b93f9
Author: Christophe Monniez <christophe.monniez at fccu.be>
Date: Thu Mar 17 15:36:16 2011 +0100
Merging upstream version 7.0.0.
diff --git a/.prev-version b/.prev-version
index f867e29..aea5e0b 100644
--- a/.prev-version
+++ b/.prev-version
@@ -1 +1 @@
-6.12.2
+6.12.5
diff --git a/.version b/.version
index ffd41f5..66ce77b 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-6.12.3
+7.0.0
diff --git a/ChangeLog b/ChangeLog
index bbabefd..bbaad77 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+2009-08-28 Richard Cordovano <rcordovano at users.sourceforge.net>
+
+ * Replaced the byte-by-byte verification capability with a verification capability that
+ hashes imaging outputs and compares the hashes to the input hash. The new verification capability
+ does not require a second read of the device.
+ * Enhanced the ability to generate multiple outputs by adding the capability to combine split and unsplit
+ outputs.
+ * Added the ability for the user to specify a sector size via the command line.
+ * Added display/logging of results of device size probes. Size probes are now always performed, providing
+ run statistics in most use cases (reading from standard input excepted).
+ * Added display/logging of size statistics for each file in an input or output split.
+ * Simplified the command line options and removed all legacy dd features not needed for imaging. The simplified
+ command line is more rigorously validated to reduce the likelihood of performing a run contrary to user
+ intent in order to avoid a second read of a device.
+ * Removed the progress=on command line option and the cumbersome INFO signaling protocol for
+ obtaining a progress report. Instead, a progress bar is always displayed.
+ * Added new DEFAULT_IMAGING_MODE compile flag support (equivalent to command line options:
+ recovererrs=on, grouperrs=on, idirect=on).
+ * Reduced the use of global variables from 71 to 9, reduced function lengths, and
+ removed several instances of code duplication.
+ * Introduced a program architecture that replaces a single loop with a jobs abstraction, allowing execution
+ of an arbitrary chain of jobs, each composed of one or more tasks that execute in parallel. The new
+ program architecture is designed to allow for the transparent addition of multi-step processing
+ scenarios such as the new verification capability.
+
+
+2009-05-11 Richard Cordovano <rcordovano at users.sourceforge.net>
+
+ * Added ability to generate multiple outputs simultaneously by supporting multiple
+ of, vf, and vfjoin command line arguments.
+
+2009-04-01 Andrew Medico <amedico at users.sourceforge.net>
+
+ * Put hashing and disk I/O into dedicated threads to increase
+ throughput.
+
+ As a side effect, removed cbs and conv=ascii/ebcdic/ibm/(un)block/lcase/swab
+ command-line options since they don't apply to the goal of disk imaging.
+
+ Also removed hashconv option and set behavior to hashconv=after.
+
+
+2009-03-24 Andrew Medico <amedico at users.sourceforge.net>
+
+ * Added ability to detect HPA / DCO hidden areas on ATA drives (Linux only)
+
+
2009-03-16 Andrew Medico <amedico at users.sourceforge.net>
* Fix hashwindow - result buffer was too small, causing incorrect
diff --git a/Makefile.in b/Makefile.in
index 5b10280..073c028 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -102,9 +102,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/alloca.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \
- $(top_srcdir)/m4/host-os.m4 $(top_srcdir)/m4/human.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \
- $(top_srcdir)/m4/iconv_open.m4 $(top_srcdir)/m4/idcache.m4 \
+ $(top_srcdir)/m4/hdparm.m4 $(top_srcdir)/m4/host-os.m4 \
+ $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/iconv_h.m4 $(top_srcdir)/m4/iconv_open.m4 \
+ $(top_srcdir)/m4/idcache.m4 \
$(top_srcdir)/m4/include-exclude-prog.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
@@ -617,6 +618,7 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
U = @U@
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+USE_HDPARM = @USE_HDPARM@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VOID_UNSETENV = @VOID_UNSETENV@
diff --git a/NEWS b/NEWS
index 77cd69a..2032765 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,37 @@
dc3dd NEWS
-* Noteworth changes in release 6.12.3 (2009-03-17)
+* Noteworthy changes in release 7.0.0 (2009-09)
+
+** New Features
+
+ Verification hashes
+ Simplified command line
+ Can mix split and unsplit outputs
+ User-defined sector size
+ Display/logging enhancements
+ More compiled in options support
+
+* Noteworthy changes in release 6.12.5 (2009-05)
+
+** New Features
+
+ Added multiple outputs
+
+* Noteworthy changes in release 6.12.4 (2009-04)
+
+** New Features
+
+ Added HPA/DCO detection capability
+
+ Added multithreading for hashing and disk I/O to increase throughput
+
+** Notes
+
+ Removed obs option, and conv ascii,ebcdic,ibm,block,unblock,lcase,swab options
+
+ Removed hashconv option and set behavior to hashconv=after
+
+* Noteworthy changes in release 6.12.3 (2009-03-17)
** New features
diff --git a/Options_Reference.txt b/Options_Reference.txt
index b993f36..958237a 100644
--- a/Options_Reference.txt
+++ b/Options_Reference.txt
@@ -1,118 +1,165 @@
- ibs=BYTES read BYTES bytes at a time (must be a multiple of input sector size)
- obs=BYTES write BYTES bytes at a time
- bs=BYTES force ibs=BYTES and obs=BYTES
-
-
- conv=CONVS convert the file as per the comma separated symbol list
-
- count=SECTORS copy only SECTORS input sectors
- seek=SECTORS skip SECTORS input sectors at start of output
- skip=SECTORS skip SECTORS input sectors at start of input
- (based on the device's reported sector size)
-
- if=FILE read from FILE instead of stdin
- ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT
-
- iflag=FLAGS read as per the comma separated symbol list
-
-
- pattern=HEX write HEX to every byte of the output
-
- textpattern=TEXT write the string TEXT repeatedly to the output
-
-
- of=FILE write to FILE instead of stdout
- of:=COMMAND pipe output to the given command
-
- oflag=FLAGS write as per the comma separated symbol list
-
-
- split=BYTES split the output into pieces of size BYTES
- Note: BYTES must be a multiple of the device sector size.
-
- splitformat=FMT create extensions for split pieces using FMT
- Extensions can be numerical starting at zero,
- numerical starting at one, or alphabetical.
- These options are selected by using a series of
- zeros, ones, or a's, respectively. The number
- of characters used indicates the desired length of
- the extensions. For example, splitformat=1111
- indicates four character numerical extensions
- starting with 0001.
-
- vf=FILE verify the input against FILE
- vfjoin=BASE.FMT verify the input against split files with name BASE and splitformat FMT
- verifylog=FILE write the results of the verify to the given file
-
- progress=on displays a progress meter
- progresscount=NUM number of blocks processed between each progress update
- Note: excessively frequent progress updates will reduce
- transfer rates. NUM should be chosen to cause updates at most
- a few times per second.
-
- status=noxfer suppress transfer statistics
-
- sizeprobe=on estimates size of input file for use with status
-
- hash=ALGORITHM computes ALGORITHM hashes of the input data
- hashconv=WHEN determines when data should be hashed, either before
- or after conversions
- hashwindow=BYTES number of bytes for piecewise hashing
- hashlog=FILE appends piecewise hashes to the log file
-
- errlog=FILE appends errors to the log file
-
- log=FILE appends hashes and errors to the same file
-
- errors=group group read errors together
-
-
-
-ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512
-
-
-BLOCKS and BYTES may be followed by the following multiplicative suffixes:
-xM M, c 1, w 2, b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
-GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
-
-Each CONV symbol may be:
-
- nocreat do not create the output file
- excl fail if the output file already exists
- notrunc do not truncate the output file
- ucase change lower case to upper case
- swab swap every pair of input bytes
- noerror continue after read errors
- sync pad every input block with NULs to ibs-size; when used
- with block or unblock, pad with spaces rather than NULs
- fdatasync physically write output file data before finishing
- fsync likewise, but also write metadata
-
-Each FLAG symbol may be:
-
- append append mode (makes sense only for output; conv=notrunc suggested)
- direct use direct I/O for data
- directory fail unless a directory
- dsync use synchronized I/O for data
- sync likewise, but also for metadata
- nonblock use non-blocking I/O
- noatime do not update access time
- noctty do not assign controlling terminal from file
- nofollow do not follow symlinks
-
-Sending a USR1 signal to a running `dd' process makes it
-print I/O statistics to standard error and then resume copying.
-
- $ dd if=/dev/zero of=/dev/null& pid=$!
- $ kill -USR1 $pid; sleep 1; kill $pid
- 18335302+0 sectors in
- 18335302+0 sectors out
- 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
-
-Options are:
-
- --help display this help and exit
- --version output version information and exit
- --flags display compile-time flags
-
-Report bugs to <dc3dd at dc3.mil>.
+-----
+usage:
+-----
+
+ ./dc3dd [OPTION 1] [OPTION 2] ... [OPTION N]
+
+ *or*
+
+ ./dc3dd [HELP OPTION]
+
+ where each OPTION is selected from the basic or advanced
+ options listed below, or HELP OPTION is selected from the
+ help options listed below.
+
+--------------
+basic options:
+--------------
+
+ if=FILE Read input from the device or regular file FILE
+ (see note #1 below). This option can only be used
+ once and cannot be combined with ifs=, pat=,
+ or tpat=.
+ ifs=BASE.FMT Read input from a set of files with base name
+ BASE and sequential file name extensions
+ conforming to the format specifier FMT (see
+ note #4 below). This option can only be used once
+ and cannot be combined with if=, pat=, or
+ tpat=.
+ of=FILE Write output to FILE (see note #2 below). This
+ option can be used more than once (see note #3
+ below).
+ hof=FILE Write output to FILE and verify FILE after
+ writing it by hashing it and comparing the output
+ hash(es) to the input hash(es). This option can be
+ used more than once (see note #3 below).
+ ofs=BASE.FMT Write output to a set of files with base name BASE
+ and sequential file name extensions generated from
+ the format specifier FMT (see note #4 below). This
+ option can be used more than once (see note #3
+ below). Specify the maximum size of each file
+ in the set using ofsz=.
+ hofs=BASE.FMT Write output to a set of files with base name BASE
+ and sequential file name extensions generated from
+ the format specifier FMT (see note #4 below).
+ Verify the files after writing them by hashing
+ them and comparing the output hash(es) to the input
+ hash(es). This option can be used more than once
+ (see note #3 below). Specify the maximum size of
+ each file in the set using ofsz=.
+ ofsz=BYTES Set the maximum size of each file in the sets of
+ files specified using ofs= or hofs= to
+ BYTES (see note #5 below). A default value for
+ this option may be set at compile time using
+ -DDEFAULT_OUTPUT_FILE_SIZE followed by the desired
+ value in BYTES.
+ hash=ALGORITHM Compute an ALGORITHM hash of the input and also
+ of any outputs specified using hof= or hofs=,
+ where ALGORITHM is one of md5, sha1, sha256, or
+ sha512. This option may be used once for each
+ supported ALGORITHM. Alternatively, hashing can
+ be activated at compile time using one or more of
+ -DDEFAULT_HASH_MD5,-DDEFAULT_HASH_SHA1,
+ -DDEFAULT_HASH_SHA256, and -DDEFAULT_HASH_SHA512.
+ log=FILE Log I/O statistcs, diagnostics, and total hashes
+ of input and output to FILE. If hlog= is not
+ specified, piecewise hashes of multiple file
+ input and output are also logged to FILE.
+ hlog=FILE Log total hashes and piecewise hashes to FILE.
+
+-----------------
+advanced options:
+-----------------
+
+ rec=off By default, zeros are written to the output(s) in
+ place of bad sectors when the input is a device.
+ Use this option to cause the program to instead
+ exit when a bad sector is encountered.
+ wipe=DEVICE Wipe DEVICE by writing zeros (default) or a
+ pattern specified by pat= or tpat=.
+ vwipe=DEVICE Wipe DEVICE by writing zeros (default) or a
+ pattern specified by pat= or tpat=.
+ Verify DEVICE after writing it by hashing it
+ and comparing the hash(es) to the input hash(es).
+ pat=HEX Use pattern as input, writing HEX to every byte
+ of the output. This option can only be used once
+ and cannot be combined with if=, ifs=, or
+ tpat=.
+ tpat=TEXT Use text pattern as input, writing the string TEXT
+ repeatedly to the output. This option can only be
+ used once and cannot be combined with if=, ifs=,
+ or pat=.
+ cnt=SECTORS Input only SECTORS input sectors. Must be used with
+ pat= or tpat= if not using the pattern
+ with wipe= or vwipe= to wipe a device.
+ iskip=SECTORS Skip SECTORS sectors at start of the input device
+ or file.
+ oskip=SECTORS Skip SECTORS sectors at start of the output
+ file. Specifying oskip= automatically
+ sets app=on.
+ app=on Do not overwrite an output file specified with
+ of= if it already exists, appending output instead.
+ ssz=BYTES Unconditionally use BYTES (see note #5 below) bytes
+ for sector size. If ssz= is not specified,
+ sector size is determined by probing the device;
+ if the probe fails or the target is not a device,
+ a sector size of 512 bytes is assumed.
+ bufsz=BYTES Set the size of the internal byte buffers to BYTES
+ (see note #5 below). This effectively sets the
+ maximum number of bytes that may be read at a time
+ from the input. BYTES must be a multiple of sector
+ size. Use this option to fine-tune performance.
+ verb=on Activate verbose reporting, where sectors in/out
+ are reported for each file in sets of files
+ specified using ifs=, ofs=, or hofs=.
+ Alternatively, verbose reporting may be
+ activated at compile time using
+ -DDEFAULT_VERBOSE_REPORTING.
+ nwspc=on Activate compact reporting, where the use
+ of white space to divide log output into
+ logical sections is suppressed. Alternatively,
+ compact reporting may be activated at compile
+ time using -DDEFAULT_COMPACT_REPORTING.
+ b10=on Activate base 10 bytes reporting, where the
+ progress display reports 1000 bytes instead
+ of 1024 bytes as 1 KB. Alternatively, base 10
+ bytes reporting may be activated at compile
+ time using -DDEFAULT_DECIMAL_BYTES_REPORTING.
+ corruptoutput=on For verification testing and demonstration
+ purposes, corrupt the output file(s) with extra
+ bytes so a hash mismatch is guaranteed.
+
+-------------
+help options:
+-------------
+
+ --help display this help and exit
+ --version output version information and exit
+ --flags display compile-time flags and exit
+
+------
+notes:
+------
+
+1. To read from stdin, do not specify if=, ifs=, pat=, or tpat=.
+2. To write to stdout, do not specify of=, hof=, ofs=, hofs=, wipe=,
+ or vwipe=.
+3. To write to multiple outputs specify more than one of of=, hof=, ofs=,
+ or hofs=, in any combination.
+4. FMT is a pattern for a sequence of file extensions that can be numerical
+ starting at zero, numerical starting at one, or alphabetical. Specify FMT
+ by using a series of zeros, ones, or a's, respectively. The number of
+ characters used indicates the desired length of the extensions.
+ For example, a FMT specifier of 1111 indicates four character
+ numerical extensions starting with 0001.
+5. BYTES may be followed by the following multiplicative suffixes:
+ c (1), w (2), b (512), kB (1000), K (1024), MB (1000*1000),
+ M (1024*1024), GB (1000*1000*1000), G (1024*1024*1024), and
+ so on for T, P, E, Z, and Y.
+6. Consider using cnt=, iskip= and oskip= to work around
+ unreadable sectors if error recovery fails.
+7. Sending an interrupt (e.g., CTRL+C) to dc3dd will cause
+ the program to report the work completed at the time
+ the interrupt is received and then exit.
+
+Report bugs to <dc3dd at dc3.mil>.
diff --git a/README b/README
index d7c2e9f..77b4c7f 100644
--- a/README
+++ b/README
@@ -1,149 +1,105 @@
-dc3dd 6.12.3
-DCCI
-Andrew Medico
-2008-12-03
-
-
-New Features:
-
-
-Error Recovery:
-dc3dd 6.12 includes a new dynamic error recovery mode. dc3dd now reads large
-blocks (32KB) by default, which results in much higher transfer rates.
-When an error is encountered, dc3dd no longer drops the entire block but instead
-goes back to the beginning of the block and reads one sector at a time to recover
-all the valid data on the drive.
-
-* The mode is automatically enabled when the "conv=noerror,sync" command line
- option is used. In order to make recovery effective, OS read caching must
- be disabled by:
-
- Linux / Unix / Cygwin (Windows):
- Add the "iflag=direct" command line option, or "-DDEFAULT_IFLAG_DIRECT" compile option.
-
- Mac OS X:
- Use /dev/rdisk* instead of /dev/disk*
-
-* "conv=sync,noerror" must also be present in command line.
-
-Example Command Line:
-# dc3dd if=/dev/sda of=sda.img conv=sync,noerror iflag=direct bs=262144 hash=md5,sha1 log=sda_log.txt
-
-
-
-Default Block Size:
-* The new default block size is 32KB (32,768 bytes).
-
-* The default block size may be overridden by the "bs=X" command line option
- or the "-DDEFAULT_BLOCKSIZE=X" compile option.
-
-
-
-Sector Input/Output:
-* Errors messages now report absolute sector addresses, based on the device's
- reported sector size.
-
-* The "count=X", "skip=X", and "seek=X" options all take sector counts.
-
-
-
-Built-in Join:
-dc3dd can now automatically join split files, for verification or input/output.
-
-Split output to CD-size images:
-# dc3dd if=/dev/sda of=sda.cd_size.img split=650M splitformat=000
-
-# Verify split output against source device:
-# dc3dd if=/dev/sda vfjoin=sda.cd_size.img.000
-
-# Read in split files and re-output to DVD-size images:
-# dc3dd ifjoin=sda.cd_size.img.000 of=sda.dvd_size.img split=4700M splitformat=000
-
-
-
-Building dc3dd:
-
-dc3dd is distributed as source code and must be compiled before use.
-The default configuration can be built and installed to /usr/local/bin
-with the following commands:
-
-$ tar zxvf dc3dd-6.12.3.tar.gz
-$ cd dc3dd-6.12.3
-$ ./configure
-$ make
-$ sudo make install
-
-
-Note: dependencies autoconf-1.10.1 and gperf may need to be installed
-
-Custom Configuration:
-
-dc3dd can be customized at compile-time with various options.
-The available options are as follows:
-
-(Unless otherwise noted, compile-time options can be overridden
-by their command-line equivalents)
-
--DDEFAULT_BLOCKSIZE=bytes
-equivalent to bs=BYTES command-line option
-
--DDEFAULT_HASH_MD5
--DDEFAULT_HASH_SHA1
--DDEFAULT_HASH_SHA256
--DDEFAULT_HASH_SHA512
-equivalent to hash={md5,sha1,sha256,sha512}
-
--DDEFAULT_HASHCONV_AFTER
-equivalent to hashconv=after
-
--DDEFAULT_HASHCONV_BEFORE
-equivalent to hashconv=before
-
--DDEFAULT_SIZEPROBE
-equvalent to sizeprobe=on
-Cannot be overridden via command-line
-
--DDEFAULT_PROGRESS
-equivalent to progress=on
-Cannot be overridden via command-line
-
--DDEFAULT_PROGRESSCOUNT=blocks
-equivalent to progresscount=BLOCKS
-
--DDEFAULT_IFLAG_DIRECT
-equivalent to iflag=direct
-Cannot be overridden via command-line
-
-These options are enabled by including them in the CFLAGS argument to configure.
-For example, to enable MD5 hashing and progress display:
-
-$ ./configure CFLAGS="-O2 -DDEFAULT_HASH_MD5 -DDEFAULT_PROGRESS -DDEFAULT_PROGRESSCOUNT=1000"
-
-
-Static Compilation:
-The program can be statically linked by adding "-static" to the CFLAGS
-compile options:
-
-$ ./configure CFLAGS="-O2 -static"
-
-
-
-Portability Notes:
-
-Mac OS X:
-* iflag=direct is not available. Instead, use /dev/rdisk* (vs. /dev/disk*)
-
-Windows:
-* dc3dd can be compiled using Cygwin, but bad sectors can put the program into
- an infinite loop due to bugs in Cygwin.
-
-Performance Notes:
-
-* When using the progress display (progress=on / DEFAULT_PROGRESS),
- it is important to set the progresscount to a sufficiently large value.
- Setting a value that is too small will cause excessively frequent updates
- and limit throughput. The best value will depend on the block size used and
- the transfer rate of the drives/interfaces.
-
-Please send all correspondence to: dc3dd at dc3.mil
-
+dc3dd 7.0.0
+DCCI
+Richard Cordovano
+2009-09-11
+
+New Features:
+-------------
+The command line options supported by dc3dd are significantly changed in
+7.0.0. For a full listing of the command line options, please consult
+Options_Reference.txt or execute dc3dd using the --help option:
+
+$ ./dc3dd --help
+
+The command line is now more rigorously validated to reduce the
+likelihood of performing a run contrary to user intent. This is done
+to minimize reading of the input device. Examples of command lines for
+common uses of dc3dd are provided in Sample_Commands.txt.
+
+Release 7.0.0 replaces the byte-by-byte comparison verification
+capability of prior releases with a verification capability that hashes
+imaging outputs and compares output hash(es) to input hash(es). This
+new verification capability does not require a second read of the input
+device.
+
+It is now possible to specify more than one output file and to mix split
+and unsplit outputs, where splitting an output refers to writing to a
+set of files rather than to a single file.
+
+Devices are now always probed for size, and the size of the device in
+sectors and sector size is reported. It is however, also now possible to
+explicitly specify the sector size dc3dd is to use, overriding the
+probed sector size (for devices) or assumed sector size (for files).
+
+Progress display is now always on and various options for formatting
+output are now provided.
+
+Building dc3dd:
+---------------
+dc3dd is distributed as source code and must be compiled before use.
+The default configuration can be built and installed to /usr/local/bin
+with the following commands:
+
+$ tar zxvf dc3dd-7.0.0.tar.gz
+$ cd dc3dd-7.0.0
+$ ./configure
+$ make
+$ sudo make install
+
+Note that autoconf-1.10.1 and gperf may need to be installed prior to
+execution of the above commands.
+
+dc3dd can be customized at compile-time with various options.
+The available options are as follows, and can be verified after
+compilation using the --flags command line option:
+
+-DDEFAULT_HASH_MD5
+(equivalent to hash=md5 command-line option)
+
+-DDEFAULT_HASH_SHA1
+(equivalent to hash=sha1 command-line option)
+
+-DDEFAULT_HASH_SHA256
+(equivalent to hash=sha256 command-line option)
+
+-DDEFAULT_HASH_SHA512
+(equivalent to hash=sha512 command-line option)
+
+-DDEFAULT_OUTPUT_FILE_SIZE=BYTES
+(equivalent to ofsz=BYTES command-line option)
+
+-DDEFAULT_VERBOSE_REPORTING
+(equivalent to verb=on command-line option)
+
+-DDEFAULT_COMPACT_REPORTING
+(equivalent to nwspc=on command-line option)
+
+-DDEFAULT_DECIMAL_BYTES_REPORTING
+(equivalent to dbr=on command-line option)
+
+--enable-hpadco
+Enable checking ATA/SATA drives for hidden areas
+No command-line equivalent, cannot be overridden.
+
+These options are enabled by including them in the CFLAGS argument to
+configure. For example, to enable MD5 hashing and default output file
+size:
+
+$ ./configure CFLAGS="-O2 -DDEFAULT_HASH_MD5
+-DDEFAULT_OUTPUT_FILE_SIZE=1900M"
+
+The program can be statically linked by adding "-static" to the CFLAGS
+compile options:
+
+$ ./configure CFLAGS="-O2 -static"
+
+Portability Notes:
+------------------
+Mac OS X:
+To enable error recovery, use /dev/rdisk* instead of /dev/disk*
+
+Windows:
+dc3dd can be compiled using Cygwin, but bad sectors can put the program
+into an infinite loop due to bugs in Cygwin.
+
+Please send all correspondence to: dc3dd at dc3.mil
diff --git a/Sample_Commands.txt b/Sample_Commands.txt
index 4acd6b8..c76ea0e 100644
--- a/Sample_Commands.txt
+++ b/Sample_Commands.txt
@@ -1,49 +1,34 @@
-Examples:
-
-(assumes dc3dd compiled with: ./configure CFLAGS="-O2 -DDEFAULT_HASHCONV_AFTER")
-
-
-Imaging a hard drive to a single image file with logging and hashing:
-dc3dd if=/dev/sda of=suspect.img hash=md5,sha1 log=suspect.txt
-
-Imaging a hard drive to a single image file with logging and hashing, using a large block size:
-dc3dd if=/dev/sda of=suspect.img bs=262144 hash=md5,sha1 log=suspect.txt
-
-Imaging a hard drive with errors to a single image file with logging and hashing:
-dc3dd if=/dev/sda of=suspect.img conv=sync,noerror iflag=direct hash=md5,sha1 log=suspect.txt
-
-
-Imaging a hard drive to CD-sized split images with logging and hashing:
-dc3dd if=/dev/sda of=suspect.img split=650M splitformat=000 hash=md5,sha1 log=suspect.txt
-
-
-
-Verifying an acquired single image file:
-dc3dd if=/dev/sda vf=suspect.img log=suspect.txt
-
-Verifying an acquired split image:
-dc3dd if=/dev/sda vfjoin=suspect.img.000 log=suspect.txt
-
-
-
-Wiping a drive:
-dc3dd wipe=/dev/sdb log=wipe.txt
-
-Verifying a wipe:
-dc3dd pattern=00 vf=/dev/sdb log=wipe.txt
-
-
-
-Restoring a single image file to a blank drive:
-dc3dd if=suspect.img of=/dev/sdb hash=md5,sha1 log=suspect-restore.txt
-
-Restoring a split image to a blank drive:
-dc3dd ifjoin=suspect.img.000 of=/dev/sdb hash=md5,sha1 log=suspect-restore.txt
-
-
-
-Verifying a single image file restore:
-dc3dd if=suspect.img vf=/dev/sdb log=suspect-restore.txt
-
-Verifying a split image restore:
-dc3dd ifjoin=suspect.img.000 vf=/dev/sdb log=suspect-restore.txt
+Examples:
+--------
+Imaging a device to a single output file with generation of md5 and sha1
+hashes of the device:
+
+$ ./dc3dd if=/dev/sda of=suspect.img hash=md5 hash=sha1 log=suspect.txt
+
+Imaging a device to a set of CD-sized output files with generation of
+md5 and and sha1 hashes of the device:
+
+$ ./dc3dd if=/dev/sda ofs=suspect.img.000 ofsz=650M hash=md5 hash=sha1
+log=suspect.txt
+
+Imaging a device to both a single output file and to a set of CD-sized
+output files with generation of md5 and sha1 hashes of the hard device:
+
+$ ./dc3dd if=/dev/sda of=suspect.img of=suspect.img ofs=suspect.img.000
+ofsz=650M hash=md5 hash=sha1 log=suspect.txt
+
+Imaging a device to both a single output file and to a set of CD-sized
+output files with generation of md5 and sha1 hashes of the hard device
+and md5 and sha1 hashes of the outputs:
+
+$ ./dc3dd if=/dev/sda of=suspect.img hof=suspect.img hofs=suspect.img.000
+ofsz=650M hash=md5 hash=sha1 log=suspect.txt
+
+Restoring a set of image files to a blank drive with verification hashes of the drive after it is written:
+$ ./dc3dd ifs=suspect.img.000 hof=/dev/sdb hash=md5 hash=sha1 log=suspect-restore.txt
+
+Wiping a drive:
+$ ./dc3dd wipe=/dev/sdb log=wipe.txt
+
+Wiping a drive with verification:
+$ ./dc3dd vwipe=/dev/sdb hash=md5 hash=sha1 log=wipe.txt
diff --git a/aclocal.m4 b/aclocal.m4
index 433fb40..bc45115 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1010,6 +1010,7 @@ m4_include([m4/gnulib-common.m4])
m4_include([m4/gnulib-comp.m4])
m4_include([m4/hard-locale.m4])
m4_include([m4/hash.m4])
+m4_include([m4/hdparm.m4])
m4_include([m4/host-os.m4])
m4_include([m4/human.m4])
m4_include([m4/iconv.m4])
diff --git a/configure b/configure
index d56c571..333de10 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for dc3dd 6.12.3.
+# Generated by GNU Autoconf 2.61 for dc3dd 7.0.0.
#
# Report bugs to <dc3dd at dc3.mil>.
#
@@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='dc3dd'
PACKAGE_TARNAME='dc3dd'
-PACKAGE_VERSION='6.12.3'
-PACKAGE_STRING='dc3dd 6.12.3'
+PACKAGE_VERSION='7.0.0'
+PACKAGE_STRING='dc3dd 7.0.0'
PACKAGE_BUGREPORT='dc3dd at dc3.mil'
ac_unique_file="src/dc3dd.c"
@@ -1045,6 +1045,9 @@ ANSI2KNR
LIBOBJS
LIB_FDATASYNC
SEQ_LIBM
+COND_USE_HDPARM_TRUE
+COND_USE_HDPARM_FALSE
+USE_HDPARM
LIB_CRYPT
INSTALL_SU
OPTIONAL_BIN_PROGS
@@ -1583,7 +1586,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures dc3dd 6.12.3 to adapt to many kinds of systems.
+\`configure' configures dc3dd 7.0.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1653,7 +1656,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of dc3dd 6.12.3:";;
+ short | recursive ) echo "Configuration of dc3dd 7.0.0:";;
esac
cat <<\_ACEOF
@@ -1665,6 +1668,7 @@ Optional Features:
--disable-assert turn off assertions
--disable-rpath do not hardcode runtime library paths
--disable-largefile omit support for large files
+ --enable-hdparm use hdparm code to check for HPA/DCO on ATA drives
--disable-nls do not use Native Language Support
Optional Packages:
@@ -1766,7 +1770,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-dc3dd configure 6.12.3
+dc3dd configure 7.0.0
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1780,7 +1784,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by dc3dd $as_me 6.12.3, which was
+It was created by dc3dd $as_me 7.0.0, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2590,7 +2594,7 @@ fi
# Define the identity of the package.
PACKAGE='dc3dd'
- VERSION='6.12.3'
+ VERSION='7.0.0'
cat >>confdefs.h <<_ACEOF
@@ -59289,6 +59293,28 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ { echo "$as_me:$LINENO: checking whether hdparm support is requested" >&5
+echo $ECHO_N "checking whether hdparm support is requested... $ECHO_C" >&6; }
+ # Check whether --enable-hdparm was given.
+if test "${enable_hdparm+set}" = set; then
+ enableval=$enable_hdparm; USE_HDPARM=$enableval
+else
+ USE_HDPARM=no
+fi
+
+ if test x$USE_HDPARM == xyes; then
+ COND_USE_HDPARM_TRUE=
+ COND_USE_HDPARM_FALSE='#'
+else
+ COND_USE_HDPARM_TRUE='#'
+ COND_USE_HDPARM_FALSE=
+fi
+
+ { echo "$as_me:$LINENO: result: $USE_HDPARM" >&5
+echo "${ECHO_T}$USE_HDPARM" >&6; }
+
+
+
for ac_header in vfork.h
do
@@ -64278,6 +64304,16 @@ _ACEOF
+
+ if test "$USE_HDPARM" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_HDPARM 1
+_ACEOF
+
+ fi
+
+
# For a test of uniq: it uses the $LOCALE_FR envvar.
@@ -64561,6 +64597,13 @@ fi
gltests_LTLIBOBJS=$gltests_ltlibobjs
+if test -z "${COND_USE_HDPARM_TRUE}" && test -z "${COND_USE_HDPARM_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"COND_USE_HDPARM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"COND_USE_HDPARM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
: ${CONFIG_STATUS=./config.status}
ac_clean_files_save=$ac_clean_files
@@ -64861,7 +64904,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by dc3dd $as_me 6.12.3, which was
+This file was extended by dc3dd $as_me 7.0.0, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -64914,7 +64957,7 @@ Report bugs to <bug-autoconf at gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-dc3dd config.status 6.12.3
+dc3dd config.status 7.0.0
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
@@ -65696,6 +65739,9 @@ ANSI2KNR!$ANSI2KNR$ac_delim
LIBOBJS!$LIBOBJS$ac_delim
LIB_FDATASYNC!$LIB_FDATASYNC$ac_delim
SEQ_LIBM!$SEQ_LIBM$ac_delim
+COND_USE_HDPARM_TRUE!$COND_USE_HDPARM_TRUE$ac_delim
+COND_USE_HDPARM_FALSE!$COND_USE_HDPARM_FALSE$ac_delim
+USE_HDPARM!$USE_HDPARM$ac_delim
LIB_CRYPT!$LIB_CRYPT$ac_delim
INSTALL_SU!$INSTALL_SU$ac_delim
OPTIONAL_BIN_PROGS!$OPTIONAL_BIN_PROGS$ac_delim
@@ -65721,7 +65767,7 @@ gltests_LIBOBJS!$gltests_LIBOBJS$ac_delim
gltests_LTLIBOBJS!$gltests_LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 62; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 65; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/configure.ac b/configure.ac
index be07e9b..5d1870a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,7 @@ AC_PROG_LN_S
gl_EARLY
gl_INIT
coreutils_MACROS
+DC3_HDPARM
AC_FUNC_FORK
@@ -334,6 +335,8 @@ AC_SUBST([CONFIG_STATUS_DEPENDENCIES])
AM_GNU_GETTEXT([external], [need-formatstring-macros])
AM_GNU_GETTEXT_VERSION([0.15])
+DC3_HDPARM_SET
+
# For a test of uniq: it uses the $LOCALE_FR envvar.
gt_LOCALE_FR
diff --git a/lib/Makefile.in b/lib/Makefile.in
index c0a08f9..68318e3 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -99,9 +99,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/alloca.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \
- $(top_srcdir)/m4/host-os.m4 $(top_srcdir)/m4/human.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \
- $(top_srcdir)/m4/iconv_open.m4 $(top_srcdir)/m4/idcache.m4 \
+ $(top_srcdir)/m4/hdparm.m4 $(top_srcdir)/m4/host-os.m4 \
+ $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/iconv_h.m4 $(top_srcdir)/m4/iconv_open.m4 \
+ $(top_srcdir)/m4/idcache.m4 \
$(top_srcdir)/m4/include-exclude-prog.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
@@ -630,6 +631,7 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
U = @U@
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+USE_HDPARM = @USE_HDPARM@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VOID_UNSETENV = @VOID_UNSETENV@
diff --git a/lib/config.hin b/lib/config.hin
index 109c1e6..a8f1008 100644
--- a/lib/config.hin
+++ b/lib/config.hin
@@ -1721,6 +1721,9 @@
/* Define to 1 if unlink (dir) cannot possibly succeed. */
#undef UNLINK_CANNOT_UNLINK_DIR
+/* Define if hdparm is requested for detecting HPA/DCO. */
+#undef USE_HDPARM
+
/* Define to 1 if you want getc etc. to use unlocked I/O if available.
Unlocked I/O can improve performance in unithreaded apps, but it is not
safe for multithreaded apps. */
diff --git a/lib/iconv_open-aix.h b/lib/iconv_open-aix.h
index 0ffc3fe..5b8c7dc 100644
--- a/lib/iconv_open-aix.h
+++ b/lib/iconv_open-aix.h
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.0.1 */
/* Command-line: gperf -m 10 ./iconv_open-aix.gperf */
/* Computed positions: -k'4,$' */
@@ -229,9 +229,6 @@ static const struct mapping mappings[] =
#ifdef __GNUC__
__inline
-#ifdef __GNUC_STDC_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
#endif
const struct mapping *
mapping_lookup (register const char *str, register unsigned int len)
diff --git a/lib/iconv_open-irix.h b/lib/iconv_open-irix.h
index 1f03ab9..404b8c2 100644
--- a/lib/iconv_open-irix.h
+++ b/lib/iconv_open-irix.h
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.0.1 */
/* Command-line: gperf -m 10 ./iconv_open-irix.gperf */
/* Computed positions: -k'1,$' */
@@ -172,9 +172,6 @@ static const struct mapping mappings[] =
#ifdef __GNUC__
__inline
-#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
#endif
const struct mapping *
mapping_lookup (register const char *str, register unsigned int len)
diff --git a/lib/iconv_open-osf.h b/lib/iconv_open-osf.h
index c2730c2..0187f23 100644
--- a/lib/iconv_open-osf.h
+++ b/lib/iconv_open-osf.h
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.0.1 */
/* Command-line: gperf -m 10 ./iconv_open-osf.gperf */
/* Computed positions: -k'4,$' */
@@ -251,9 +251,6 @@ static const struct mapping mappings[] =
#ifdef __GNUC__
__inline
-#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
#endif
const struct mapping *
mapping_lookup (register const char *str, register unsigned int len)
diff --git a/man/Makefile.in b/man/Makefile.in
index e306640..a0b34ff 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -97,9 +97,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/alloca.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \
- $(top_srcdir)/m4/host-os.m4 $(top_srcdir)/m4/human.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \
- $(top_srcdir)/m4/iconv_open.m4 $(top_srcdir)/m4/idcache.m4 \
+ $(top_srcdir)/m4/hdparm.m4 $(top_srcdir)/m4/host-os.m4 \
+ $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/iconv_h.m4 $(top_srcdir)/m4/iconv_open.m4 \
+ $(top_srcdir)/m4/idcache.m4 \
$(top_srcdir)/m4/include-exclude-prog.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
@@ -592,6 +593,7 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
U = @U@
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+USE_HDPARM = @USE_HDPARM@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VOID_UNSETENV = @VOID_UNSETENV@
diff --git a/man/dc3dd.1 b/man/dc3dd.1
index 26693e9..6b07a43 100644
--- a/man/dc3dd.1
+++ b/man/dc3dd.1
@@ -1,218 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.35.
-.TH DC3DD "1" "March 2009" "dc3dd 6.12.3" "User Commands"
+.TH DC3DD "1" "February 2010" "dc3dd 7.0.0" "User Commands"
.SH NAME
dc3dd \- convert and copy a file
-.SH SYNOPSIS
-.B dc3dd
-[\fIOPERAND\fR]...
-.br
-.B dc3dd
-\fIOPTION\fR
.SH DESCRIPTION
.\" Add any additional description here
-.PP
-Copy a file, converting and formatting according to the operands.
-.TP
-bs=BYTES
-force ibs=BYTES and obs=BYTES
-.TP
-cbs=BYTES
-convert BYTES bytes at a time
-.TP
-conv=CONVS
-convert the file as per the comma separated symbol list
-.TP
-count=SECTORS
-copy only SECTORS input sectors
-.TP
-ibs=BYTES
-read BYTES bytes at a time (must be a multiple of input sector size)
-.TP
-if=FILE
-read from FILE instead of stdin
-.TP
-ifjoin=BASE.FMT
-read from split files with name BASE and splitformat FMT
-.TP
-iflag=FLAGS
-read as per the comma separated symbol list
-.TP
-pattern=HEX
-write HEX to every byte of the output
-.TP
-textpattern=TEXT
-write the string TEXT repeatedly to the output
-.TP
-obs=BYTES
-write BYTES bytes at a time
-.TP
-of=FILE
-write to FILE instead of stdout
-.TP
-of:=COMMAND
-pipe output to the given command
-.TP
-oflag=FLAGS
-write as per the comma separated symbol list
-.TP
-wipe=FILE
-wipe device FILE with zeros (or specify pattern/textpattern)
-.TP
-seek=SECTORS
-skip SECTORS input sectors at start of output
-.TP
-skip=SECTORS
-skip SECTORS input sectors at start of input
-.TP
-status=noxfer
-suppress transfer statistics
-.TP
-split=BYTES
-split the output into pieces of size BYTES
-.TP
-splitformat=FMT
-create extensions for split pieces using FMT
-.IP
-Extensions can be numerical starting at zero,
-numerical starting at one, or alphabetical.
-These options are selected by using a series of
-zeros, ones, or a's, respectively. The number
-of characters used indicates the desired length of
-the extensions. For example, splitformat=1111
-indicates four character numerical extensions
-starting with 0001.
-.TP
-progress=on
-displays a progress meter
-.TP
-progresscount=NUM
-number of blocks processed between each progress update
-.TP
-sizeprobe=on
-estimates size of input file for use with status
-.TP
-hash=ALGORITHM
-computes ALGORITHM hashes of the input data
-.TP
-hashconv=WHEN
-determines when data should be hashed, either before
-or after conversions
-.TP
-hashwindow=BYTES
-number of bytes for piecewise hashing
-.TP
-hashlog=FILE
-appends piecewise hashes to the log file
-.TP
-errlog=FILE
-appends errors to the log file
-.TP
-log=FILE
-appends hashes and errors to the same file
-.TP
-errors=group
-group read errors together
-.TP
-vf=FILE
-verify the input against FILE
-.IP
-vfjoin=BASE.FMT verify the input against split files with name BASE and splitformat FMT
-verifylog=FILE write the results of the verify to the given file
-.PP
-ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512
-.PP
-BLOCKS and BYTES may be followed by the following multiplicative suffixes:
-xM M, c 1, w 2, b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
-GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
-.PP
-Each CONV symbol may be:
-.TP
-ascii
-from EBCDIC to ASCII
-.TP
-ebcdic
-from ASCII to EBCDIC
-.TP
-ibm
-from ASCII to alternate EBCDIC
-.TP
-block
-pad newline\-terminated records with spaces to cbs\-size
-.TP
-unblock
-replace trailing spaces in cbs\-size records with newline
-.TP
-lcase
-change upper case to lower case
-.TP
-nocreat
-do not create the output file
-.TP
-excl
-fail if the output file already exists
-.TP
-notrunc
-do not truncate the output file
-.TP
-ucase
-change lower case to upper case
-.TP
-swab
-swap every pair of input bytes
-.TP
-noerror
-continue after read errors
-.TP
-sync
-pad every input block with NULs to ibs\-size; when used
-with block or unblock, pad with spaces rather than NULs
-.TP
-fdatasync
-physically write output file data before finishing
-.TP
-fsync
-likewise, but also write metadata
-.PP
-Each FLAG symbol may be:
-.TP
-append
-append mode (makes sense only for output; conv=notrunc suggested)
-.TP
-direct
-use direct I/O for data
-.IP
-directory fail unless a directory
-dsync use synchronized I/O for data
-sync likewise, but also for metadata
-nonblock use non\-blocking I/O
-noatime do not update access time
-noctty do not assign controlling terminal from file
-nofollow do not follow symlinks
-.PP
-Sending a USR1 signal to a running `dd' process makes it
-print I/O statistics to standard error and then resume copying.
-.IP
-\f(CW$ dd if=/dev/zero of=/dev/null& pid=$!\fR
-.br
-\f(CW$ kill -USR1 $pid; sleep 1; kill $pid\fR
-.IP
-18335302+0 sectors in
-18335302+0 sectors out
-9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
-.PP
-Options are:
-.TP
-\fB\-\-help\fR
-display this help and exit
-.TP
-\fB\-\-version\fR
-output version information and exit
-.TP
-\fB\-\-flags\fR
-display compile\-time flags
.SH AUTHOR
Written by Paul Rubin, David MacKenzie, Stuart Kemp,
-and patched for DC3 by Jesse Kornblum and Andrew Medico.
+Jesse Kornblum, Andrew Medico, and Richard Cordovano.
.SH "REPORTING BUGS"
Report bugs to <dc3dd at dc3.mil>.
.SH COPYRIGHT
diff --git a/po/af.gmo b/po/af.gmo
index 74725f5..97b3842 100644
Binary files a/po/af.gmo and b/po/af.gmo differ
diff --git a/po/af.po b/po/af.po
index ee5b0cf..fb471d8 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.2.1\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2004-03-17 11:58+0200\n"
"Last-Translator: Petri Jooste <rkwjpj at puk.ac.za>\n"
"Language-Team: Afrikaans <i18n at af.org.za>\n"
@@ -16,40 +16,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "Kan nie lêergids %s skep nie."
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Probeer `%s --help' vir meer inligting.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -58,33 +70,35 @@ msgstr ""
"Gebruik so: %s [GETAL]... \n"
" of: %s OPSIE\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=LÊER lees vanaf LÊER in plaas van stdin\n"
" obs=GREPE skryf GREPE(aantal) grepe op 'n slag\n"
@@ -94,52 +108,50 @@ msgstr ""
" skip=BLOKKE slaan BLOKKE(aantal) ibs-grootte blokke oor aan die begin "
"van toevoer\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -150,35 +162,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii van EBCDIC na ASCII\n"
-" ebcdic van ASCII na EBCDIC\n"
-" ibm van ASCII na afwisselende EBCDIC\n"
-" block vul nuwereël-getermineerde rekords met spasies tot by cbs-"
-"grootte\n"
-" unblock vervang spasies agteraan cbs-grootte rekords met "
-"nuwereëlkarakters\n"
-" lcase verander bokas na onderkas\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -187,7 +178,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -196,52 +187,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s: hierdie bestemming is nie 'n lêergids nie"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -258,37 +249,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Onbekende stelselfout"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "afgekapte rekord"
-msgstr[1] "afgekapte rekord"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -302,256 +286,283 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "toevoerlêer %s word toegemaak"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "afvoerlêer %s word toegemaak"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "uitgange vir afvoerlêers is uitgeput"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "%s word oopgemaak"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "GEFAAL"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "besig om te skryf na %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "onbekende opsie %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "ongeldige datum `%s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "ongeldige datumformaat %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "ongeldige datumformaat %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "ongeldige datumformaat %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "ongeldige omskakeling: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "ongeldige nommer by begin van veld"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "ongeldige groep "
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "ongeldige gebruiker %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "ongeldige nommer %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#: src/dc3dd.c:2938
+msgid "cannot combine excl and nocreat"
msgstr ""
-#: src/dc3dd.c:2682
+#: src/dc3dd.c:2941
#, fuzzy
-msgid "cannot combine block and unblock"
+msgid "cannot combine if= and ifjoin="
msgstr "die gebruikernaam en groepnaam mag nie albei ontbreek nie"
-#: src/dc3dd.c:2684
+#: src/dc3dd.c:2944
#, fuzzy
-msgid "cannot combine lcase and ucase"
+msgid "cannot combine vf= and vfjoin="
msgstr "die gebruikernaam en groepnaam mag nie albei ontbreek nie"
-#: src/dc3dd.c:2686
-msgid "cannot combine excl and nocreat"
+#: src/dc3dd.c:2947
+#, c-format
+msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2950
#, fuzzy
-msgid "cannot combine if= and ifjoin="
+msgid "cannot combine if= and wipe="
msgstr "die gebruikernaam en groepnaam mag nie albei ontbreek nie"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2953
#, fuzzy
-msgid "cannot combine vf= and vfjoin="
+msgid "cannot combine wipe= and ifjoin="
msgstr "die gebruikernaam en groepnaam mag nie albei ontbreek nie"
-#: src/dc3dd.c:2708
-#, c-format
-msgid "error: split size must be a multiple of block size (currently %zd)"
-msgstr ""
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "die gebruikernaam en groepnaam mag nie albei ontbreek nie"
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "besig om %s te lees"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: kan nie verwyder nie"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "die tyd van %s is verstel"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "lêergids %s word gelees"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "lêergids %s word gelees"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "fout met die skryf na %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "besig om te skryf na %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, fuzzy, c-format
msgid "fsync failed for %s"
msgstr "kon nie %s oopmaak nie"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standaardtoevoer"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standaard-afvoer"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "kan nie fstat op %s uitvoer nie"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr ""
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii van EBCDIC na ASCII\n"
+#~ " ebcdic van ASCII na EBCDIC\n"
+#~ " ibm van ASCII na afwisselende EBCDIC\n"
+#~ " block vul nuwereël-getermineerde rekords met spasies tot by cbs-"
+#~ "grootte\n"
+#~ " unblock vervang spasies agteraan cbs-grootte rekords met "
+#~ "nuwereëlkarakters\n"
+#~ " lcase verander bokas na onderkas\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "afgekapte rekord"
+#~ msgstr[1] "afgekapte rekord"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "die gebruikernaam en groepnaam mag nie albei ontbreek nie"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "die gebruikernaam en groepnaam mag nie albei ontbreek nie"
+
+#~ msgid "error writing %s"
+#~ msgstr "fout met die skryf na %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ongeldige parameter %s vir %s"
@@ -2552,10 +2563,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "kan nie 'n tydelike lêer skep nie"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "Kan nie lêergids %s skep nie."
-
#~ msgid "write failed"
#~ msgstr "'write' het gefaal"
diff --git a/po/be.gmo b/po/be.gmo
index dc9d4f2..63adb80 100644
Binary files a/po/be.gmo and b/po/be.gmo differ
diff --git a/po/be.po b/po/be.po
index a84a914..13a1eff 100644
--- a/po/be.po
+++ b/po/be.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.97\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2006-08-16 03:27+0300\n"
"Last-Translator: Alexander Nyakhaychyk <nyakhaychyk at gmail.com>\n"
"Language-Team: Belarusian <i18n at mova.org>\n"
@@ -20,40 +20,52 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "немагчыма стварыць тэчку %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Паспрабуйце \"%s --help\" для больш падрабязных зьвестак.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -62,16 +74,15 @@ msgstr ""
"Выкарыстаньне: %s [АПЭРАНД]...\n"
" або: %s ПАРАМЭТАР\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
" Капуе файл, пераўтварае й фарматуе згодна з выбарамі.\n"
@@ -84,21 +95,24 @@ msgstr ""
" count=БЛЁКАЎ Капіяваць толькі заданую колькасьць блёкаў уводу.\n"
" ibs=БАЙТАЎ Чатаць заданую колькасьць байтаў за раз.\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=ФАЙЛ Чытаць з файлу замест стандартнага ўводу.\n"
" obs=БАЙТАЎ Пісаць заданую колькасьць байтаў за раз.\n"
@@ -108,52 +122,50 @@ msgstr ""
" skip=БЛЁКАЎ Абмінуць заданую колькасьць блёкаў ад пачатку ў файле "
"ўводу.\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
#, fuzzy
msgid ""
"\n"
@@ -171,31 +183,12 @@ msgstr ""
"Кожнае ключавое слова можа быць:\n"
"\n"
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii З EBCDIC у ASCII.\n"
-" ebcdic З ASCII ў EBCDIC.\n"
-" ibm З ASCII ў альтэрнатыўнае EBCDIC.\n"
-" block Замяняць запісы з канцавымі знакамі новага радка на прагалы.\n"
-" unblock Замяняць канцавыя прагалы на новыя радкі.\n"
-" lcase Зьмяняць вялікія літары на маленькія.\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" notrunc Не абразаць файл вываду.\n"
" ucase Зьмяніць маленькія літары на вялікія.\n"
@@ -205,7 +198,7 @@ msgstr ""
" выкарыстоўваецца разам з block ці unblock, дадаваць прагалы,\n"
" замест нулёў.\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
#, fuzzy
msgid ""
" noerror continue after read errors\n"
@@ -222,7 +215,7 @@ msgstr ""
" выкарыстоўваецца разам з block ці unblock, дадаваць прагалы,\n"
" замест нулёў.\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -231,52 +224,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s: заданая тэчка мэты не зьяўляецца тэчкай"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text выкарыстоўваць тэкставы ўвод/вывад для даных\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -293,11 +286,11 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Невядомая сістэмная памылка"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -306,20 +299,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> запісаў уайшло\n"
"%<PRIuMAX>+%<PRIuMAX> запісаў выйшла\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> абрэзаны запіс\n"
-msgstr[1] "%<PRIuMAX> абрэзаных запісы\n"
-msgstr[2] "%<PRIuMAX> абрэзаных запісаў\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -327,7 +312,7 @@ msgstr[0] "%<PRIuMAX> байт (%s) скапіяваны"
msgstr[1] "%<PRIuMAX> байты (%s) скапіявана"
msgstr[2] "%<PRIuMAX> байтаў (%s) скапіявана"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Бясконцасьць"
@@ -341,257 +326,285 @@ msgstr "Бясконцасьць"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g сэкунда , %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, fuzzy, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g сэкунда , %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "зачыняецца файл уводу %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "закрываецца файл вываду %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "адчыняецца %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "ПАМЫЛКА"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "запіс у %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "нераспазнаны апэранд %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "нерэчаісная дата %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "нерэчаісны фармат даты %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "нерэчаісны фармат даты %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "нерэчаісны фармат даты %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "нерэчаіснае ператварэньне: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "нерэчаісны сьцяг уводу: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "нерэчаісны сьцяг вываду: %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "нерэчаісны сьцяг статусу: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "нерэчаісны нумар %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "немагчыма абмінуць разам карыстальніка й групу"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "немагчыма параўнаць назвы файлаў %s і %s"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr ""
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "немагчыма сумясьціць рэжым і парамэтры --reference"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "немагчыма сумясьціць рэжым і парамэтры --reference"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "немагчыма сумясьціць рэжым і парамэтры --reference"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "немагчыма сумясьціць рэжым і парамэтры --reference"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "немагчыма сумясьціць рэжым і парамэтры --reference"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "чытаецца %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: немагчыма перасунуць паказальнік"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "перапаўненьне зруху цягам чытаньня файла %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "увага: зрух файла пашкоджаны пасьля памылкі чытаньня"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "немагчыма абмінуць памылку ядра"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "увага: зрух файла пашкоджаны пасьля памылкі чытаньня"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "выстаўленьне сьцягоў для %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "чытаецца дырэкторыя %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "чытаецца дырэкторыя %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "памылка запісу %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "запіс у %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "збой fdatasync для %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "збой fsync для %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "стандартны ўвод"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "стандартны вывад"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "немагчыма выканаць fstat %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "дасягнуты %s байтаў у файле вываду %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii З EBCDIC у ASCII.\n"
+#~ " ebcdic З ASCII ў EBCDIC.\n"
+#~ " ibm З ASCII ў альтэрнатыўнае EBCDIC.\n"
+#~ " block Замяняць запісы з канцавымі знакамі новага радка на прагалы.\n"
+#~ " unblock Замяняць канцавыя прагалы на новыя радкі.\n"
+#~ " lcase Зьмяняць вялікія літары на маленькія.\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> абрэзаны запіс\n"
+#~ msgstr[1] "%<PRIuMAX> абрэзаных запісы\n"
+#~ msgstr[2] "%<PRIuMAX> абрэзаных запісаў\n"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "немагчыма абмінуць разам карыстальніка й групу"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "немагчыма параўнаць назвы файлаў %s і %s"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "увага: зрух файла пашкоджаны пасьля памылкі чытаньня"
+
+#~ msgid "error writing %s"
+#~ msgstr "памылка запісу %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "нерэчаісны довад %s для %s"
@@ -3770,10 +3783,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "немагчыма стварыць часовы файл"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "немагчыма стварыць тэчку %s"
-
#~ msgid "write failed"
#~ msgstr "памылка запісу"
diff --git a/po/bg.gmo b/po/bg.gmo
index 1d18939..d806f65 100644
Binary files a/po/bg.gmo and b/po/bg.gmo differ
diff --git a/po/bg.po b/po/bg.po
index c29ef68..b61b7c5 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.5\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2006-11-23 22:41+0200\n"
"Last-Translator: Anton Zinoviev <zinoviev at debian.org>\n"
"Language-Team: Bulgarian <dict at fsa-bg.org>\n"
@@ -24,41 +24,53 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin и David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "не може да се създаде каталог %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Използвайте „%s --help“ за повече информация.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -67,16 +79,15 @@ msgstr ""
"Използване: %s [ОПЕРАНД]...\n"
" или: %s ОПЦИЯ\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Копира файл, преобразуван и форматиран според посочените опции.\n"
@@ -87,21 +98,24 @@ msgstr ""
" count=БЛОКОВЕ копира само БЛОКОВЕ входни блока\n"
" ibs=БАЙТОВЕ чете на парчета от по БАЙТОВЕ байта\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=ФАЙЛ чете от ФАЙЛ вместо от стандартния вход\n"
" iflag=ФЛАГ,... чете според посочените флагове\n"
@@ -112,52 +126,50 @@ msgstr ""
" skip=БЛОКОВЕ пропуска БЛОКОВЕ входни блока с размер ibs всеки\n"
" status=noxfer без статистика за трансфера\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -174,32 +186,12 @@ msgstr ""
"Всяка КЛЮЧДУМА може да бъде:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii от EBCDIC към ASCII\n"
-" ebcdic от ASCII към EBCDIC\n"
-" ibm от ASCII към алтернативен EBCDIC\n"
-" block попълва блоковете, завършващи с нов ред, с интервали до размер "
-"cbs\n"
-" unblock заменя крайните интервали във всеки блок с размер cbs с нови "
-"редове\n"
-" lcase променя от главни в малки букви\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat да не се създава изходния файл\n"
" excl да не действа, ако изходния файл вече съществува\n"
@@ -214,7 +206,7 @@ msgstr ""
" fdatasync записва физически изходните данни още преди пълното приключване\n"
" fsync подобно, но освен това записва и метаданните\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
#, fuzzy
msgid ""
" noerror continue after read errors\n"
@@ -236,7 +228,7 @@ msgstr ""
" fdatasync записва физически изходните данни още преди пълното приключване\n"
" fsync подобно, но освен това записва и метаданните\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -250,58 +242,58 @@ msgstr ""
" append режим добавяне (смислено само за изхода, препоръчва се "
"conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
" direct да се използват директни входно/изходни операции за данните\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory отказва да работи, освен при каталог\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
" dsync да се използват синхронизирани входно/изходни операции за "
"данните\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
" sync подобно, но също и за метаданните (напр. на файловата система)\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock да се използват неблокиращи входно/изходни операции\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime да не се обновява времето за достъп\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty да не се определя управляващ терминал от файл\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow да не се следват символните връзки\n"
# TODO: наистина ли се имат предвид твърди връзки?
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks отказва да работи при множество твърди връзки\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
" binary да се използват двоични входно/изходни операции за данните\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
" text да се използват текстови входно/изходни операции за данните\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -328,11 +320,11 @@ msgstr ""
" 18335302+0 записани блока\n"
" изкопирани са 9387674624 байта (9.4 GB) за 34,6279 секунди с 271 MB/s\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Непозната системна грешка"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -341,26 +333,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> прочетени блока\n"
"%<PRIuMAX>+%<PRIuMAX> записани блока\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> съкратен запис\n"
-msgstr[1] "%<PRIuMAX> съкратени записа\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "изкопиран е %<PRIuMAX> байт (%s)"
msgstr[1] "изкопирани са %<PRIuMAX> байта (%s)"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Безброй"
@@ -374,149 +359,157 @@ msgstr "Безброй"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "затваряне на входния файл %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "затваряне на изходния файл %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Изчерпаха се суфиксите за изходни файлове"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "отваряне на %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
# Не е ясно къде се използва
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "НЕУСПЕШНО"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "запис в %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "непознат операнд %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "неправилна дата %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "неправилен формат за дата %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "неправилен формат за дата %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "неправилен формат за дата %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "неправилно посочено преобразуване: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "непознат входен флаг: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "непознат изходен флаг: %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "непознат флаг за състояние: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "недопустимо число %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "не може да се комбинират никои две от {ascii,ebcdic,ibm}"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "не може да се комбинират block и unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "не може да се комбинират lcase и ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "не може да се комбинират excl и nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "не може да се комбинират опциите -e и -i"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "не може да се комбинират опциите -e и -i"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "не може да се комбинират опциите -e и -i"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "не може да се комбинират опциите -e и -i"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "не може да се комбинират опциите -e и -i"
+
# Това ме мързи да го превеждам.
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -525,89 +518,74 @@ msgstr ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "чете се %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: неуспешно позициониране"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "препълване на отместването при четене на файла %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "внимание: съмнително отместване във файла след пропаднало четене"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "в крайна сметка не може да се компенсира грешката в ядрото"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "внимание: съмнително отместване във файла след пропаднало четене"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "задействат се флаговете за %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "чете се каталогът %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "чете се каталогът %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "грешка при запис в %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "запис в %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "неуспешно извикване на fdatasync за %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "неуспешнен запис (fsync) за %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "стандартният вход"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "стандартният изход"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -616,20 +594,58 @@ msgstr ""
"твърде голямо отместване: не може да се отреже до дължината на seek=%"
"<PRIuMAX> (%lu-byte) блокове"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "не може да се получи режимът за достъп до %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "съкращаване до %<PRIuMAX> байта в изходния файл %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii от EBCDIC към ASCII\n"
+#~ " ebcdic от ASCII към EBCDIC\n"
+#~ " ibm от ASCII към алтернативен EBCDIC\n"
+#~ " block попълва блоковете, завършващи с нов ред, с интервали до "
+#~ "размер cbs\n"
+#~ " unblock заменя крайните интервали във всеки блок с размер cbs с нови "
+#~ "редове\n"
+#~ " lcase променя от главни в малки букви\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> съкратен запис\n"
+#~ msgstr[1] "%<PRIuMAX> съкратени записа\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "не може да се комбинират никои две от {ascii,ebcdic,ibm}"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "не може да се комбинират block и unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "не може да се комбинират lcase и ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "внимание: съмнително отместване във файла след пропаднало четене"
+
+#~ msgid "error writing %s"
+#~ msgstr "грешка при запис в %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "недопустим аргумент %s за %s"
@@ -6620,10 +6636,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "не може да се направи временен файл"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "не може да се създаде каталог %s"
-
#~ msgid "write failed"
#~ msgstr "неуспешен запис"
diff --git a/po/ca.gmo b/po/ca.gmo
index 376e140..d26d26b 100644
Binary files a/po/ca.gmo and b/po/ca.gmo differ
diff --git a/po/ca.po b/po/ca.po
index 29102a5..a48e8d5 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -47,7 +47,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-05-03 21:10+0200\n"
"Last-Translator: Ivan Vilata i Balaguer <ivan at selidor.net>\n"
"Language-Team: Catalan <ca at dodds.net>\n"
@@ -57,40 +57,53 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+# No usa quote() (afortunadament). ivb
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "no s’ha pogut crear el procés «%s -d»"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Proveu «%s --help» per a obtenir més informació.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -99,16 +112,15 @@ msgstr ""
"Forma d’ús: %s [OPERAND]…\n"
" o bé: %s OPCIÓ\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Còpia un fitxer, convertint i formatant les dades d’acord amb els operands.\n"
@@ -120,21 +132,24 @@ msgstr ""
" count=BLOCS Només còpia aquest nombre de BLOCS de l’entrada.\n"
" ibs=OCTETS Llegeix aquest nombre d’OCTETS alhora.\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FITXER Llegeix del FITXER en lloc de fer‐ho de l’entrada\n"
" estàndard.\n"
@@ -153,52 +168,50 @@ msgstr ""
" de l’entrada.\n"
" status=noxfer No mostra l’estadística de la tranferència.\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -217,33 +230,12 @@ msgstr ""
"Cada símbol de CONVERSIONS pot ser:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii D’EBCDIC a ASCII.\n"
-" ebcdic D’ASCII a EBCDIC.\n"
-" ibm D’ASCII a EBCDIC alternat.\n"
-" block Emplena amb espais cada registre acabat en nova línia fins "
-"que\n"
-" tinga la mida «cbs».\n"
-" unblock Substitueix els espais del final de cada registre de mida "
-"«cbs»\n"
-" per un caràcter de nova línia.\n"
-" lcase Transforma les majúscules en minúscules.\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat No crea el fitxer d’eixida.\n"
" excl Falla si el fitxer d’eixida ja existeix.\n"
@@ -251,7 +243,7 @@ msgstr ""
" ucase Transforma les minúscules en majúscules.\n"
" swab Intercanvia cada parell d’octets de l’entrada.\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -269,7 +261,7 @@ msgstr ""
" finalitzar.\n"
" fsync El mateix, però també n’escriu les metadades.\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -283,52 +275,52 @@ msgstr ""
" append Mode de només addició (només té sentit per a l’eixida, es\n"
" suggereix emprar «conv=notrunc»).\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct Empra E/S directa per a les dades.\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory Falla si no és un directori.\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync Empra E/S sincronitzada per a les dades.\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync El mateix, però també per a les metadades.\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock Empra E/S no blocadora.\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime No actualitza la data d’accés.\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty No assigna el fitxer com a terminal de control.\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow No segueix els enllaços simbòlics.\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks Falla si el fitxer té més d’un enllaç.\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary Empra E/S binària per a les dades.\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text Empra E/S textual per a les dades.\n"
# La substitució pot ser «USR1» o «INFO». ivb
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -359,11 +351,11 @@ msgstr ""
"\n"
# Amb el mateix format que els errors de la libc. ivb
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Error desconegut del sistema"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -372,19 +364,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> registres llegits\n"
"%<PRIuMAX>+%<PRIuMAX> registres escrits\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> registre truncat\n"
-msgstr[1] "%<PRIuMAX> registres truncats\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -392,7 +377,7 @@ msgstr[0] "%<PRIuMAX> octet (%s) copiat"
msgstr[1] "%<PRIuMAX> octets (%s) copiats"
# Es refereix a octets per segon. ivb
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Infinits B"
@@ -406,157 +391,161 @@ msgstr "Infinits B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
# Usa quote(). ivb
# Condició d'error. ivb
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "en tancar el fitxer d’entrada %s"
# Usa quote(). ivb
# Condició d'error. ivb
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "en tancar el fitxer d’eixida %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "s’han esgotat els sufixs per als fitxers de sortida"
# Usa quote(). ivb
# Condició d'error. ivb
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "en obrir %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "INCORRECTE"
# Usa quote(). ivb
-# Condició d'error. ivb
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "en escriure %s"
-
-# Usa quote(). ivb
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "l’operand %s no és reconegut"
# Ambdues usen quote(). ivb
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "la data %s no és vàlida"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "el format de data «%s» no és vàlid"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "el format de data «%s» no és vàlid"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "el format de data «%s» no és vàlid"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "la conversió no és vàlida"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "el senyalador d’entrada no és vàlid"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "el senyalador d’eixida no és vàlid"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "el senyalador d’estat no és vàlid"
# Usa quote(). ivb
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "el número %s no és vàlid"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "no es poden combinar «ascii», «ebcdic» o «ibm»"
-
-# Són noms de senyaladors. ivb
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "no es poden combinar «block» i «unblock»"
-
-# Són noms de senyaladors. ivb
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "no es poden combinar «lcase» i «ucase»"
-
# Són noms de senyaladors. ivb
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "no es poden combinar «excl» i «nocreat»"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "no es poden combinar les opcions «-e» i «-i»"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "no es poden combinar les opcions «-e» i «-i»"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "no es poden combinar les opcions «-e» i «-i»"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "no es poden combinar les opcions «-e» i «-i»"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "no es poden combinar les opcions «-e» i «-i»"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -566,102 +555,87 @@ msgstr ""
"mt_type=0x%0lx —vegeu <sys/mtio.h> per a la llista de tipus"
# Els 3 usen quote(). ivb
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "s’està llegint %s"
# El primer hauria de ser «no *es pot* desplaçar». ivb
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: no s’ha pogut desplaçar"
# Usa quote(). ivb
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "s’ha desbordat el desplaçament en llegir el fitxer %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
"avís: després de la lectura fallada el desplaçament de fitxer no és vàlid"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "al final no s’ha pogut evitar l’error del nucli"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-"avís: després de la lectura fallada el desplaçament de fitxer no és vàlid"
-
# Usa quote(). ivb
# Condició d'error. ivb
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "en establir els senyaladors de %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
# Els 2 usen quote(). ivb
# Indica condició d'error. ivb
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "en llegir el directori %s"
# Els 2 usen quote(). ivb
# Indica condició d'error. ivb
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "en llegir el directori %s"
-# uniq no usa quote(). ivb
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "error en escriure %s"
-
-#: src/dc3dd.c:3915
+# Usa quote(). ivb
+# Condició d'error. ivb
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "en escriure %s"
# Usa quote. ivb
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "ha fallat fdatasync() sobre %s"
# Usa quote(). ivb
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "ha fallat fsync() sobre %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "entrada estàndard"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "eixida estàndard"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -671,22 +645,66 @@ msgstr ""
"<PRIuMAX> blocs de %lu octets"
# Els 4 usen quote(). ivb
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "ha fallat fstat() sobre %s"
# Usa quote(). ivb
# Condició d'error. ivb
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "en truncar a %<PRIuMAX> octets al fitxer d’eixida %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii D’EBCDIC a ASCII.\n"
+#~ " ebcdic D’ASCII a EBCDIC.\n"
+#~ " ibm D’ASCII a EBCDIC alternat.\n"
+#~ " block Emplena amb espais cada registre acabat en nova línia fins "
+#~ "que\n"
+#~ " tinga la mida «cbs».\n"
+#~ " unblock Substitueix els espais del final de cada registre de mida "
+#~ "«cbs»\n"
+#~ " per un caràcter de nova línia.\n"
+#~ " lcase Transforma les majúscules en minúscules.\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> registre truncat\n"
+#~ msgstr[1] "%<PRIuMAX> registres truncats\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "no es poden combinar «ascii», «ebcdic» o «ibm»"
+
+# Són noms de senyaladors. ivb
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "no es poden combinar «block» i «unblock»"
+
+# Són noms de senyaladors. ivb
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "no es poden combinar «lcase» i «ucase»"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr ""
+#~ "avís: després de la lectura fallada el desplaçament de fitxer no és vàlid"
+
+# uniq no usa quote(). ivb
+#~ msgid "error writing %s"
+#~ msgstr "error en escriure %s"
+
# Usa quote() en els 2 args. ivb
#~ msgid "invalid argument %s for %s"
#~ msgstr "l’argument %s no és vàlid per a %s"
@@ -7634,10 +7652,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "no s’ha pogut executar «%s -d»"
-# No usa quote() (afortunadament). ivb
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "no s’ha pogut crear el procés «%s -d»"
-
#~ msgid "write failed"
#~ msgstr "no s’ha pogut escriure"
diff --git a/po/cs.gmo b/po/cs.gmo
index 35211ac..4cec639 100644
Binary files a/po/cs.gmo and b/po/cs.gmo differ
diff --git a/po/cs.po b/po/cs.po
index 31043d4..04158e4 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-04-23 17:24+0200\n"
"Last-Translator: Petr Pisar <petr.pisar at atlas.cz>\n"
"Language-Team: Czech <translation-team-cs at lists.sourceforge.net>\n"
@@ -18,40 +18,52 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "pro %s -d nelze založit proces"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Více informací získáte příkazem „%s --help“.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Použití: %s [OPERAND]…\n"
" nebo: %s PŘEPÍNAČ\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopírování souboru, konverze a formátování. Toto vše lze navolit\n"
@@ -81,21 +92,24 @@ msgstr ""
" count=BLOKŮ zkopíruje pouze BLOKŮ vstupních bloků\n"
" ibs=BAJTŮ čte BAJTŮ bajtů najednou\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=SOUBOR čte ze souboru SOUBOR místo ze stdin\n"
" iflag=PŘÍZNAKY způsob čtení. PŘÍZNAKY je seznam čárkou oddělených "
@@ -108,52 +122,50 @@ msgstr ""
" skip=BLOKŮ přeskočí prvních BLOKŮ vstupních bloků velikosti „ibs“\n"
" status=noxfer nezobrazí statistické informace o přenosu dat\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -173,32 +185,12 @@ msgstr ""
"Každá dílčí konverze v seznamu KONVERZÍ může být:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii z EBCDIC do ASCII\n"
-" ebcdic z ASCII do EBCDIC\n"
-" ibm z ASCII do pozměněného EBCDIC\n"
-" block záznamy ukončené znakem nového řádku vyplní do velikosti „cbs“\n"
-" mezerami\n"
-" unblock koncové mezery v záznamech o velikosti „cbs“ nahradí znakem "
-"nového\n"
-" řádku\n"
-" lcase převede velká písmena na malá\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat nevytváří výstupní soubor\n"
" excl selže, pokud výstupní soubor již existuje\n"
@@ -206,7 +198,7 @@ msgstr ""
" ucase převede malá písmena na velká\n"
" swab zamění bajty v každém páru vstupních bajtů\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -220,7 +212,7 @@ msgstr ""
" fdatasync před ukončením vynutí fyzický zápis dat\n"
" fsync podobně, ale zapíše i metadata\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -234,52 +226,52 @@ msgstr ""
" append připisuje na konec (má smysl pouze pro výstup;\n"
" doporučeno s conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
" direct použije přímé vstupně-výstupní operace (V/V) pro práci s daty\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory selže, pokud se nejedná o adresář\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync použije synchronní V/V pro práci s daty\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync podobně, ale také pro metadata\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock použije neblokující V/V\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noaime neaktualizuje čas posledního přístupu k souboru\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty nepovažuje soubor za řídící terminál\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow nesleduje symbolické odkazy\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks selže, pokud na soubor vede více pevných odkazů\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary použije binární V/V pro práci s daty\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text použije textové V/V pro práci s daty\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -309,11 +301,11 @@ msgstr ""
"Volby jsou:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Neznámá chyba systému"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -322,20 +314,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> vstoupivších záznamů\n"
"%<PRIuMAX>+%<PRIuMAX> vystoupivších záznamů\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> zkrácený záznam\n"
-msgstr[1] "%<PRIuMAX> zkrácené záznamy\n"
-msgstr[2] "%<PRIuMAX> zkrácených záznamů\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -343,7 +327,7 @@ msgstr[0] "%<PRIuMAX> bajt (%s) zkopírován"
msgstr[1] "%<PRIuMAX> bajty (%s) zkopírovány"
msgstr[2] "%'<PRIuMAX> bajtů (%s) zkopírováno"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "nekonečno B"
@@ -357,143 +341,151 @@ msgstr "nekonečno B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %'g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %'g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "zavírám vstupní soubor %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "zavírám výstupní soubor %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Všechny přípony výstupních souborů vyčerpány"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "otevírám %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "CHYBNÝ"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "zapisuji do %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "neznámý operand %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "chybné datum: %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "neplatný formát data %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "neplatný formát data %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "neplatný formát data %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "neplatná konverze"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "neplatný příznak vstupu"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "neplatný příznak výstupu"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "neplatná hodnota operandu status"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "neplatné číslo %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "tyto konverze nelze kombinovat: ascii, ebcdic, ibm"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "block a unblock nelze použít současně"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "lcase a ucase nelze použít současně"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "excl a nocreat nelze použít současně"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "přepínače -e a -i nelze kombinovat"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "přepínače -e a -i nelze kombinovat"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "přepínače -e a -i nelze kombinovat"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "přepínače -e a -i nelze kombinovat"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "přepínače -e a -i nelze kombinovat"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -502,89 +494,74 @@ msgstr ""
"varování: obcházím chybu služby jádra lseek() nad souborem %s\n"
" typu mt_type=0x%0lx – seznam typů naleznete v <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "čtení %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: soubor nelze převíjet"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "během čtení ze souboru %s přetekl offset"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "varování: chybný offset souboru poté, co selhalo čtení"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "stejně se nedokážu vyrovnat s chybou v jádře"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "varování: chybný offset souboru poté, co selhalo čtení"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "nastavuji příznaky pro %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "čtu adresář %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "čtu adresář %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "chyba při zápisu %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "zapisuji do %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync na %s selhalo"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync na %s selhalo"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standardní vstup"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standardní výstup"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -593,20 +570,61 @@ msgstr ""
"příliš velký offset: nelze zkrátit na délku seek=%<PRIuMAX> (%lu-bajtových) "
"bloků"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "nelze získat informace o souboru %s z deskriptoru"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "na %<PRIuMAX> bajtů zkracuji výstupní soubor %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii z EBCDIC do ASCII\n"
+#~ " ebcdic z ASCII do EBCDIC\n"
+#~ " ibm z ASCII do pozměněného EBCDIC\n"
+#~ " block záznamy ukončené znakem nového řádku vyplní do velikosti "
+#~ "„cbs“\n"
+#~ " mezerami\n"
+#~ " unblock koncové mezery v záznamech o velikosti „cbs“ nahradí znakem "
+#~ "nového\n"
+#~ " řádku\n"
+#~ " lcase převede velká písmena na malá\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> zkrácený záznam\n"
+#~ msgstr[1] "%<PRIuMAX> zkrácené záznamy\n"
+#~ msgstr[2] "%<PRIuMAX> zkrácených záznamů\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "tyto konverze nelze kombinovat: ascii, ebcdic, ibm"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "block a unblock nelze použít současně"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "lcase a ucase nelze použít současně"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "varování: chybný offset souboru poté, co selhalo čtení"
+
+#~ msgid "error writing %s"
+#~ msgstr "chyba při zápisu %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argument %s je pro %s neplatný"
@@ -6823,9 +6841,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "nelze provést %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "pro %s -d nelze založit proces"
-
#~ msgid "write failed"
#~ msgstr "zápis se nezdařil"
diff --git a/po/da.gmo b/po/da.gmo
index 5949f7c..d9e407b 100644
Binary files a/po/da.gmo and b/po/da.gmo differ
diff --git a/po/da.po b/po/da.po
index 707e319..acbfc5b 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 4.5.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2003-03-30 19:53+0200\n"
"Last-Translator: Keld Jørn Simonsen <keld at dkuug.dk>\n"
"Language-Team: Danish <dansk at klid.dk>\n"
@@ -18,41 +18,53 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin og David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "kan ikke oprette katalog %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Prøv '%s --help' for mere information.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -61,16 +73,15 @@ msgstr ""
"Brug: %s [TAL]...\n"
" eller: %s FLAG\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopiér en fil med konvertering og formatering som angivet.\n"
@@ -81,21 +92,24 @@ msgstr ""
" count=BLOKKE kopiér kun BLOKKE indblokke\n"
" ibs=BYTE læs BYTE byte ad gangen\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FIL læs fra FIL i stedet for stdin\n"
" obs=BYTE skriv BYTE byte ad gangen\n"
@@ -105,52 +119,50 @@ msgstr ""
" skip=BLOKKE udelad BLOKKE blokke med ibs-størrelse fra\n"
" begyndelsen af inddata\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
#, fuzzy
msgid ""
"\n"
@@ -168,35 +180,14 @@ msgstr ""
"Hvert NØGLEORD kan være:\n"
"\n"
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii fra EBCDIC til ASCII\n"
-" ebcdic fra ASCII til EBCDIC\n"
-" ibm fra ASCII til alterneret EBCDIC\n"
-" block udfyld felter afsluttet med linjeskift med mellemrum til\n"
-" cbs-størrelse\n"
-" unblock erstat mellemrum med linjeskift i blokke med størrelse\n"
-" som givet i cbs\n"
-" lcase lav store bogstaver om til små\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -205,7 +196,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -214,52 +205,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s: angivet målkatalog er ikke et katalog"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -276,37 +267,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "ukendt systemfejl"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "afkortet blok"
-msgstr[1] "afkortet blok"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -320,150 +304,156 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "lukker indfil %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "lukker uddatafil %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Løbet tør for endelser til uddatafiler"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "åbner %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "MISLYKKEDES"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "skriver til %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "ukendt flag %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "ugyldig dato '%s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "ugyldigt datoformat %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "ugyldigt datoformat %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "ugyldigt datoformat %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "ugyldig konvertering: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "ugyldigt tal ved feltbegyndelsen"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "ugyldig gruppe"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "ugyldig bruger %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "ugyldigt antal %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "kan ikke undlade både bruger *og* gruppe"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "kan ikke sammenligne filnavnene %s og %s"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "kan ikke kombinere signal med -l eller -t"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "kan ikke kombinere signal med -l eller -t"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "kan ikke kombinere signal med -l eller -t"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "kan ikke kombinere signal med -l eller -t"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "kan ikke kombinere signal med -l eller -t"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "kan ikke kombinere signal med -l eller -t"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -472,109 +462,133 @@ msgstr ""
"advarsel: omgår lseek-kernefejl for fil (%s)\n"
" med mt_type=0x%0lx -- se <sys/mtio.h> for listen af typer"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "læser %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: kan ikke slette"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "advarsel: ugyldig bredde %lu; bruger %d i stedet"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "advarsel: ugyldig bredde %lu; bruger %d i stedet"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "sætter tider for %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "læser katalog %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "læser katalog %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "fejl ved skrivning til %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "skriver til %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standard-ind"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standard-ud"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "kan ikke udføre fstat() %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "passerer forbi %s byte i uddatafil %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii fra EBCDIC til ASCII\n"
+#~ " ebcdic fra ASCII til EBCDIC\n"
+#~ " ibm fra ASCII til alterneret EBCDIC\n"
+#~ " block udfyld felter afsluttet med linjeskift med mellemrum til\n"
+#~ " cbs-størrelse\n"
+#~ " unblock erstat mellemrum med linjeskift i blokke med størrelse\n"
+#~ " som givet i cbs\n"
+#~ " lcase lav store bogstaver om til små\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "afkortet blok"
+#~ msgstr[1] "afkortet blok"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "kan ikke undlade både bruger *og* gruppe"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "kan ikke sammenligne filnavnene %s og %s"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "advarsel: ugyldig bredde %lu; bruger %d i stedet"
+
+#~ msgid "error writing %s"
+#~ msgstr "fejl ved skrivning til %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ugyldigt argument %s for %s"
@@ -5680,10 +5694,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "kan ikke oprette midlertidig fil %s"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "kan ikke oprette katalog %s"
-
#~ msgid "write failed"
#~ msgstr "fejl ved skrivning"
diff --git a/po/dc3dd.pot b/po/dc3dd.pot
index 1b61ddc..e08d4ed 100644
--- a/po/dc3dd.pot
+++ b/po/dc3dd.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -18,120 +18,131 @@ msgstr ""
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+msgid "Could not allocate space for thread"
+msgstr ""
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr ""
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
" or: %s OPTION\n"
msgstr ""
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
-msgstr ""
-
-#: src/dc3dd.c:1080
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
+msgstr ""
+
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -142,26 +153,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -170,7 +169,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -179,51 +178,51 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr ""
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -240,37 +239,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr ""
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -284,242 +276,233 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr ""
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr ""
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr ""
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
msgid "Verify FAILED"
msgstr ""
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
-msgid "writing to %s"
+msgid "unrecognized operand %s"
msgstr ""
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, c-format
-msgid "unrecognized operand %s"
+msgid "illegal pattern %s"
+msgstr ""
+
+#: src/dc3dd.c:2748
+msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2753
#, c-format
-msgid "illegal pattern %s"
+msgid "Illegal split format %s"
msgstr ""
-#: src/dc3dd.c:2479
+#: src/dc3dd.c:2768
#, c-format
-msgid "unknown hash convention %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2500
-msgid "It is pitch dark here. You are likely to be eaten by a grue."
+#: src/dc3dd.c:2773
+#, c-format
+msgid "Illegal ifjoin format %s"
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal split format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2798
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr ""
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr ""
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr ""
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr ""
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr ""
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#: src/dc3dd.c:2938
+msgid "cannot combine excl and nocreat"
msgstr ""
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
+#: src/dc3dd.c:2941
+msgid "cannot combine if= and ifjoin="
msgstr ""
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
+#: src/dc3dd.c:2944
+msgid "cannot combine vf= and vfjoin="
msgstr ""
-#: src/dc3dd.c:2686
-msgid "cannot combine excl and nocreat"
+#: src/dc3dd.c:2947
+#, c-format
+msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2690
-msgid "cannot combine if= and ifjoin="
+#: src/dc3dd.c:2950
+msgid "cannot combine if= and wipe="
msgstr ""
-#: src/dc3dd.c:2693
-msgid "cannot combine vf= and vfjoin="
+#: src/dc3dd.c:2953
+msgid "cannot combine wipe= and ifjoin="
msgstr ""
-#: src/dc3dd.c:2708
-#, c-format
-msgid "error: split size must be a multiple of block size (currently %zd)"
+#: src/dc3dd.c:2955
+msgid "cannot combine wipe= and vfjoin="
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, c-format
msgid "skip: reading %s"
msgstr ""
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr ""
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr ""
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, c-format
msgid "reading %s at sector %jd"
msgstr ""
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr ""
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr ""
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
+msgid "writing to %s"
msgstr ""
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr ""
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr ""
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr ""
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr ""
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
diff --git a/po/de.gmo b/po/de.gmo
index 7effd1b..9f8e9c9 100644
Binary files a/po/de.gmo and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
index b7761c1..7176c75 100644
--- a/po/de.po
+++ b/po/de.po
@@ -40,7 +40,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-05-19 14:45+0200\n"
"Last-Translator: Michael Piefel <piefel at informatik.hu-berlin.de>\n"
"Language-Team: German <translation-team-de at lists.sourceforge.net>\n"
@@ -50,40 +50,52 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "konnte keinen Prozess für %s -d anlegen"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "„%s --help“ gibt weitere Informationen.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -92,16 +104,15 @@ msgstr ""
"Aufruf: %s [OPERAND...]\n"
" oder: %s OPTION\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopieren einer Datei, Konvertierung und Formatierung gemäß der Operanden.\n"
@@ -113,21 +124,24 @@ msgstr ""
" count=BLÖCKE nur BLÖCKE Eingabeblöcke kopieren\n"
" ibs=BYTES Lesen von BYTES Bytes auf einmal\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=DATEI aus DATEI statt von der Standardeingabe lesen\n"
" iflag=FLAGS anhand der kommagetrennten Symbolliste lesen\n"
@@ -140,52 +154,50 @@ msgstr ""
"überspringen\n"
" status=noxfer Transferstatistik unterdrücken\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -203,31 +215,12 @@ msgstr ""
"Jedes CONV‐Symbol kann sein:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii von EBCDIC in ASCII\n"
-" ebcdic von ASCII in EBCDIC\n"
-" ibm von ASCII in alternatives EBCDIC\n"
-" block mit Zeilenumbrüchen terminierte Datensätzen durch\n"
-" Leerzeichen bis zur cbs‐Größe auffüllen\n"
-" unblock nachlaufende Leerzeichen in Datensätzen von\n"
-" cbs‐Größe mit Zeilenumbrüchen ersetzen\n"
-" lcase Großbuchstaben in Kleinbuchstaben ändern\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat Ausgabedatei nicht anlegen\n"
" excl wenn Ausgabedatei schon existiert, abbrechen\n"
@@ -235,7 +228,7 @@ msgstr ""
" ucase Kleinbuchstaben in Großbuchstaben ändern\n"
" swab jedes Paar von Eingabebytes vertauschen\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -249,7 +242,7 @@ msgstr ""
" fdatasync vor Beendigung Ausgabedatendatei physisch schreiben\n"
" fsync genauso, zusätzlich auch die Metadaten\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -262,51 +255,51 @@ msgstr ""
"\n"
" append Anfügemodus (nur für Ausgabe sinnvoll; conv=notrunc empfohlen)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct direkte Ein‐/Ausgabe für Daten benutzen\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory abbrechen, wenn es sich nicht um ein Verzeichnis handelt\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync synchronisierte Ein‐/Ausgabe für Daten benutzen\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync genauso, aber auch für Metadaten\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock nicht‐blockierende Ein‐/Ausgabe benutzen\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime die Zugriffszeit nicht erneuern\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty das kontrollierende Terminal nicht von Datei zuweisen\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow symbolischen Verknüpfungen nicht folgen\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks abbrechen, wenn mehrfach verlinkt\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary binäre Ein‐/Ausgabe benutzen\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text textuelle Ein‐/Ausgabe benutzen\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -336,11 +329,11 @@ msgstr ""
"Optionen sind:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Unbekannter Systemfehler"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -349,26 +342,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> Datensätze ein\n"
"%<PRIuMAX>+%<PRIuMAX> Datensätze aus\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "ein abgeschnittener Datensatz\n"
-msgstr[1] "%<PRIuMAX> abgeschnittene Datensätze\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "ein Byte kopiert"
msgstr[1] "%<PRIuMAX> Bytes (%s) kopiert"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "unendlich B"
@@ -382,143 +368,151 @@ msgstr "unendlich B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "Schließen der Eingabedatei %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "Schließen der Ausgabedatei %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Kein Suffix für Ausgabedateien mehr verfügbar"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "öffne %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "FEHLSCHLAG"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "Schreiben in %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "nicht erkannter Operand %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "ungültiges Datum %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "Ungültiges Datumsformat %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "Ungültiges Datumsformat %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "Ungültiges Datumsformat %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "ungültige Konvertierung"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "ungültiges Eingabeflag"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "ungültiges Ausgabeflag"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "ungültiges Statusflag"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "ungültige Zahl %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "{ascii,ebcdic,ibm} sind in keiner Weise kombinierbar"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "block und unblock sind nicht kombinierbar"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "lcase und ucase sind nicht kombinierbar"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "excl und nocreat sind nicht kombinierbar"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "Optionen -e und -i können nicht kombiniert werden."
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "Optionen -e und -i können nicht kombiniert werden."
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "Optionen -e und -i können nicht kombiniert werden."
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "Optionen -e und -i können nicht kombiniert werden."
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "Optionen -e und -i können nicht kombiniert werden."
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -528,89 +522,74 @@ msgstr ""
" des Typs mt_type=0x%0lx – siehe <sys/mtio.h> für die Liste der Typen"
# XLATE_REMARK: Check this out! is the %s replaced by the name of the directory?
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "Lesen von %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: kann nicht zu Position springen"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "Offset‐Overflow beim Lesen der Datei %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "Warnung: ungültiger Datei‐Offset nach fehlgeschlagenem Lesen"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "kann nun einmal nicht um Kernel‐Fehler herumarbeiten"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "Warnung: ungültiger Datei‐Offset nach fehlgeschlagenem Lesen"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "setze Flags für %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "lese Verzeichnis %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "lese Verzeichnis %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "Fehler beim Schreiben von %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "Schreiben in %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync für %s fehlgeschlagen"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync für %s fehlgeschlagen"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "Standardeingabe"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "Standardausgabe"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -619,20 +598,58 @@ msgstr ""
"Offset zu groß: kann nicht auf eine Länge von seek=%<PRIuMAX> (%lu‐Byte‐) "
"Blöcke abschneiden"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "Aufruf von fstat für %s nicht möglich"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "schneide bei %<PRIuMAX> Bytes in Ausgabedatei %s ab"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii von EBCDIC in ASCII\n"
+#~ " ebcdic von ASCII in EBCDIC\n"
+#~ " ibm von ASCII in alternatives EBCDIC\n"
+#~ " block mit Zeilenumbrüchen terminierte Datensätzen durch\n"
+#~ " Leerzeichen bis zur cbs‐Größe auffüllen\n"
+#~ " unblock nachlaufende Leerzeichen in Datensätzen von\n"
+#~ " cbs‐Größe mit Zeilenumbrüchen ersetzen\n"
+#~ " lcase Großbuchstaben in Kleinbuchstaben ändern\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "ein abgeschnittener Datensatz\n"
+#~ msgstr[1] "%<PRIuMAX> abgeschnittene Datensätze\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "{ascii,ebcdic,ibm} sind in keiner Weise kombinierbar"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "block und unblock sind nicht kombinierbar"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "lcase und ucase sind nicht kombinierbar"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "Warnung: ungültiger Datei‐Offset nach fehlgeschlagenem Lesen"
+
+#~ msgid "error writing %s"
+#~ msgstr "Fehler beim Schreiben von %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ungültiges Argument %s für %s"
@@ -6971,9 +6988,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "konnte %s -d nicht ausführen"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "konnte keinen Prozess für %s -d anlegen"
-
#~ msgid "write failed"
#~ msgstr "Schreiben fehlgeschlagen"
diff --git a/po/el.gmo b/po/el.gmo
index db4a4e0..5111710 100644
Binary files a/po/el.gmo and b/po/el.gmo differ
diff --git a/po/el.po b/po/el.po
index bd8bea0..1fa1f01 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.10\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-03-13 11:25+0100\n"
"Last-Translator: Simos Xenitellis <simos.lists at googlemail.com>\n"
"Language-Team: Greek <team at lists.gnome.gr>\n"
@@ -15,124 +15,137 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Πωλ Ρούμπιν και Ντέιβιντ Μακένζη"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
#
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Δοκιμάστε `%s --help' για περισσότερη βοήθεια.\n"
#
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
" or: %s OPTION\n"
msgstr "Χρήση: %s [ΕΠΙΛΟΓΗ]... [ΕΙΣΟΔΟΣ [ΕΞΟΔΟΣ]]\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -143,26 +156,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -171,7 +172,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -180,53 +181,53 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
#
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "το `%s' υπάρχει ήδη άλλα δεν είναι κατάλογος"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -244,37 +245,30 @@ msgid ""
msgstr ""
#
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Άγνωστο σφάλμα συστήματος"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "μηδενισμένη εγγραφή και γράψιμο πάνω σε αυτή (truncated)"
-msgstr[1] "μηδενισμένη εγγραφή και γράψιμο πάνω σε αυτή (truncated)"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -288,167 +282,176 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
#
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, fuzzy, c-format
msgid "closing input file %s"
msgstr "δημιουργία αρχείου `%s'\n"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, fuzzy, c-format
msgid "closing output file %s"
msgstr "διαγραφή καταλόγου %s\n"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
#
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "η ιδεατή μνήμη εξαντλήθηκε"
#
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, fuzzy, c-format
msgid "opening %s"
msgstr "σφάλμα ανάγνωσης %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
#
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "ΑΝΕΠΙΤΥΧΕΣ"
#
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, fuzzy, c-format
-msgid "writing to %s"
-msgstr "σφάλμα εγγραφής %s"
-
-#
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "απαράδεκτη επιλογή `-%c'"
#
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "μη έγκυρος αριθμός πεδίου: `%s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
#
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "μη έγκυρο όρισμα %s για %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "μη έγκυρο όρισμα %s για %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "μη έγκυρο όρισμα %s για %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
#
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "μη έγκυρο είδος αλφαριθμητικού `%s'"
#
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "μη έγκυρος αριθμός πεδίου: `%s'"
#
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "μη έγκυρη ομάδα"
#
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "μη έγκυρο όρισμα %s για %s"
#
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, fuzzy, c-format
msgid "invalid number %s"
msgstr "μη έγκυρος αριθμός"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
#
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "δεν είναι δυνατό να παραληφθεί χρήστης και ομάδα"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "δεν είναι δυνατό να δημιουργηθεί το %s `%s' στο `%s'"
-
-#
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
#
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
#
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -456,92 +459,78 @@ msgid ""
msgstr ""
#
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "σφάλμα ανάγνωσης %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: δε μπορεί να διαγραφεί"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "διατήρηση ωρών στο %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
#
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
#
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
#
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
+#, fuzzy, c-format
+msgid "writing to %s"
msgstr "σφάλμα εγγραφής %s"
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
-
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
#
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "κανονική είσοδος"
#
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "κανονική έξοδος"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -549,20 +538,39 @@ msgid ""
msgstr ""
#
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, fuzzy, c-format
msgid "cannot fstat %s"
msgstr "αδύνατη η αλλαγή δικαιωμάτων στο %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "διαγραφή καταλόγου %s\n"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "μηδενισμένη εγγραφή και γράψιμο πάνω σε αυτή (truncated)"
+#~ msgstr[1] "μηδενισμένη εγγραφή και γράψιμο πάνω σε αυτή (truncated)"
+
+#
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "δεν είναι δυνατό να παραληφθεί χρήστης και ομάδα"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "δεν είναι δυνατό να δημιουργηθεί το %s `%s' στο `%s'"
+
+#
+#~ msgid "error writing %s"
+#~ msgstr "σφάλμα εγγραφής %s"
+
#
#~ msgid "invalid argument %s for %s"
#~ msgstr "μη έγκυρο όρισμα %s για %s"
@@ -4072,11 +4080,6 @@ msgstr ""
#~ msgstr "αδύνατη η αλλαγή δικαιωμάτων στο %s"
#
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
-
-#
#~ msgid "write failed"
#~ msgstr "αποτυχία εγγραφής"
diff --git a/po/es.gmo b/po/es.gmo
index f8a4571..f2fac9a 100644
Binary files a/po/es.gmo and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
index b7f7b6b..79bf982 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU coreutils 5.2.1\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2004-11-05 01:11+0100\n"
"Last-Translator: Santiago Vila Doncel <sanvila at unex.es>\n"
"Language-Team: Spanish <es at li.org>\n"
@@ -20,41 +20,56 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+#, fuzzy
+msgid "Unable to allocate space for thread buffer"
+msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
+
+#: src/dc3dd.c:556
+#, fuzzy
+msgid "Unable to allocate space for lock/signals"
+msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
#, fuzzy
msgid "Unable to allocate space for hashes"
msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
-#: src/dc3dd.c:680
-#, fuzzy, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+#, fuzzy
+msgid "Unable to allocate space for threads"
msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Pruebe `%s --help' para más información.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -63,16 +78,15 @@ msgstr ""
"Modo de empleo: %s [NÚMERO]...\n"
" o bien: %s OPCIÓN\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Copia un fichero, convirtiendo y dándole formato de acuerdo con las "
@@ -85,21 +99,24 @@ msgstr ""
" count=BLOQUES copia solamente BLOQUES bloques de entrada\n"
" ibs=BYTES lee BYTES bytes cada vez\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FICHERO lee del FICHERO en lugar de la entrada estándar (stdin)\n"
" obs=BYTES escribe BYTES bytes cada vez\n"
@@ -109,52 +126,50 @@ msgstr ""
" skip=BLOQUES se salta BLOQUES bloques de tamaño ibs al comienzo de la\n"
" entrada\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
#, fuzzy
msgid ""
"\n"
@@ -174,37 +189,14 @@ msgstr ""
"Cada PALABRA puede ser:\n"
"\n"
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii de EBCDIC a ASCII\n"
-" ebcdic de ASCII a EBCDIC\n"
-" ibm de ASCII a EBCDIC alternado\n"
-" block rellena los registros terminados en nueva línea con espacios "
-"hasta\n"
-" el tamaño de cbs\n"
-" unblock sustituye los espacios que sobran en los registros de tamaño "
-"cbs\n"
-" con un carácter de nueva línea\n"
-" lcase cambia las mayúsculas a minúsculas\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -213,7 +205,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -222,52 +214,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s: el directorio objetivo especificado no es un directorio"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -293,37 +285,30 @@ msgstr ""
" 10899206+0 registros leídos\n"
" 10899206+0 registros escritos\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Error del sistema desconocido"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "registro truncado"
-msgstr[1] "registro truncado"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -337,44 +322,44 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "cerrando el fichero de entrada %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "cerrando el fichero de salida %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
#, fuzzy
msgid "Unable to allocate filename"
msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Se han agotado los sufijos para los ficheros de salida"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "abriendo %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
#, fuzzy
msgid "Unable to allocate memory"
msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
@@ -382,112 +367,117 @@ msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
# Puestos a simplificar, a lo mejor podrías poner simplemente
# "coincide" o "no coincide". Cualquiera que use el programa sabe
# perfectamente qué es lo que coincide y lo que no. sv+
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "La suma no coincide"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "escribiendo en %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "opción no reconocida %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "fecha inválida `%s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "formato de fecha inválido %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "formato de fecha inválido %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "formato de fecha inválido %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "conversión inválida: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "número inválido al comienzo del campo"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "grupo inválido"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "usuario inválido %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "número inválido %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "no se puede omitir tanto el usuario como el grupo"
-
-# Lo mismo de antes.
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "no se pueden comparar los nombres de fichero %s y %s"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "no se puede combinar la señal con -l o -t"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "no se puede combinar la señal con -l o -t"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "no se puede combinar la señal con -l o -t"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "no se puede combinar la señal con -l o -t"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "no se puede combinar la señal con -l o -t"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "no se puede combinar la señal con -l o -t"
+
# Se admiten sugerencias.
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -497,109 +487,140 @@ msgstr ""
"relacionado con lseek para el fichero (%s) de mt_type=0x%0lx;\n"
"consulte la lista de tipos en <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "leyendo %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: no se puede borrar"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "atención: ancho %lu inválido; se usará %d en su lugar"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "atención: ancho %lu inválido; se usará %d en su lugar"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "estableciendo la fecha de %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "leyendo el directorio %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "leyendo el directorio %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "error al escribir en %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "escribiendo en %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, fuzzy, c-format
msgid "fsync failed for %s"
msgstr "No se puede abrir %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "entrada estándar"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "salida estándar"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "no se puede efectuar `fstat' sobre %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "avanzando %s bytes pasados en el fichero de salida %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid "Unable to allocate hashing buffer"
+#~ msgstr "no se puede asignar espacio de almacenamiento para %lu pasos"
+
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii de EBCDIC a ASCII\n"
+#~ " ebcdic de ASCII a EBCDIC\n"
+#~ " ibm de ASCII a EBCDIC alternado\n"
+#~ " block rellena los registros terminados en nueva línea con espacios "
+#~ "hasta\n"
+#~ " el tamaño de cbs\n"
+#~ " unblock sustituye los espacios que sobran en los registros de tamaño "
+#~ "cbs\n"
+#~ " con un carácter de nueva línea\n"
+#~ " lcase cambia las mayúsculas a minúsculas\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "registro truncado"
+#~ msgstr[1] "registro truncado"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "no se puede omitir tanto el usuario como el grupo"
+
+# Lo mismo de antes.
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "no se pueden comparar los nombres de fichero %s y %s"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "atención: ancho %lu inválido; se usará %d en su lugar"
+
+#~ msgid "error writing %s"
+#~ msgstr "error al escribir en %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argumento %s inválido para %s"
diff --git a/po/et.gmo b/po/et.gmo
index 9b70f39..d0ed8cc 100644
Binary files a/po/et.gmo and b/po/et.gmo differ
diff --git a/po/et.po b/po/et.po
index c6f4d01..06e7a75 100644
--- a/po/et.po
+++ b/po/et.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.5\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2006-11-23 12:07+0200\n"
"Last-Translator: Toomas Soome <Toomas.Soome at microlink.ee>\n"
"Language-Team: Estonian <et at li.org>\n"
@@ -16,40 +16,52 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "kataloogi `%s' ei õnnestu luua"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Lisainfo saamiseks proovige `%s --help'.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -58,16 +70,15 @@ msgstr ""
"Kasutamine: %s [OPERAND]...\n"
" või: %s VÕTI\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopeeri fail, teisendades ja vormindades seda vastavalt võtmetele.\n"
@@ -78,21 +89,24 @@ msgstr ""
" count=PLOKKE kopeeri ainult PLOKKE sisendplokki\n"
" ibs=BAITE loe BAITI baiti korraga\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FAIL loe standardsisendi asemel faili\n"
" iflag=LIPUD loe vastavalt komadega eraldatud võtmetele\n"
@@ -103,52 +117,50 @@ msgstr ""
" skip=PLOKKI jäta PLOKKI ibs mahus plokke sisendist lugemata\n"
" status=noxfer blokeeri ülekande statistika\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -166,30 +178,12 @@ msgstr ""
"Iga VÕTMESÕNA võib olla:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii tabelist EBCDIC tabelisse ASCII\n"
-" ebcdic tabelist ASCII tabelisse EBCDIC\n"
-" ibm tabelist ASCII alternatiivsesse EBCDIC tabelisse\n"
-" block täienda reavahetusega lõpetatud kirjed tühikutega cbs-mahtu\n"
-" unblock asenda cbs-mahus blokkides lõpetavad tühikud reavahetusega\n"
-" lcase asenda suurtähed väiketähtedega\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat ära loo väljundfaili\n"
" excl katkesta, kui väljundfail on juba olemas\n"
@@ -202,7 +196,7 @@ msgstr ""
" fdatasync enne lõpetamist kindlusta andmete faili kirjutamine\n"
" fsync nagu eelmine, aga kirjuta ka metainfo\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
#, fuzzy
msgid ""
" noerror continue after read errors\n"
@@ -222,7 +216,7 @@ msgstr ""
" fdatasync enne lõpetamist kindlusta andmete faili kirjutamine\n"
" fsync nagu eelmine, aga kirjuta ka metainfo\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -236,51 +230,51 @@ msgstr ""
" append lisamise mood (omab mõtet ainult väljundil; soovitame "
"conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct kasuta andmete käsitlemisel puhverdamata S/V\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory katkesta kui ei ole kataloog\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync kasuta andmete käsitlemisel sünkroonmoodi S/V\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync sama, aga ka metainfo korral\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock kasuta mitteblokeeruvat S/V\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime ära uuenda kasutamise aega\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty ei seosta kontrollivat terminali\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow ei järgi nimeviiteid\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks katkesta, kui on viiteid\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary kasuta andmete käsitlemisel binaarmoodi\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text kasuta andmete käsitlemisel tekstimoodi\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -310,11 +304,11 @@ msgstr ""
"Võtmed on:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Tundmatu süsteemne viga"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -323,26 +317,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> kirjet sisse\n"
"%<PRIuMAX>+%<PRIuMAX> kirjet välja\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> lühendatud kirje\n"
-msgstr[1] "%<PRIuMAX> lühendatud kirjet\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%<PRIuMAX> bait (%s) kopeeritud"
msgstr[1] "%<PRIuMAX> baiti (%s) kopeeritud"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Lõpmatu B"
@@ -356,147 +343,155 @@ msgstr "Lõpmatu B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "sulgen sisendfaili %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "sulgen väljundfaili %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Väljundfailide sufiksid said otsa"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "avan %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "EBAÕNNESTUS"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "kirjutan faili %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "tundmatu operand %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "vigane kuupäev %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "vigane kuupäeva vorming %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "vigane kuupäeva vorming %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "vigane kuupäeva vorming %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "vigane teisendus: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "vigane sisendi lipp: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "vigane väljundi lipp: %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "vigane oleku lipp: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "vigane number %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "hulgast {ascii,ebcdic,ibm} ei saa ühtegi paari kasutada"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "block ja unblock ei saa koos kasutada"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "lcase ja ucase ei saa koos kasutada"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "excl ja nocreat ei saa koos kasutada"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "-e ja -i võtmeid ei saa kombineerida"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "-e ja -i võtmeid ei saa kombineerida"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "-e ja -i võtmeid ei saa kombineerida"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "-e ja -i võtmeid ei saa kombineerida"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "-e ja -i võtmeid ei saa kombineerida"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -505,89 +500,74 @@ msgstr ""
"hoiatus: kasutan lseek funktsiooni tuuma vea tõttu alternatiivset meetodit,\n"
"fail (%s) mt_type=0x%0lx -- tüüpide nimekirja leiate <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "loen %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: seek ebaõnnestus"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "failiviida ületäitumine %s lugemisel"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "hoiatus: peale lugemisviga ei pruugi failiviit olla õige"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "ei õnnestu tuuma veast mööda minna"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "hoiatus: peale lugemisviga ei pruugi failiviit olla õige"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "sean %s lipud"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "loen kataloogi %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "loen kataloogi %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "viga %s kirjutamisel"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "kirjutan faili %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync %s ebaõnnestus"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync %s ebaõnnestus"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standardsisend"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standardväljund"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -596,20 +576,56 @@ msgstr ""
"indeks on liiga suur: ei õnnestu lühendada pikkuseni seek=%<PRIuMAX> (%lu-"
"baiti) blokki"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "fstat %s ei õnnestu"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "lühendan %<PRIuMAX> baiti väljundfailis %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii tabelist EBCDIC tabelisse ASCII\n"
+#~ " ebcdic tabelist ASCII tabelisse EBCDIC\n"
+#~ " ibm tabelist ASCII alternatiivsesse EBCDIC tabelisse\n"
+#~ " block täienda reavahetusega lõpetatud kirjed tühikutega cbs-mahtu\n"
+#~ " unblock asenda cbs-mahus blokkides lõpetavad tühikud reavahetusega\n"
+#~ " lcase asenda suurtähed väiketähtedega\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> lühendatud kirje\n"
+#~ msgstr[1] "%<PRIuMAX> lühendatud kirjet\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "hulgast {ascii,ebcdic,ibm} ei saa ühtegi paari kasutada"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "block ja unblock ei saa koos kasutada"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "lcase ja ucase ei saa koos kasutada"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "hoiatus: peale lugemisviga ei pruugi failiviit olla õige"
+
+#~ msgid "error writing %s"
+#~ msgstr "viga %s kirjutamisel"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "vigane argument %s võtmel `%s'"
@@ -6275,10 +6291,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "ajutist faili ei õnnestu luua"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "kataloogi `%s' ei õnnestu luua"
-
#~ msgid "write failed"
#~ msgstr "kirjutamine ebaõnnestus"
diff --git a/po/eu.gmo b/po/eu.gmo
index 0073251..0d5f389 100644
Binary files a/po/eu.gmo and b/po/eu.gmo differ
diff --git a/po/eu.po b/po/eu.po
index 8e23e79..e96b5d4 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils-5.2.1\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2005-01-04 20:27+0100\n"
"Last-Translator: Mikel Olasagasti <hey_neken at mundurat.net>\n"
"Language-Team: Basque <translation-team-eu at lists.sourceforge.net>\n"
@@ -18,40 +18,52 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "ezin da %s direktorioa sortu"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Saiatu `%s --help' erabiltzen informazio gehiagorako.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Erabilera: %s [ZENBAKIA]...\n"
" edo: %s AUKERA\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopiatu a eta e\n"
@@ -79,21 +90,24 @@ msgstr ""
" kopiatu\n"
" a e"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
"FITXATEGIA FITXATEGIA horren ordez -\n"
" a\n"
@@ -101,52 +115,50 @@ msgstr ""
" hasi -\n"
" hasi - e"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
#, fuzzy
msgid ""
"\n"
@@ -159,33 +171,14 @@ msgid ""
msgstr ""
"eta maiatzak bider M MB M B eta aktibatuta errepikatu arte E Y maiatzak e e"
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-"ASCII\n"
-" ASCII\n"
-" ASCII\n"
-" honekin tamaina\n"
-" in tamaina honekin\n"
-" e"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -194,7 +187,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -203,52 +196,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "da a"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -270,37 +263,30 @@ msgstr ""
" in\n"
" e"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Sistema-errore ezezaguna"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -314,150 +300,156 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "%s sarrera fitxategia itxitzen"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "%s irteera fitxategia itxitzen"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Irteera"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "%s irekitzen"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "HUTS EGIN DA"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "%s-ra idazten"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "%s: '--%s' aukera ezezaguna\n"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "baliogabea"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "baliogabea"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "baliogabea"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "baliogabea"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "baliogabea"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "baliogabea hasi"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "baliogabeko taldea"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "baliogabea"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, fuzzy, c-format
msgid "invalid number %s"
msgstr "baliogabea"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "ezin dira biak, erabiltzailea eta taldea, alde batera utzi"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "eta"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "honekin edo"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "honekin edo"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "honekin edo"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "honekin edo"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "honekin edo"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "honekin edo"
+
+#: src/dc3dd.c:3116
#, fuzzy, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -466,109 +458,125 @@ msgstr ""
"errepikatu arte\n"
" - mota<sys/mtio.h> errepikatu arte zerrenda -"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "%s irakurtzen"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: ezin da kendu"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "baliogabea zabalera horren ordez"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "baliogabea zabalera horren ordez"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "-"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "%s direktorioa irakurtzen"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "%s direktorioa irakurtzen"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "errorea %s idazten"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "%s-ra idazten"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, fuzzy, c-format
msgid "fsync failed for %s"
msgstr "huts egin da %s irekitzen"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "sarrera estandarra"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "irteera estandarra"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr ""
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr ""
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ "ASCII\n"
+#~ " ASCII\n"
+#~ " ASCII\n"
+#~ " honekin tamaina\n"
+#~ " in tamaina honekin\n"
+#~ " e"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "ezin dira biak, erabiltzailea eta taldea, alde batera utzi"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "eta"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "baliogabea zabalera horren ordez"
+
+#~ msgid "error writing %s"
+#~ msgstr "errorea %s idazten"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%s baliogabeko argumentua da %s-(r)entzat"
@@ -5398,10 +5406,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "ezin izan da abio ordua lortu"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "ezin da %s direktorioa sortu"
-
#~ msgid "write failed"
#~ msgstr "idazketak huts egin du"
diff --git a/po/fi.gmo b/po/fi.gmo
index bfa1ccf..883c8f0 100644
Binary files a/po/fi.gmo and b/po/fi.gmo differ
diff --git a/po/fi.po b/po/fi.po
index 8b3bca1..f51f8a8 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.9.91\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-01-03 21:02+0200\n"
"Last-Translator: Lauri Nurmi <lanurmi at iki.fi>\n"
"Language-Team: Finnish <translation-team-fi at lists.sourceforge.net>\n"
@@ -31,41 +31,53 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin ja David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "hakemiston %s luominen ei onnistu"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Lisätietoja komennolla ”%s --help”.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -74,16 +86,15 @@ msgstr ""
"Käyttö: %s [OPERANDI]...\n"
" tai: %s VALITSIN\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopioi tiedosto, muuntaen ja muotoillen operandien mukaisesti.\n"
@@ -95,21 +106,24 @@ msgstr ""
" count=LOHKOT kopioi vain LOHKOT-arvon verran lohkoja\n"
" ibs=TAVUT lue TAVUT-arvon verran tavuja kerralla\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=TIEDOSTO lue TIEDOSTOsta vakiosyötteen sijaan\n"
" obs=TAVUT kirjoita TAVUT-arvon verran tavuja kerralla\n"
@@ -117,52 +131,50 @@ msgstr ""
" seek=LOHKOT ohita tulosteen alussa LOHKOT verran obs-kokoisia lohkoja\n"
" skip=LOHKOT ohita syötteen alusta LOHKOT verran ibs-kokoisia lohkoja\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -180,32 +192,12 @@ msgstr ""
"Kukin MUUNNOS voi olla:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii EBCDIC -> ASCII\n"
-" ebcdic ASCII -> EBCDIC\n"
-" ibm ASCII -> muutettu EBCDIC\n"
-" block tasaa rivinvaihtoon päättyvät tietueet välilyönneillä cbs-"
-"kokoon\n"
-" unblock korvaa välilyönnit cbs-kokoisten tietueiden lopusta "
-"rivinvaihdolla\n"
-" lcase muuta isot kirjaimet pieniksi\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" notrunc älä typistä tulostiedostoa\n"
" ucase muuta pienet kirjaimet isoiksi\n"
@@ -215,7 +207,7 @@ msgstr ""
"käytettäessä\n"
" avainsanaa block tai unblock, tasataan välilyönneillä\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
#, fuzzy
msgid ""
" noerror continue after read errors\n"
@@ -232,7 +224,7 @@ msgstr ""
"käytettäessä\n"
" avainsanaa block tai unblock, tasataan välilyönneillä\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -241,52 +233,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "kohdehakemisto ei ole sallittu asennettaessa hakemistoa"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -315,11 +307,11 @@ msgstr ""
"Valitsimet ovat:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Tuntematon järjestelmävirhe"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -328,26 +320,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> tietuetta sisään\n"
"%<PRIuMAX>+%<PRIuMAX> tietuetta ulos\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "typistetty tietue\n"
-msgstr[1] "%<PRIuMAX> typistettyä tietuetta\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "1 tavu (1 B) kopioitu"
msgstr[1] "%<PRIuMAX> tavua (%s) kopioitu"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -361,150 +346,156 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr " %g sekunnissa, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, fuzzy, c-format
msgid ", %g s, %s/s\n"
msgstr " %g sekunnissa, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "suljetaan syötetiedosto %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "suljetaan tulostiedosto %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Tulostiedostojen jälkiliitteet käytetty loppuun"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "tiedoston %s avaaminen"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "EI TÄSMÄÄ"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "kirjoitettaessa tiedostoon %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "tunnistamaton operandi %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "virheellinen päiväys %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "virheellinen päiväyksen muoto %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "virheellinen päiväyksen muoto %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "virheellinen päiväyksen muoto %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "virheellinen muunnos: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "virheellinen leveys: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "virheellinen ryhmänimi %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "virheellinen päiväyksen muoto %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "virheellinen määrä %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "sekä käyttäjää että ryhmää ei voi jättää antamatta"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "tiedostonimiä %s ja %s ei voi vertailla"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "signaalin yhdistäminen valitsimen -l tai -t kanssa ei onnistu"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "valitsimia -e ja -i ei voi käyttää yhdessä"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "valitsimia -e ja -i ei voi käyttää yhdessä"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "valitsimia -e ja -i ei voi käyttää yhdessä"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "valitsimia -e ja -i ei voi käyttää yhdessä"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "valitsimia -e ja -i ei voi käyttää yhdessä"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -513,89 +504,74 @@ msgstr ""
"varoitus: ohitetaan ytimen lseek-ohjelmistovika tiedostolle (%s)\n"
" mt_type=0x%0lx -- katso tyyppien luettelo tiedostosta <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "luettaessa tiedostoa %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: ei voi poistaa"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "varoitus: lähdetiedosto %s annettu useammin kuin kerran"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "varoitus: lähdetiedosto %s annettu useammin kuin kerran"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "asetettaessa tiedoston %s lippuja"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "luetaan hakemistoa %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "luetaan hakemistoa %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "virhe kirjoitettaessa tiedostoa %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "kirjoitettaessa tiedostoon %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, fuzzy, c-format
msgid "fsync failed for %s"
msgstr "tiedoston %s avaaminen epäonnistui"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "vakiosyöte"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "vakiotuloste"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -604,20 +580,58 @@ msgstr ""
# On sitten ihan turha tehdä suomennoksissa mitään eroa statin, fstatin, ym.
# välille, käyttäjää ei kiinnosta.
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "tiedoston %s tilan lukeminen ei onnistu"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "edetään %s tavun yli tulostiedostossa %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii EBCDIC -> ASCII\n"
+#~ " ebcdic ASCII -> EBCDIC\n"
+#~ " ibm ASCII -> muutettu EBCDIC\n"
+#~ " block tasaa rivinvaihtoon päättyvät tietueet välilyönneillä cbs-"
+#~ "kokoon\n"
+#~ " unblock korvaa välilyönnit cbs-kokoisten tietueiden lopusta "
+#~ "rivinvaihdolla\n"
+#~ " lcase muuta isot kirjaimet pieniksi\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "typistetty tietue\n"
+#~ msgstr[1] "%<PRIuMAX> typistettyä tietuetta\n"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "sekä käyttäjää että ryhmää ei voi jättää antamatta"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "tiedostonimiä %s ja %s ei voi vertailla"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "varoitus: lähdetiedosto %s annettu useammin kuin kerran"
+
+#~ msgid "error writing %s"
+#~ msgstr "virhe kirjoitettaessa tiedostoa %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "virheellinen argumentti %s %s:lle"
@@ -6232,10 +6246,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "väliaikaistiedoston luominen ei onnistu"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "hakemiston %s luominen ei onnistu"
-
#~ msgid "write failed"
#~ msgstr "kirjoitus epäonnistui"
diff --git a/po/fr.gmo b/po/fr.gmo
index 2951d59..9bdb9e0 100644
Binary files a/po/fr.gmo and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
index 2e76250..7229862 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils-6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-05-31 11:33+0200\n"
"Last-Translator: kerb <y.kerb at laposte.net>\n"
"Language-Team: French <traduc at traduc.org>\n"
@@ -20,40 +20,52 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "n'a pu créer le process pour %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Pour en savoir davantage, faites: « %s --help ».\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -62,16 +74,15 @@ msgstr ""
"Usage: %s [OPÉRANDE]...\n"
" ou: %s OPTION\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Copier un fichier en le convertissant et le formatant selon les opérandes.\n"
@@ -83,21 +94,24 @@ msgstr ""
" count=N copier seulement N blocs à partir de l'entrée\n"
" ibs=N lire N octets à la fois\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FICHIER lire à partir du FICHIER au lieu de l'entrée standard\n"
" iflag=FANIONS lire à l'aide de LISTE de symboles séparés par des "
@@ -110,52 +124,50 @@ msgstr ""
" skip=N escamoter N blocs de taille « ibs » du fichier d'entrée\n"
" status=noxfer supprimer les statistiques de transfert\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -174,31 +186,12 @@ msgstr ""
"Chaque mot CLÉ peut être:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii de l'EBCDIC vers l'ASCII\n"
-" ebcdic de l'ASCII vers l'EBCDIC\n"
-" ibm de l'ASCII vers l'EBCDIC en utilisant une table différente\n"
-" block remplir les enregistrements terminés par un saut de ligne\n"
-" par des blancs jusqu'à l'obtention de la taille « cbs »\n"
-" unblock remplacer les blancs de la fin des enregistrements\n"
-" de taille « cbs » par des sauts de ligne\n"
-" lcase changer les majuscules en minuscules\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat ne pas créer de ficheir de sortie\n"
" excl échoue si le fichier de sortie existe déjà\n"
@@ -206,7 +199,7 @@ msgstr ""
" ucase change les minuscules en majuscules\n"
" swab interchange chaque paire d'octets entrée\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -221,7 +214,7 @@ msgstr ""
" fdatasync écrit physiquement les données en sortie avant la fin\n"
" fsync pareil, mais écrit les métadonnées\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -235,52 +228,52 @@ msgstr ""
" append mode d'accolage (n'a de sens que pour la sortie ; conv=notrunc "
"suggéré)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct utiliser les E/S directes pour les données\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " échec de répertoire à moins qu'un répertoire\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync utilise une E/S synchronisée pour les données\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync identique mais aussi pour les métadonnées\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock utiliser une E/S non bloquante\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime ne met pas à jour la date d'accès\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
" noctty ne pas assigner de terminal contrôleur à partir du fichier\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow ne pas suivre les liens symboliques\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks échoue si multiply-linked\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binaire utiliser les E/S binaires pour les données\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text utiliser les E/S textuelles pour les données\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -307,11 +300,11 @@ msgstr ""
" 18335302+0 enregistrements écrits\n"
" 9387674624 octets (9.4 Go) copiés, 34.6279 secondes, 271 Mo/s\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Erreur système inconnue"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -320,26 +313,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> enregistrements lus\n"
"%<PRIuMAX>+%<PRIuMAX> enregistrements écrits\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> enregistrement tronqué\n"
-msgstr[1] "%<PRIuMAX> enregistrements tronqués\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%<PRIuMAX> octet (%s) copié"
msgstr[1] "%<PRIuMAX> octets (%s) copiés"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Infinité B"
@@ -353,143 +339,151 @@ msgstr "Infinité B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "fermeture du fichier d'entrée %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "fermeture du fichier de sortie %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Produire les suffixes des fichiers épuisés"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "ouverture de %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "ÉCHEC"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "écriture vers %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "opérande non reconnue %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "date invalide %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "format de date invalide %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "format de date invalide %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "format de date invalide %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "conversion invalide"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "fanion d'entrée invalide"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "fanion de sortie invalide"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "fanion d'état invalide"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "nombre invalide %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "ne peut combiner n'importe quel des deux de: ascii, ebcdic, ibm"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "ne peut combiner les options block t unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "ne peut combiner les options lcase et ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "ne peut combiner les options excl et nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "ne peut combiner les options -e et -i"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "ne peut combiner les options -e et -i"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "ne peut combiner les options -e et -i"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "ne peut combiner les options -e et -i"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "ne peut combiner les options -e et -i"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -499,93 +493,76 @@ msgstr ""
"pour le fichier (%s)\n"
"de type mt_type=0x%0lx -- voir <sys/mtio.h> pour la liste des types"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "lecture de %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: ne peut retrouver"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "débordement du décalage lors de la lecture du fichier %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
"avertissement : décalage(offset) de fichier invalide suite à un échec de "
"lecture"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "ne peut après tout contrer une anomalie du kernel"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-"avertissement : décalage(offset) de fichier invalide suite à un échec de "
-"lecture"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "initialisation des fanions pour %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "lecture du répertoire %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "lecture du répertoire %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "Erreur lors de l'écriture %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "écriture vers %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync a échoué pour %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync a échoue pour %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "entrée standard"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "sortie standard"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -594,20 +571,60 @@ msgstr ""
"décalage trop grand: ne peut tronquer à la longueur de la recherche=%"
"<PRIuMAX> (%lu-byte) blocs"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "ne peut évaluer par fstat() %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "troncation à %<PRIuMAX> octets dans le fichier de sortie %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii de l'EBCDIC vers l'ASCII\n"
+#~ " ebcdic de l'ASCII vers l'EBCDIC\n"
+#~ " ibm de l'ASCII vers l'EBCDIC en utilisant une table différente\n"
+#~ " block remplir les enregistrements terminés par un saut de ligne\n"
+#~ " par des blancs jusqu'à l'obtention de la taille « cbs »\n"
+#~ " unblock remplacer les blancs de la fin des enregistrements\n"
+#~ " de taille « cbs » par des sauts de ligne\n"
+#~ " lcase changer les majuscules en minuscules\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> enregistrement tronqué\n"
+#~ msgstr[1] "%<PRIuMAX> enregistrements tronqués\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "ne peut combiner n'importe quel des deux de: ascii, ebcdic, ibm"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "ne peut combiner les options block t unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "ne peut combiner les options lcase et ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr ""
+#~ "avertissement : décalage(offset) de fichier invalide suite à un échec de "
+#~ "lecture"
+
+#~ msgid "error writing %s"
+#~ msgstr "Erreur lors de l'écriture %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argument %s invalide pour %s"
@@ -6984,9 +7001,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "n'a pu exécuter %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "n'a pu créer le process pour %s -d"
-
#~ msgid "write failed"
#~ msgstr "Echec d'écriture."
diff --git a/po/ga.gmo b/po/ga.gmo
index df89f73..84479fc 100644
Binary files a/po/ga.gmo and b/po/ga.gmo differ
diff --git a/po/ga.po b/po/ga.po
index 8f1221c..5c4c6da 100644
--- a/po/ga.po
+++ b/po/ga.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-04-20 12:24-0600\n"
"Last-Translator: Kevin Scannell <kscanne at gmail.com>\n"
"Language-Team: Irish <gaeilge-gnulinux at lists.sourceforge.net>\n"
@@ -18,40 +18,52 @@ msgstr ""
"(n>6 && n<11) ? 3 : 4;\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "níorbh fhéidir próiseas a chruthú le haghaidh %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Úsáid: %s [OIBREANN]...\n"
" nó: %s ROGHA\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Cóipeáil comhad, ag tiontú agus ag formáidiú dar leis na hoibrinn.\n"
@@ -80,21 +91,24 @@ msgstr ""
" count=BLOIC cóipeáil BLOIC bloc ionchurtha amháin\n"
" ibs=BEARTA léigh BEARTA beart sa turas\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=COMHAD léigh ó CHOMHAD in ionad an ghnáth-ionchuir\n"
" iflag=BRATACH léigh de réir an liosta siombailí, scartha le camóga\n"
@@ -106,52 +120,50 @@ msgstr ""
"ionchuir\n"
" status=noxfer ná taispeáin staitistic faoin aistriú\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -169,31 +181,12 @@ msgstr ""
"Is féidir EOCHAIRFHOCAL a bheith:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii ó EBCDIC go ASCII\n"
-" ebcdic ó ASCII go EBCDIC\n"
-" ibm ó ASCII go EBCDIC malartach\n"
-" block stuáil le spásanna go cbs-size gach taifead atá scortha le líne "
-"nua\n"
-" unblock cuir línte nua in ionad spásanna ag deireadh de thaifid de cbs-"
-"size\n"
-" lcase athraigh an cás uachtair go dtí an cás íochtair\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat ná cruthaigh an t-aschomhad\n"
" excl teip má tá an t-aschomhad ann cheana\n"
@@ -201,7 +194,7 @@ msgstr ""
" ucase athraigh an cás íochtair go dtí an cás uachtair\n"
" swab babhtáil gach cúpla beart san ionchur\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -216,7 +209,7 @@ msgstr ""
" fdatasync scríobh ar an aschomhad go fisiceach roimh chríochnú\n"
" fsync mar an gcéanna, ach scríobh meiteashonraí freisin\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -230,51 +223,51 @@ msgstr ""
" append mód iarcheangail (ná húsáid ach le haschur; moltar "
"conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct úsáid I/A díreach le haghaidh sonraí\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory teip mura comhadlann é\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync úsáid I/A sioncrónaithe le haghaidh sonraí\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync mar an gcéanna, ach le haghaidh meiteashonraí fosta\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock úsáid I/A gan bhacainní\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime ná nuashonraigh an t-am rochtana\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty ná ceap an teirminéal rialaithe ó chomhad\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow ná lean naisc shiombalacha\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks teip má tá naisc iomadúla ann\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary úsáid I/A dénártha le haghaidh sonraí\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text úsáid I/A téacs le haghaidh sonraí\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -304,11 +297,11 @@ msgstr ""
"Roghanna:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Earráid chórais anaithnid"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -317,22 +310,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> taifead isteach\n"
"%<PRIuMAX>+%<PRIuMAX> taifead amach\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> taifead teasctha\n"
-msgstr[1] "%<PRIuMAX> thaifead teasctha\n"
-msgstr[2] "%<PRIuMAX> thaifead teasctha\n"
-msgstr[3] "%<PRIuMAX> dtaifead teasctha\n"
-msgstr[4] "%<PRIuMAX> taifead teasctha\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -342,7 +325,7 @@ msgstr[2] "cóipeáladh %<PRIuMAX> bheart (%s)"
msgstr[3] "cóipeáladh %<PRIuMAX> mbeart (%s)"
msgstr[4] "cóipeáladh %<PRIuMAX> beart (%s)"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Éigríoch B"
@@ -356,144 +339,154 @@ msgstr "Éigríoch B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g shoicind, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g shoicind, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "inchomhad %s á dhúnadh"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "aschomhad %s á dhúnadh"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Iarmhíreanna don aschomhad ídithe"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "%s á oscailt"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "TEIPTHE"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "á scríobh i %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "oibreann anaithnid %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "dáta neamhbhailí %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
# similar string for time format in ls.c -KPS
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "formáid neamhbhailí ar an dáta: %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+# similar string for time format in ls.c -KPS
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "formáid neamhbhailí ar an dáta: %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+# similar string for time format in ls.c -KPS
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "formáid neamhbhailí ar an dáta: %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "tiontú neamhbhailí"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "bratach neamhbhailí ionchurtha"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "bratach neamhbhailí aschurtha"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "bratach neamhbhailí stádais"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "uimhir neamhbhailí %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "ní féidir aon dá cheann de {ascii,ebcdic,ibm} a úsáid lena chéile"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "ní féidir `block' agus `unblock' a úsáid lena chéile"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "ní féidir `lcase' agus `ucase' a úsáid lena chéile"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "ní féidir `excl' agus `nocreat' a úsáid lena chéile"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "ní féidir roghanna -e agus -i a chumasc"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "ní féidir roghanna -e agus -i a chumasc"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "ní féidir roghanna -e agus -i a chumasc"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "ní féidir roghanna -e agus -i a chumasc"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "ní féidir roghanna -e agus -i a chumasc"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -502,89 +495,74 @@ msgstr ""
"rabhadh: ag seachaint fabht eithne `lseek' don chomhad (%s)\n"
" de mt_type=0x%0lx -- féach ar <sys/mtio.h> le haghaidh liosta cineálacha"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "%s á léamh"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: ní féidir seek a dhéanamh"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "fritháireamh thar maoil agus comhad %s á léamh"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "rabhadh: fritháireamh neamhbhailí i ndiaidh léamh teipthe"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "tar éis an tsaoil, ní féidir fabht san eithne a sheachaint"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "rabhadh: fritháireamh neamhbhailí i ndiaidh léamh teipthe"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "bratacha á socraithe le haghaidh %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "comhadlann %s á léamh"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "comhadlann %s á léamh"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "earráid agus %s á scríobh"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "á scríobh i %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "theip ar fdatasync i gcomhair %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "theip ar fsync i gcomhair %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "gnáth-ionchur"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "gnáth-aschur"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -592,20 +570,61 @@ msgid ""
msgstr ""
"fritháireamh rómhór: ní féidir teascadh go fad %<PRIuMAX> (%lu beart) bloc"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "ní féidir %s a `fstat'"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "á theascadh ag %<PRIuMAX> beart san aschomhad %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii ó EBCDIC go ASCII\n"
+#~ " ebcdic ó ASCII go EBCDIC\n"
+#~ " ibm ó ASCII go EBCDIC malartach\n"
+#~ " block stuáil le spásanna go cbs-size gach taifead atá scortha le "
+#~ "líne nua\n"
+#~ " unblock cuir línte nua in ionad spásanna ag deireadh de thaifid de "
+#~ "cbs-size\n"
+#~ " lcase athraigh an cás uachtair go dtí an cás íochtair\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> taifead teasctha\n"
+#~ msgstr[1] "%<PRIuMAX> thaifead teasctha\n"
+#~ msgstr[2] "%<PRIuMAX> thaifead teasctha\n"
+#~ msgstr[3] "%<PRIuMAX> dtaifead teasctha\n"
+#~ msgstr[4] "%<PRIuMAX> taifead teasctha\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "ní féidir aon dá cheann de {ascii,ebcdic,ibm} a úsáid lena chéile"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "ní féidir `block' agus `unblock' a úsáid lena chéile"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "ní féidir `lcase' agus `ucase' a úsáid lena chéile"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "rabhadh: fritháireamh neamhbhailí i ndiaidh léamh teipthe"
+
+#~ msgid "error writing %s"
+#~ msgstr "earráid agus %s á scríobh"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argóint neamhbhailí %s chun %s"
@@ -6796,9 +6815,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "níorbh fhéidir %s -d a rith"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "níorbh fhéidir próiseas a chruthú le haghaidh %s -d"
-
#~ msgid "write failed"
#~ msgstr "theip ar scríobh"
diff --git a/po/gl.gmo b/po/gl.gmo
index 2d0a8e5..d84d22b 100644
Binary files a/po/gl.gmo and b/po/gl.gmo differ
diff --git a/po/gl.po b/po/gl.po
index 50e5fd3..d1d39a8 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: textutils 2.0.22\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2002-07-23 03:07+0200\n"
"Last-Translator: Jacobo Tarrio <jtarrio at trasno.net>\n"
"Language-Team: Galician <gpul-traduccion at ceu.fi.udc.es>\n"
@@ -15,41 +15,53 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin e David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "non se pode crea-lo directorio %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Escriba \"%s --help\" para máis información.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -58,80 +70,80 @@ msgstr ""
"Uso: %s [FICHEIRO]...\n"
" ou: %s [OPCIÓN]\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -142,26 +154,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -170,7 +170,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -179,52 +179,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s existe pero non é un directorio"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -241,37 +241,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Erro do sistema descoñecido"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "rexistro truncado"
-msgstr[1] "rexistro truncado"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -285,259 +278,271 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, fuzzy, c-format
msgid "closing input file %s"
msgstr "creando ficheiro \"%s\"\n"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "pechando o ficheiro de saída %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Esgotáronse os sufixos de ficheiros de saída"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, fuzzy, c-format
msgid "opening %s"
msgstr "erro lendo %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "FALLA"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, fuzzy, c-format
-msgid "writing to %s"
-msgstr "erro escribindo %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "opción descoñecida \"-%c\""
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "anchura non válida: \"%s\""
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "argumento incorrecto %s para %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "argumento incorrecto %s para %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "argumento incorrecto %s para %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "opción de anchura non válida: \"%s\""
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "número non válido ao comezo do campo"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "grupo incorrecto"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "usuario incorrecto"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, fuzzy, c-format
msgid "invalid number %s"
msgstr "número incorrecto"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "non se poden omiti-lo usuario e o grupo"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "As cadeas que se compararon foron %s e %s"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "non se pode move-lo punteiro do ficheiro de %s"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "non se pode move-lo punteiro do ficheiro de %s"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "non se pode move-lo punteiro do ficheiro de %s"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "non se pode move-lo punteiro do ficheiro de %s"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "non se pode move-lo punteiro do ficheiro de %s"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "non se pode move-lo punteiro do ficheiro de %s"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "erro lendo %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: non se pode borrar"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "aviso: ancho %lu incorrecto; usando %d na súa vez"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "aviso: ancho %lu incorrecto; usando %d na súa vez"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "establecendo a data de %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "non se pode crea-lo directorio %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "non se pode crea-lo directorio %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
+#, fuzzy, c-format
+msgid "writing to %s"
msgstr "erro escribindo %s"
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
-
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "entrada estándar"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "saída estándar"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, fuzzy, c-format
msgid "cannot fstat %s"
msgstr "non se poden cambia-los permisos de `%s'"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "avanzando os pasados %s bytes no ficheiro de saída %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "rexistro truncado"
+#~ msgstr[1] "rexistro truncado"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "non se poden omiti-lo usuario e o grupo"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "As cadeas que se compararon foron %s e %s"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "aviso: ancho %lu incorrecto; usando %d na súa vez"
+
+#~ msgid "error writing %s"
+#~ msgstr "erro escribindo %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argumento incorrecto %s para %s"
@@ -4601,10 +4606,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "non se poden cambia-los permisos de `%s'"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "non se pode crea-lo directorio %s"
-
#~ msgid "write failed"
#~ msgstr "erro de escritura"
diff --git a/po/hu.gmo b/po/hu.gmo
index 2ed2e21..f94518b 100644
Binary files a/po/hu.gmo and b/po/hu.gmo differ
diff --git a/po/hu.po b/po/hu.po
index 0b1fc0f..735cab3 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-05-11 16:25+0200\n"
"Last-Translator: Gabor Kelemen <kelemeng at gnome.hu>\n"
"Language-Team: Hungarian <translation-team-hu at lists.sourceforge.net>\n"
@@ -20,40 +20,52 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "nem hozható létre folyamat a következőhöz: %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "További információkért adja ki a(z) „%s --help” parancsot.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -62,16 +74,15 @@ msgstr ""
"Használat: %s [OPERANDUS]...\n"
" vagy: %s KAPCSOLÓ\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Fájl másolása, az operandusoknak megfelelő átalakítással és formázással.\n"
@@ -83,21 +94,24 @@ msgstr ""
" count=BLOKK csak BLOKK bemeneti blokkot másol\n"
" ibs=BÁJT egyszerre BÁJT bájtot olvas be\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FÁJL a FÁJLBÓL olvas a szabványos bemenet helyett\n"
" iflag=JELÖLŐK a vesszővel elválasztott szimbólumlistának megfelelően "
@@ -109,52 +123,50 @@ msgstr ""
" skip=BLOKK ennyi ibs-méretű blokkot hagy ki a bemenet elején\n"
" status=noxfer átviteli statisztika elnyomása\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -172,30 +184,12 @@ msgstr ""
"KULCSSZÓ szimbólumok az alábbiak lehetnek:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii EBCDIC-ből ASCII-ba\n"
-" ebcdic ASCII-ból EBCDIC-be\n"
-" ibm ASCII-ból módosított EBCDIC-be\n"
-" block az új sorra végződő rekordokat cbs méretűre tölti ki "
-"szóközökkel\n"
-" unblock a sorvégi szóközöket cbs méretű rekordokban soremelésre cseréli\n"
-" lcase nagybetűről kisbetűre cserél\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat ne hozza létre a kimeneti fájlt\n"
" excl a működés visszautasítása, ha kimeneti fájl már létezik\n"
@@ -203,7 +197,7 @@ msgstr ""
" ucase kisbetűről nagybetűre cserél\n"
" swab minden bemeneti bájtpár sorrendjét megcseréli\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -218,7 +212,7 @@ msgstr ""
" fdatasync a kimeneti fájladatok kiírása fizikailag a befejezés előtt\n"
" fsync hasonló az előzőhöz, de a metaadatokat is kiírja\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -232,52 +226,52 @@ msgstr ""
" append hozzáfűzési mód (csak kimenet esetén van értelme; javasolt a\n"
" conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct közvetlen I/O használata az adatokhoz\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory működés csak könyvtárakon\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync szinkronizált I/O használata az adatokhoz\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync hasonló az előzőhöz, de a metaadatok esetén is érvényes\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock nem blokkoló I/O használata\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime ne frissítse a hozzáférési időt\n"
# fixme
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty ne rendelje hozzá a vezérlő terminált fájlból\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow ne kövesse a szimbolikus linkeket\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks többszörös linkek esetén a működés visszautasítása\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary bináris I/O használata az adatokhoz\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text szöveges I/O használata az adatokhoz\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -307,11 +301,11 @@ msgstr ""
"A kapcsolók:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Ismeretlen rendszerhiba"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -320,26 +314,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> beolvasott rekord\n"
"%<PRIuMAX>+%<PRIuMAX> kiírt rekord\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> levágott rekord\n"
-msgstr[1] "%<PRIuMAX> levágott rekord\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%<PRIuMAX> bájt (%s) másolva"
msgstr[1] "%<PRIuMAX> bájt (%s) másolva"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Végtelen B"
@@ -353,143 +340,151 @@ msgstr "Végtelen B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g mp, %s/mp\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g mp, %s/mp\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "%s bemeneti fájl lezárása"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "%s kimeneti fájl lezárása"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "A kimenetifájl-utótagok elfogytak"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "%s megnyitása"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "HIBÁS"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "írás a következőbe: %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "ismeretlen operandus: %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "érvénytelen dátum: %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "érvénytelen dátumformátum: %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "érvénytelen dátumformátum: %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "érvénytelen dátumformátum: %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "érvénytelen átalakítás"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "érvénytelen bemeneti jelölő"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "érvénytelen kimeneti jelölő"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "érvénytelen állapotjelölő"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "érvénytelen szám: %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "az {ascii,ebcdic,ibm} közül csak egy adható meg egyszerre"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "a block és az unblock nem adható meg egyszerre"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "az lcase és az ucase nem adható meg egyszerre"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "az excl és a nocreat nem adható meg egyszerre"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "a -e és -i kapcsolók nem kombinálhatók"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "a -e és -i kapcsolók nem kombinálhatók"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "a -e és -i kapcsolók nem kombinálhatók"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "a -e és -i kapcsolók nem kombinálhatók"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "a -e és -i kapcsolók nem kombinálhatók"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -499,89 +494,74 @@ msgstr ""
"%s (mt_type=0x%0lx)\n"
"A <sys/mtio.h> fájlban megtalálod a típusok listáját"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "%s olvasása"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: nem lehet pozicionálni"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "eltolástúlcsordulás a(z) %s fájl olvasása közben"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "figyelmeztetés: érvénytelen fájleltolás a meghiúsult olvasás után"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "a kernelhiba nem kerülhető meg"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "figyelmeztetés: érvénytelen fájleltolás a meghiúsult olvasás után"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "%s jelölőinek beállítása"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "%s könyvtár olvasása"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "%s könyvtár olvasása"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "hiba %s írása közben"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "írás a következőbe: %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "az fdatasync meghiúsult a következőhöz: %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "az fsync meghiúsult a következőhöz: %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "szabványos bemenet"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "szabványos kimenet"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -590,20 +570,58 @@ msgstr ""
"Az eltolás túl nagy: nem lehet seek=%<PRIuMAX> (%lu bájt) blokk\n"
"hosszára csonkítani"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "fstat %s sikertelen"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "csonkítás a(z) %<PRIuMAX>. bájtnál a következő kimeneti fájlban: %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii EBCDIC-ből ASCII-ba\n"
+#~ " ebcdic ASCII-ból EBCDIC-be\n"
+#~ " ibm ASCII-ból módosított EBCDIC-be\n"
+#~ " block az új sorra végződő rekordokat cbs méretűre tölti ki "
+#~ "szóközökkel\n"
+#~ " unblock a sorvégi szóközöket cbs méretű rekordokban soremelésre "
+#~ "cseréli\n"
+#~ " lcase nagybetűről kisbetűre cserél\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> levágott rekord\n"
+#~ msgstr[1] "%<PRIuMAX> levágott rekord\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "az {ascii,ebcdic,ibm} közül csak egy adható meg egyszerre"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "a block és az unblock nem adható meg egyszerre"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "az lcase és az ucase nem adható meg egyszerre"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "figyelmeztetés: érvénytelen fájleltolás a meghiúsult olvasás után"
+
+#~ msgid "error writing %s"
+#~ msgstr "hiba %s írása közben"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "a(z) „%s” argumentum érvénytelen a következőhöz: %s"
@@ -7030,9 +7048,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "nem hajtható végre: %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "nem hozható létre folyamat a következőhöz: %s -d"
-
#~ msgid "write failed"
#~ msgstr "az írás meghiúsult"
diff --git a/po/it.gmo b/po/it.gmo
index 16b9560..86cbd84 100644
Binary files a/po/it.gmo and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
index 7f78284..8ef8f60 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 4.5.1\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2002-07-24 18:12+0200\n"
"Last-Translator: Marco d'Itri <md at linux.it>\n"
"Language-Team: Italian <tp at lists.linux.it>\n"
@@ -17,41 +17,53 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Arnold Robbins and David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "impossibile creare la directory %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Usare `%s --help' per ulteriori informazioni.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Uso: %s [NUMERO]...\n"
" o: %s OPZIONE\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Copia un file, convertendolo e formattandolo secondo le opzioni.\n"
@@ -82,21 +93,24 @@ msgstr ""
" count=BLOCCHI copia dall'input solo un certo numero di BLOCCHI\n"
" ibs=BYTE legge BYTE byte per volta\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FILE legge da FILE invece che da stdin\n"
" obs=BYTE scrive BYTE byte per volta\n"
@@ -105,52 +119,50 @@ msgstr ""
"dell'output\n"
" skip=BLOCCHI salta un numero BLOCCHI lunghi ibs all'inizio dell'input\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
#, fuzzy
msgid ""
"\n"
@@ -169,34 +181,14 @@ msgstr ""
"Ogni PAROLA può essere:\n"
"\n"
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii da EBCDIC a ASCII\n"
-" ebcdic da ASCII a EBCDIC\n"
-" ibm da ASCII a EBCDIC alternativo\n"
-" block completa con spazi fino a cbs i record terminati da newline\n"
-" unblock sostituisce con newline gli spazi alla fine di un record lungo "
-"cbs\n"
-" lcase cambia le maiuscole in minuscole\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -205,7 +197,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -214,52 +206,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s: la directory obiettivo specificata non è una directory"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -276,37 +268,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Errore di sistema sconosciuto"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "record troncato"
-msgstr[1] "record troncato"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -320,149 +305,155 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "chiusura del file di input %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "chiusura del file di output %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "apertura di %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "INATTIVO"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "scrittura di %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "opzione %s non riconosciuta"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "data `%s' non valida"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "formato di orario %s non valido"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "formato di orario %s non valido"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "formato di orario %s non valido"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "conversione non valida: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "numero %s non valido"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "gruppo non valido"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "utente %s non valido"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "numero %s non valido"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "impossibile omettere sia l'utente che il gruppo"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "impossibile confrontare i nomi di file %s e %s"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "non è possibile combinare i segnali con -l o -t"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "non è possibile combinare i segnali con -l o -t"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "non è possibile combinare i segnali con -l o -t"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "non è possibile combinare i segnali con -l o -t"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "non è possibile combinare i segnali con -l o -t"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "non è possibile combinare i segnali con -l o -t"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -471,107 +462,128 @@ msgstr ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "lettura di %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: impossibile rimuoverlo"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "impostazione dell'orario di %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "creazione della directory %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "creazione della directory %s"
-#: src/dc3dd.c:3789
-#, fuzzy, c-format
-msgid "error writing %s"
-msgstr "scrittura di %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "scrittura di %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standard input"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standard output"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "impossibile fare fstat di %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "avanzamento di %s byte nel file di output %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii da EBCDIC a ASCII\n"
+#~ " ebcdic da ASCII a EBCDIC\n"
+#~ " ibm da ASCII a EBCDIC alternativo\n"
+#~ " block completa con spazi fino a cbs i record terminati da newline\n"
+#~ " unblock sostituisce con newline gli spazi alla fine di un record "
+#~ "lungo cbs\n"
+#~ " lcase cambia le maiuscole in minuscole\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "record troncato"
+#~ msgstr[1] "record troncato"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "impossibile omettere sia l'utente che il gruppo"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "impossibile confrontare i nomi di file %s e %s"
+
+#, fuzzy
+#~ msgid "error writing %s"
+#~ msgstr "scrittura di %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argomento %s non valido per %s"
@@ -4536,10 +4548,6 @@ msgstr ""
#~ msgstr "impossibile creare il file normale %s"
#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "impossibile creare la directory %s"
-
-#, fuzzy
#~ msgid "write failed"
#~ msgstr "strip fallito"
diff --git a/po/ja.gmo b/po/ja.gmo
index 0fcc12a..859107e 100644
Binary files a/po/ja.gmo and b/po/ja.gmo differ
diff --git a/po/ja.po b/po/ja.po
index 27b8451..96e15c6 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU textutils 2.0.22\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2002-07-27 22:54+0900\n"
"Last-Translator: Masahito Yamaga <ma at yama-ga.com>\n"
"Language-Team: Japanese <translation-team-ja at lists.sourceforge.net>\n"
@@ -19,41 +19,53 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin と David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "ディレクトリ %s を作成できません"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "詳しくは `%s --help' を実行して下さい.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -62,16 +74,15 @@ msgstr ""
"使用法: %s [ファイル]...\n"
"または: %s [オプション]\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"オプション指定に応じた変換・形式でファイルをコピーします。\n"
@@ -82,21 +93,24 @@ msgstr ""
" count=BLOCKS 入力ファイルの BLOCKS の分だけコピーする\n"
" ibs=BYTES 一度に BYTES バイト分読み込む\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FILE 標準入力の代りに FILE から読み込む\n"
" obs=BYTES 一度に BYTES バイト分書き込む\n"
@@ -104,52 +118,50 @@ msgstr ""
" seek=BLOCKS サイズが obs の BLOCKS 分書込み開始位置をスキップ\n"
" skip=BLOCKS サイズが ibs の BLOCKS 分読込み開始位置をスキップ\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
#, fuzzy
msgid ""
"\n"
@@ -167,33 +179,14 @@ msgstr ""
"KEYWORD には以下のものを使えます:\n"
"\n"
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii EBCDIC から ASCII へ\n"
-" ebcdic ASCII から EBCDIC へ\n"
-" ibm ASCII からIBM(alternated) EBCDIC へ\n"
-" block 改行区切りレコードを cbs サイズの空白を埋める\n"
-" unblock 末尾の空白列をを改行で置き換える\n"
-" lcase 英大文字を英小文字に変換する\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -202,7 +195,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -211,52 +204,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s は存在しますがディレクトリではありません"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -273,35 +266,29 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "未知のシステムエラー"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "切り詰められた書き込み"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -315,150 +302,156 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, fuzzy, c-format
msgid "closing input file %s"
msgstr "ファイル `%s' を作成\n"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "出力ファイル %s をクローズ"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "出力ファイルの接尾辞を使い果たしました"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, fuzzy, c-format
msgid "opening %s"
msgstr "%s の読み込みエラー"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "失敗"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, fuzzy, c-format
-msgid "writing to %s"
-msgstr "%s の書き込みエラー"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "オプション `-%c' を認識できません"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "幅 `%s' が正しくありません"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "`%2$s' に対する引数 %1$s が間違っています"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "`%2$s' に対する引数 %1$s が間違っています"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "`%2$s' に対する引数 %1$s が間違っています"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "幅のオプション `%s' が正しくありません"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "フィールドの開始点の数字が正しくありません"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "グループ指定が不正"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "ユーザ指定が不正"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, fuzzy, c-format
msgid "invalid number %s"
msgstr "%s: 無効な番号表記です"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "ユーザとグループの両方を省略することはできません"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "比較した文字列は %s と %s です."
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "-l または -t とシグナルを組み合わせることができません"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "-l または -t とシグナルを組み合わせることができません"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "-l または -t とシグナルを組み合わせることができません"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "-l または -t とシグナルを組み合わせることができません"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "-l または -t とシグナルを組み合わせることができません"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "-l または -t とシグナルを組み合わせることができません"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -467,109 +460,130 @@ msgstr ""
"警告: lseek のカーネルバグに対処します。\n"
" ファイル (%s) の mt_type=0x%0lx -- <sys/mtio.h> のタイプリストを見て下さい"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "%s の読み込みエラー"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: 削除できません"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "警告: 幅 %lu は無効な値です. -- 代わりに %d を使用します"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "警告: 幅 %lu は無効な値です. -- 代わりに %d を使用します"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "%s のタイムスタンプを設定中"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "ディレクトリ %s を作成できません"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "ディレクトリ %s を作成できません"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
+#, fuzzy, c-format
+msgid "writing to %s"
msgstr "%s の書き込みエラー"
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
-
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "標準入力"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "標準出力"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, fuzzy, c-format
msgid "cannot fstat %s"
msgstr "日時を設定できません"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "出力ファイル %s の直前 %s バイトを進めます"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii EBCDIC から ASCII へ\n"
+#~ " ebcdic ASCII から EBCDIC へ\n"
+#~ " ibm ASCII からIBM(alternated) EBCDIC へ\n"
+#~ " block 改行区切りレコードを cbs サイズの空白を埋める\n"
+#~ " unblock 末尾の空白列をを改行で置き換える\n"
+#~ " lcase 英大文字を英小文字に変換する\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "切り詰められた書き込み"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "ユーザとグループの両方を省略することはできません"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "比較した文字列は %s と %s です."
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "警告: 幅 %lu は無効な値です. -- 代わりに %d を使用します"
+
+#~ msgid "error writing %s"
+#~ msgstr "%s の書き込みエラー"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "`%2$s' に対する引数 %1$s が間違っています"
@@ -5723,10 +5737,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "ディレクトリ %s を作成できません"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "ディレクトリ %s を作成できません"
-
#~ msgid "write failed"
#~ msgstr "書き込み失敗"
diff --git a/po/ko.gmo b/po/ko.gmo
index e454d86..43fc3ec 100644
Binary files a/po/ko.gmo and b/po/ko.gmo differ
diff --git a/po/ko.po b/po/ko.po
index 4f76a19..2e73eaf 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU textutils 2.0.22\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2002-07-22 20:02+0900\n"
"Last-Translator: Changwoo Ryu <cwryu at debian.org>\n"
"Language-Team: Korean <translation-team-ko at lists.sourceforge.net>\n"
@@ -16,41 +16,53 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin 그리고 David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "%s 디렉토리를 만들 수 없습니다"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "더 많은 정보를 보려면 `%s --help' 하십시오.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -59,80 +71,80 @@ msgstr ""
"사용법: %s [<파일>]...\n"
" 혹은: %s [<옵션>]\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -143,26 +155,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -171,7 +171,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -180,52 +180,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s이(가) 존재하지만 디렉토리가 아닙니다"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -242,37 +242,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "알 수 없는 시스템 오류"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "잘린 레코드"
-msgstr[1] "잘린 레코드"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -286,259 +279,271 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, fuzzy, c-format
msgid "closing input file %s"
msgstr "파일 `%s'을(를) 만듦\n"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, fuzzy, c-format
msgid "closing output file %s"
msgstr "%s를 지웁니다\n"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "출력파일 접미어를 다 썼습니다"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, fuzzy, c-format
msgid "opening %s"
msgstr "%s을(를) 읽는 도중 오류 발생"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "실패"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, fuzzy, c-format
-msgid "writing to %s"
-msgstr "%s에 쓰는 도중 오류 발생"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "인식할 수 없는 옵션 `-%c'"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "부적절한 폭: `%s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "%2$s에 대해 부적절한 인자 %1$s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "%2$s에 대해 부적절한 인자 %1$s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "%2$s에 대해 부적절한 인자 %1$s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "부적절한 폭 옵션 `%s'"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "필드 처음에 부적절한 숫자"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "잘못된 그룹"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "잘못된 사용자"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, fuzzy, c-format
msgid "invalid number %s"
msgstr "부적절한 숫자"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "사용자와 그룹을 모두 생략할 수는 없습니다"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "비교한 문자열은 %s과(와) %s입니다."
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "%s에 대한 파일 포인터를 재위치할 수 없습니다"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "%s에 대한 파일 포인터를 재위치할 수 없습니다"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "%s에 대한 파일 포인터를 재위치할 수 없습니다"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "%s에 대한 파일 포인터를 재위치할 수 없습니다"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "%s에 대한 파일 포인터를 재위치할 수 없습니다"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "%s에 대한 파일 포인터를 재위치할 수 없습니다"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "%s을(를) 읽는 도중 오류 발생"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: 지울 수 없습니다"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "경고: 부적절한 폭 %lu; 대신 %d을(를) 사용함"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "경고: 부적절한 폭 %lu; 대신 %d을(를) 사용함"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "%s의 시간을 유지합니다"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "%s 디렉토리를 만들 수 없습니다"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "%s 디렉토리를 만들 수 없습니다"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
+#, fuzzy, c-format
+msgid "writing to %s"
msgstr "%s에 쓰는 도중 오류 발생"
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
-
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "표준 입력"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "표준 출력"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, fuzzy, c-format
msgid "cannot fstat %s"
msgstr "`%s'의 정보(stat)를 얻을 수 없습니다"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "%s를 지웁니다\n"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "잘린 레코드"
+#~ msgstr[1] "잘린 레코드"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "사용자와 그룹을 모두 생략할 수는 없습니다"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "비교한 문자열은 %s과(와) %s입니다."
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "경고: 부적절한 폭 %lu; 대신 %d을(를) 사용함"
+
+#~ msgid "error writing %s"
+#~ msgstr "%s에 쓰는 도중 오류 발생"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%2$s에 대해 부적절한 인자 %1$s"
@@ -4103,10 +4108,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "%s 디렉토리를 만들 수 없습니다"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "%s 디렉토리를 만들 수 없습니다"
-
#~ msgid "write failed"
#~ msgstr "파일 쓰기 실패"
diff --git a/po/lt.gmo b/po/lt.gmo
index bdd2a7e..cc1a260 100644
Binary files a/po/lt.gmo and b/po/lt.gmo differ
diff --git a/po/lt.po b/po/lt.po
index 74efbd3..dbf1872 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils-6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-05-14 03:13+0300\n"
"Last-Translator: Gintautas Miliauskas <gintas at akl.lt>\n"
"Language-Team: Lithuanian <komp_lt at konferencijos.lt>\n"
@@ -19,120 +19,131 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+msgid "Could not allocate space for thread"
+msgstr ""
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr ""
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
" or: %s OPTION\n"
msgstr ""
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
-msgstr ""
-
-#: src/dc3dd.c:1080
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
+msgstr ""
+
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -143,26 +154,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -171,7 +170,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -180,51 +179,51 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr ""
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -241,30 +240,23 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Nežinoma sistemos klaida"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -272,7 +264,7 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -286,247 +278,239 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr ""
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr ""
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr ""
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
msgid "Verify FAILED"
msgstr ""
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr ""
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr ""
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "%s: neleistinas parametras -- %c\n"
-#: src/dc3dd.c:2479
+#: src/dc3dd.c:2748
+msgid "It is pitch dark here. You are likely to be eaten by a grue."
+msgstr ""
+
+#: src/dc3dd.c:2753
#, c-format
-msgid "unknown hash convention %s"
+msgid "Illegal split format %s"
msgstr ""
-#: src/dc3dd.c:2500
-msgid "It is pitch dark here. You are likely to be eaten by a grue."
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2773
#, c-format
-msgid "Illegal split format %s"
+msgid "Illegal ifjoin format %s"
+msgstr ""
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2798
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "netaisyklingas naudotojas"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "netaisyklingas naudotojas"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "netaisyklinga grupė"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "netaisyklingas naudotojas"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr ""
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr ""
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr ""
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr ""
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
msgid "cannot combine if= and ifjoin="
msgstr ""
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
msgid "cannot combine vf= and vfjoin="
msgstr ""
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "negalima palyginti failų vardų %s ir %s"
+
+#: src/dc3dd.c:2953
+msgid "cannot combine wipe= and ifjoin="
+msgstr ""
+
+#: src/dc3dd.c:2955
+msgid "cannot combine wipe= and vfjoin="
+msgstr ""
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "skaitomas %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr ""
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr ""
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "skaitomas aplankas %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "skaitomas aplankas %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr ""
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
+msgid "writing to %s"
msgstr ""
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr ""
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standartinis išvedimas"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr ""
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr ""
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
@@ -717,9 +701,6 @@ msgstr ""
#~ msgid "closing directory %s"
#~ msgstr "užveriamas aplankas %s"
-#~ msgid "cannot compare file names %s and %s"
-#~ msgstr "negalima palyginti failų vardų %s ir %s"
-
#~ msgid "invalid mode"
#~ msgstr "netaisyklinga veiksena"
diff --git a/po/ms.gmo b/po/ms.gmo
index fa57dbb..0eec09a 100644
Binary files a/po/ms.gmo and b/po/ms.gmo differ
diff --git a/po/ms.po b/po/ms.po
index 224f4d6..31735d5 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.0.90\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2003-08-10 16:00+0800\n"
"Last-Translator: Hasbullah Bin Pit <sebol at ikhlas.com>\n"
"Language-Team: Malay <translation-team-ms at lists.sourceforge.net>\n"
@@ -15,41 +15,53 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Mike Parker and David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "tak dapat mencipta direktori %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Cuba `%s --help' untuk maklumat lanjut .\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -58,16 +70,15 @@ msgstr ""
"Pengunaan: %s [NOMBOR]...\n"
" atau: %s OPSYEN\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Salin fail, menukar dan memformat mengikut opsyen.\n"
@@ -78,68 +89,69 @@ msgstr ""
" count=BLOK salin hanya BLOK blok input\n"
" ibs=BAIT baca BAIT bait dlm satu masa\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -150,26 +162,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -178,7 +178,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -187,52 +187,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s: Direktori sasaran yang dinyatakan adalah bukan direktori"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -249,37 +249,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Ralat sistem yang tidak diketahui"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -293,256 +286,260 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "menutup fail input %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "menutup fail output %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "Membuka %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "GAGAL"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "Menulis ke %s."
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "opsyen tidak dikenali %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "tarikh tak sah `%s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "format tarikh tidak sah %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "format tarikh tidak sah %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "format tarikh tidak sah %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "penukaran tidak sah: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "nombor tidak sah %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "kumpulan tidak sah"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "pengguna tidak sah %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "nombor tidak sah %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "tak dapat omit kedua-dua pengguna dan kumpulan"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "tak boleh banding nama fail %s dan %s"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "tak boleh gabungkan isyarat dengan -l atau -t"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "tak boleh gabungkan isyarat dengan -l atau -t"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "tak boleh gabungkan isyarat dengan -l atau -t"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "tak boleh gabungkan isyarat dengan -l atau -t"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "tak boleh gabungkan isyarat dengan -l atau -t"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "tak boleh gabungkan isyarat dengan -l atau -t"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "membaca %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: tak dapat buang"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "menetapkan masa untuk %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "membaca direktori %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "membaca direktori %s"
-#: src/dc3dd.c:3789
-#, fuzzy, c-format
-msgid "error writing %s"
-msgstr "menulis %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "Menulis ke %s."
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, fuzzy, c-format
msgid "fsync failed for %s"
msgstr "gagal mengekalkan masa bagi %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "input piawai"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "output standard"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "tak dapat fstat %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr ""
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "tak dapat omit kedua-dua pengguna dan kumpulan"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "tak boleh banding nama fail %s dan %s"
+
+#, fuzzy
+#~ msgid "error writing %s"
+#~ msgstr "menulis %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "hujah tidak sah %s bagi %s"
@@ -3189,10 +3186,6 @@ msgstr ""
#~ msgstr "tak dapat memcipta fail biasa %s"
#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "tak dapat mencipta direktori %s"
-
-#, fuzzy
#~ msgid "write failed"
#~ msgstr "fail pelik"
diff --git a/po/nb.gmo b/po/nb.gmo
index 580817f..e943f90 100644
Binary files a/po/nb.gmo and b/po/nb.gmo differ
diff --git a/po/nb.po b/po/nb.po
index b76d55b..45a9505 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU textutils 2.0.20\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2002-01-27 21:35+0100\n"
"Last-Translator: Eivind Tagseth <eivindt at multinet.no>\n"
"Language-Team: Norwegian <i18n-nb at lister.ping.uio.no>\n"
@@ -15,41 +15,53 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin og David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "kan ikke opprette katalog %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Prøv med «%s --help» for mer informasjon.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -58,80 +70,80 @@ msgstr ""
"Bruk: %s [FIL]...\n"
"eller: %s [FLAGG]\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -142,26 +154,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -170,7 +170,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -179,52 +179,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s eksisterer men er ikke en katalog"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -241,37 +241,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Ukjent systemfeil"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -285,258 +278,264 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, fuzzy, c-format
msgid "closing input file %s"
msgstr "lager filen «%s»\n"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr ""
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, fuzzy, c-format
msgid "opening %s"
msgstr "feil ved lesing av %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "FEIL"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, fuzzy, c-format
-msgid "writing to %s"
-msgstr "feil ved skriving til %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "ukjent flagg «-%c»"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "ugyldig bredde: «%s»"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "ugyldig argument %s for %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "ugyldig argument %s for %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "ugyldig argument %s for %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "ugyldig breddespesifikasjon «%s»"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "ugyldig tall i feltstart"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "ugyldig gruppe"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "ugyldig bruker"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, fuzzy, c-format
msgid "invalid number %s"
msgstr "ugyldig antall"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "kan ikke utelate både bruker og gruppe"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "Strengene som ble sammenlignet var «%s» og «%s»."
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "kan ikke opprette katalog %s"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "kan ikke opprette katalog %s"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "kan ikke opprette katalog %s"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "kan ikke opprette katalog %s"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "kan ikke opprette katalog %s"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "kan ikke opprette katalog %s"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
" of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"
msgstr ""
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "feil ved lesing av %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "%s: kan ikke søke til posisjon %s%s"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "advarsel: ugyldig bredde %lu; bruker %d istedet"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "advarsel: ugyldig bredde %lu; bruker %d istedet"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "kan ikke endre rettigheter til %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "kan ikke opprette katalog %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "kan ikke opprette katalog %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
+#, fuzzy, c-format
+msgid "writing to %s"
msgstr "feil ved skriving til %s"
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
-
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standard inn"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standard ut"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr ""
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr ""
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "kan ikke utelate både bruker og gruppe"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "Strengene som ble sammenlignet var «%s» og «%s»."
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "advarsel: ugyldig bredde %lu; bruker %d istedet"
+
+#~ msgid "error writing %s"
+#~ msgstr "feil ved skriving til %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ugyldig argument %s for %s"
@@ -3351,10 +3350,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "kan ikke opprette katalog %s"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "kan ikke opprette katalog %s"
-
#~ msgid "write failed"
#~ msgstr "feil ved skriving"
diff --git a/po/nl.gmo b/po/nl.gmo
index ac4ff21..b977dd7 100644
Binary files a/po/nl.gmo and b/po/nl.gmo differ
diff --git a/po/nl.po b/po/nl.po
index 5e9e763..5b5dfb9 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils-6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-05-30 23:26+0200\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf at hetnet.nl>\n"
"Language-Team: Dutch <vertaling at vrijschrift.org>\n"
@@ -21,40 +21,52 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "kan het proces %s -d niet aanmaken"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Probeer `%s --help' voor meer informatie.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -63,16 +75,15 @@ msgstr ""
"Gebruik: %s [OPERAND]...\n"
" of: %s OPTIE\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopieer een bestand en converteer en maak deze op volgens de opties.\n"
@@ -85,21 +96,24 @@ msgstr ""
" count=BLOKKEN kopieer alleen BLOKKEN invoer blokken\n"
" ibs=BYTES lees BYTES bytes tegelijk\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=BESTAND lees van BESTAND in plaats van standaardinvoer\n"
" iflag=VLAGGEN lees volgens de kommagescheiden symbolenlijst\n"
@@ -114,52 +128,50 @@ msgstr ""
" van de invoer\n"
" status=noxfer onderdruk statistieken van de verplaatsing\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -177,31 +189,12 @@ msgstr ""
"Elk CONVERSIE symbool mag zijn:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii van EBCDIC naar ASCII\n"
-" ebcdic van ASCII maar EBCDIC\n"
-" ibm van ASCII naar 'alternated EBCDIC'\n"
-" block vul met nieuweregel afgesloten regels uit met spaties tot de cbs "
-"lengte\n"
-" unblock vervang achterloopspaties in regels met lengte cbs door "
-"nieuweregel\n"
-" lcase vervang hoofdletters door kleine letters\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat maak geen uitvoerbestand\n"
" excl stop als het uitvoerbestand al bestaat\n"
@@ -209,7 +202,7 @@ msgstr ""
" ucase vervang kleine letters door hoofdletters\n"
" swab verwissel ieder paar bytes uit de invoer\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -225,7 +218,7 @@ msgstr ""
"beëindigen\n"
" fsync evenzo, maar schrijf ook de metagegevens\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -239,51 +232,51 @@ msgstr ""
" append achtervoegen (alleen zinvol bij uitvoer; suggestie: "
"conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct gebruik direct-I/O voor de gegevens\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory stop tenzij een map\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync gebruik synchronized-I/O voor de gegevens\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync evenzo, maar ook voor de metagegevens\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock gebruik non-blocking-I/O\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime wijzig het toegangstijdstip niet\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty voeg geen controlerende terminal toe aan bestand\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow volg geen symbolische koppelingen\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks stop bij meer dan één symbolische koppeling\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary gebruik binary-I/O voor de gegevens\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text gebruik text-I/O voor de gegevens\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -313,11 +306,11 @@ msgstr ""
"Opties zijn:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Onbekende systeemfout"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -326,26 +319,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> records in\n"
"%<PRIuMAX>+%<PRIuMAX> records uit\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> afgebroken record\n"
-msgstr[1] "%<PRIuMAX> afgebroken records\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%<PRIuMAX> byte (%s) gekopieerd"
msgstr[1] "%<PRIuMAX> bytes (%s) gekopieerd"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Oneindig B"
@@ -359,144 +345,151 @@ msgstr "Oneindig B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "invoerbestand %s sluiten"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "uitvoerbestand %s sluiten"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Alle achtervoegsels voor uitvoerbestanden zijn verbruikt"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "openen van %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "MISLUKT"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "schrijven naar %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "niet-herkende operand %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "ongeldige datum %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "ongeldige opmaak voor datum %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "ongeldige opmaak voor datum %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "ongeldige opmaak voor datum %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "ongeldige conversie"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "ongeldige invoervlag"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "ongeldige uitvoervlag"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "ongeldige statusvlag"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "ongeldig nummer %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "slechts één van deze {ascii,ebcdic,ibm} is mogelijk"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "block en unblock kunnen niet beide"
-
-# idem
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "lcase en ucase kunnen niet beide"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "excl en nocreat kunnen niet beide"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "kan -e en -i opties niet combineren"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "kan -e en -i opties niet combineren"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "kan -e en -i opties niet combineren"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "kan -e en -i opties niet combineren"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "kan -e en -i opties niet combineren"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -506,91 +499,75 @@ msgstr ""
"bestand (%s)\n"
" met mt_type=0x%0lx -- zie <sys/mtio.h> voor de lijst met typen"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "lezen van %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: kan seek-functie niet uitvoeren"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "offset te groot bij het lezen van bestand %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr ""
"waarschuwing: offset in bestand klopt niet meer na een mislukte leesopdracht"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "kan niet om de 'kernel bug' heenwerken"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr ""
-"waarschuwing: offset in bestand klopt niet meer na een mislukte leesopdracht"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "vlaggen van %s zetten"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "map %s lezen"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "map %s lezen"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "fout bij schrijven van %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "schrijven naar %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "'fdatasync' mislukt voor %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "'fsync' mislukt voor %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standaardinvoer"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standaarduitvoer"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -599,20 +576,61 @@ msgstr ""
"offset te groot: kan niet afkorten tot een lengte van seek=%<PRIuMAX> (%lu-"
"byte) blokken"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "kan fstat op %s niet toepassen"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "afkorten op %<PRIuMAX> bytes in uitvoerbestand %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii van EBCDIC naar ASCII\n"
+#~ " ebcdic van ASCII maar EBCDIC\n"
+#~ " ibm van ASCII naar 'alternated EBCDIC'\n"
+#~ " block vul met nieuweregel afgesloten regels uit met spaties tot de "
+#~ "cbs lengte\n"
+#~ " unblock vervang achterloopspaties in regels met lengte cbs door "
+#~ "nieuweregel\n"
+#~ " lcase vervang hoofdletters door kleine letters\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> afgebroken record\n"
+#~ msgstr[1] "%<PRIuMAX> afgebroken records\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "slechts één van deze {ascii,ebcdic,ibm} is mogelijk"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "block en unblock kunnen niet beide"
+
+# idem
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "lcase en ucase kunnen niet beide"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr ""
+#~ "waarschuwing: offset in bestand klopt niet meer na een mislukte "
+#~ "leesopdracht"
+
+#~ msgid "error writing %s"
+#~ msgstr "fout bij schrijven van %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "ongeldig argument %s voor %s"
@@ -6914,9 +6932,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "kan %s -d niet uitvoeren"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "kan het proces %s -d niet aanmaken"
-
#~ msgid "write failed"
#~ msgstr "schrijven mislukt"
diff --git a/po/pl.gmo b/po/pl.gmo
index 41d1b41..ecc2cb6 100644
Binary files a/po/pl.gmo and b/po/pl.gmo differ
diff --git a/po/pl.po b/po/pl.po
index a4dcac1..3271e50 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -17,7 +17,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.9.92\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-01-12 17:30+0100\n"
"Last-Translator: Rafał Maszkowski <rzm at icm.edu.pl>\n"
"Language-Team: Polish <translation-team-pl at lists.sourceforge.net>\n"
@@ -28,40 +28,52 @@ msgstr ""
"|| n%100>=20) ? 1 : 2);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "nie udało się uruchomić procesu %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Spróbuj `%s --help' dla uzyskania informacji.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -70,16 +82,15 @@ msgstr ""
"Składnia: %s [ARGUMENT]...\n"
" albo: %s OPCJA\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopiowanie pliku z przekształcaniem i formatowaniem zgodnie z argumentami.\n"
@@ -91,21 +102,24 @@ msgstr ""
" count=BLOKÓW skopiowanie tylko tyle BLOKÓW z wejścia\n"
" ibs=BAJTÓW czytanie tylu BAJTÓW naraz\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=PLIK czytanie z PLIKU zamiast ze standardowego wejścia\n"
" iflag=FLAGI czytanie zgodnie z podaną listą\n"
@@ -116,52 +130,50 @@ msgstr ""
" skip=BLOKÓW przeskoczenie tylu BLOKÓW o rozmiarze ibs na wejściu\n"
" status=noxfer bez statystyki kopiowania\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -179,31 +191,12 @@ msgstr ""
"Każde SŁOWO_KL może być:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii z EBCDIC do ASCII\n"
-" ebcdic z ASCII do EBCDIC\n"
-" ibm z ASCII do alternatywnego EBCDIC\n"
-" block wyrównanie rekordów zakończonych znakami nowej linii spacjami\n"
-" do rozmiaru cbs\n"
-" unblock zamiana końcowych spacji w rekordach o rozmiarze cbs na znak\n"
-" nowej linii\n"
-" lcase zamiana wielkich liter na małe\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat bez tworzenia pliku wyjściowego\n"
" excl zakończenie jeżeli plik wyjściowy już istnieje\n"
@@ -211,7 +204,7 @@ msgstr ""
" ucase zamiana małych liter na wielkie\n"
" swab zamiana każdej pary bajtów\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -226,7 +219,7 @@ msgstr ""
" fdatasync wymuszenie fizycznego zapisu danych przed zakończeniem\n"
" fsync jak fdatasync, ale też dla metadanych\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -239,51 +232,51 @@ msgstr ""
"\n"
" append tryb dopisywania (ma sens tylko dla wyjścia)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct dane zapisywane przez bezpośrednie I/O\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory błąd jeżeli nie katalog\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync dane zapisywane przez synchronizowane I/O\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync podobnie, ale też dla metadanych\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock użycie nie blokującego I/O\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime bez aktualizacji czasu dostępu\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty bez przyporządkowywania terminala sterującego - pliku\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow bez rozwijania dowiązań symbolicznych\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks błąd jeżeli wielokrotnie dołączony\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary użycie binarnego I/O dla danych\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text użycie tekstowego I/O dla danych\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -311,11 +304,11 @@ msgstr ""
" 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Nieznany błąd systemu"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -324,20 +317,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> przeczytanych recordów\n"
"%<PRIuMAX>+%<PRIuMAX> zapisanych recordów\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> obcięty rekord\n"
-msgstr[1] "%<PRIuMAX> obcięte rekordy\n"
-msgstr[2] "%<PRIuMAX> obciętych rekordów\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -345,7 +330,7 @@ msgstr[0] "skopiowany %<PRIuMAX> bajt (%s)"
msgstr[1] "skopiowane %<PRIuMAX> bajty (%s)"
msgstr[2] "skopiowane %<PRIuMAX> bajtów (%s)"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "nieskończenie wiele B"
@@ -359,147 +344,155 @@ msgstr "nieskończenie wiele B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "zamykanie pliku wejściowego %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "zamknięcie pliku wyjściowego %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Zabrakło przyrostków plików wyjściowych"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "otwieranie %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "NIEPOWODZENIE"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "zapis do %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "nierozpoznany argument %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "błędna data: %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "błędny format daty %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "błędny format daty %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "błędny format daty %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "błędna konwersja: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "błędna flaga wejściowa: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "błędna flaga wyjściowa: %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "błędna flaga stanu: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "błędna liczba %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "nie można podawać równocześnie ascii, ebcdic, ibm"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "nie można użyć block i unblock równocześnie"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "nie można użyć razem lcase i ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "nie można użyć razem excl i nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "nie można łączyć ustawiania opcji -e i -i"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "nie można łączyć ustawiania opcji -e i -i"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "nie można łączyć ustawiania opcji -e i -i"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "nie można łączyć ustawiania opcji -e i -i"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "nie można łączyć ustawiania opcji -e i -i"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -508,89 +501,74 @@ msgstr ""
"uwaga: ominięcie błędu działania lseek w jądrze dla pliku (%s)\n"
" o mt_type=0x%0lx - zobacz listę typów w <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "czytanie %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: nie można ustawić pozycji"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "przepełnienie licznika pozycji w czasie czytanie pliku %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "uwaga: błędna pozycja w pliku po nieudanym czytaniu"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "nie udało się obejść błędu jądra"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "uwaga: błędna pozycja w pliku po nieudanym czytaniu"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "ustawienie flag dla %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "czytanie katalogu %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "czytanie katalogu %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "błąd zapisu %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "zapis do %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "nieudany fdatasync dla %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "nieudany fsync dla %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standardowe wejście"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standardowe wyjście"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -599,20 +577,60 @@ msgstr ""
"za duża wartośc pozycji w pliku: nie można obciąć pliku do długości seek=%"
"<PRIuMAX> (%lu bajtowych) bloków"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "nie można wykonać fstat na %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "obcięcie pliku do %<PRIuMAX> bajtów w pliku wyjściowym %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii z EBCDIC do ASCII\n"
+#~ " ebcdic z ASCII do EBCDIC\n"
+#~ " ibm z ASCII do alternatywnego EBCDIC\n"
+#~ " block wyrównanie rekordów zakończonych znakami nowej linii "
+#~ "spacjami\n"
+#~ " do rozmiaru cbs\n"
+#~ " unblock zamiana końcowych spacji w rekordach o rozmiarze cbs na znak\n"
+#~ " nowej linii\n"
+#~ " lcase zamiana wielkich liter na małe\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> obcięty rekord\n"
+#~ msgstr[1] "%<PRIuMAX> obcięte rekordy\n"
+#~ msgstr[2] "%<PRIuMAX> obciętych rekordów\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "nie można podawać równocześnie ascii, ebcdic, ibm"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "nie można użyć block i unblock równocześnie"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "nie można użyć razem lcase i ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "uwaga: błędna pozycja w pliku po nieudanym czytaniu"
+
+#~ msgid "error writing %s"
+#~ msgstr "błąd zapisu %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "błędny argument %s opcji %s"
@@ -6904,9 +6922,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "nie udało się uruchomić %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "nie udało się uruchomić procesu %s -d"
-
#~ msgid "write failed"
#~ msgstr "błąd zapisu"
diff --git a/po/pt.gmo b/po/pt.gmo
index 763c5a3..0ae6eb8 100644
Binary files a/po/pt.gmo and b/po/pt.gmo differ
diff --git a/po/pt.po b/po/pt.po
index 0a112a0..03a3307 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-04-23 00:02+0100\n"
"Last-Translator: Helder Correia <helder.pereira.correia at gmail.com>\n"
"Language-Team: Portuguese <translation-team-pt at lists.sourceforge.net>\n"
@@ -18,40 +18,52 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "impossível criar o processo para %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Tente '%s --help' para mais informações.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Utilização: %s [OPERANDO]...\n"
" ou: %s OPÇÃO\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Copiar um ficheiro, convertendo e formatando de acordo com os operandos.\n"
@@ -80,21 +91,24 @@ msgstr ""
" count=BLOCOS copiar apenas BLOCOS blocos de entrada\n"
" ibs=BYTES ler BYTES bytes de cada vez\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FICHEIRO ler a partir de FICHEIRO em vez de stdin\n"
" iflag=OPÇÕES ler como lista de símbolos separados por vírgulas\n"
@@ -105,52 +119,50 @@ msgstr ""
" skip=BLOCOS saltar BLOCOS blocos de tamanho ibs no início da entrada\n"
" status=noxfer suprimir estatísticas de transferência\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -168,31 +180,12 @@ msgstr ""
"Cadda símbolo CONV pode ser:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii de EBCDIC para ASCII\n"
-" ebcdic de ASCII para EBCDIC\n"
-" ibm de ASCII para EBCDIC alternativo\n"
-" block encher campos terminados por nova linha com espaço de tamanho "
-"cbs\n"
-" unblock substituir espaços finais em campos de tamanho cbs com nova "
-"linha\n"
-" lcase alterar maiúsculas para minúsculas\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat não criar o ficheiro de saída\n"
" excl falhar se o ficheiro de saída já existir\n"
@@ -200,7 +193,7 @@ msgstr ""
" ucase alterar minúsculas para maiúsculas\n"
" swab trocar cada par de bytes de entrada\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -215,7 +208,7 @@ msgstr ""
"terminar\n"
" fsync da mesma forma, mas escrever igualmente os meta-dados\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -228,51 +221,51 @@ msgstr ""
"\n"
" append modo acrescentar (sentido só para saída; conv=notrunc sugerido)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct usar E/S directas para dados\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " erro de pasta a menos que seja uma pasta\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync usar E/S sincronizadas para dados\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync da mesma forma, mas também para meta-dados\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock usar E/S não-bloquantes\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime não actualizar o tempo de acesso\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty não atribuir terminal de controlo do ficheiro\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow não seguir ligações simbólicas\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks falhar se multiplamente ligado\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary usar E/S binárias para dados\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text usar E/S de texto para dados\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -301,11 +294,11 @@ msgstr ""
"Opções são:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Erro de sistema desconhecido"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -314,26 +307,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> registos dentro\n"
"%<PRIuMAX>+%<PRIuMAX> registos fora\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> registo truncado\n"
-msgstr[1] "%<PRIuMAX> registos truncados\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%<PRIuMAX> byte (%s) copiado"
msgstr[1] "%<PRIuMAX> bytes (%s) copiados"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Infinitivo B"
@@ -347,143 +333,151 @@ msgstr "Infinitivo B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "a fechar o ficheiro de entrada %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "a apagar o ficheiro de saída %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Sufixos de ficheiro de saída esgotados"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "a abrir %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "ERRO"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "a escrever em %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "operando desconhecido %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "data inválida %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "formato de data inválido %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "formato de data inválido %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "formato de data inválido %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "conversão inválida"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "opção de entrada inválida"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "opção de saída inválida"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "opção de estado inválida"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "número inválido %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "impossível combinar quaisquer dois de {ascii,ebcdic,ibm}"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "impossível combinar bloquear e desbloquear"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "impossível combinar letras minúsculas e maiúsculas"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "impossível combinar excl e nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "impossível combinar as opções -e e -i"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "impossível combinar as opções -e e -i"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "impossível combinar as opções -e e -i"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "impossível combinar as opções -e e -i"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "impossível combinar as opções -e e -i"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -492,89 +486,74 @@ msgstr ""
"aviso: a contornar erro de lseek do kernel para o ficheiro (%s)\n"
" de mt_type=0x%0lx -- ver <sys/mtio.h> para a lista de tipos"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "a ler %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: impossível indexar"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "erro de excesso de índice ao ler o ficheiro %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "aviso: índice de ficheiro inválido após erro de leitura"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "impossível contornar erro do kernel"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "aviso: índice de ficheiro inválido após erro de leitura"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "a definir opções para %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "a ler a pasta %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "a ler a pasta %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "erro ao escrever %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "a escrever em %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "erro de fdatasync para %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "erro de fsync para %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "canal de entrada por omissão (stdin)"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "canal de saída padrão (stdout)"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -582,20 +561,58 @@ msgid ""
msgstr ""
"índice muito alto: erro ao truncar para seek=%<PRIuMAX> blocos (de %lu bytes)"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "impossível obter o estado de %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "a truncar aos %<PRIuMAX> bytes no ficheiro de saída %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii de EBCDIC para ASCII\n"
+#~ " ebcdic de ASCII para EBCDIC\n"
+#~ " ibm de ASCII para EBCDIC alternativo\n"
+#~ " block encher campos terminados por nova linha com espaço de tamanho "
+#~ "cbs\n"
+#~ " unblock substituir espaços finais em campos de tamanho cbs com nova "
+#~ "linha\n"
+#~ " lcase alterar maiúsculas para minúsculas\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> registo truncado\n"
+#~ msgstr[1] "%<PRIuMAX> registos truncados\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "impossível combinar quaisquer dois de {ascii,ebcdic,ibm}"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "impossível combinar bloquear e desbloquear"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "impossível combinar letras minúsculas e maiúsculas"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "aviso: índice de ficheiro inválido após erro de leitura"
+
+#~ msgid "error writing %s"
+#~ msgstr "erro ao escrever %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "argumento %s inválido para %s"
@@ -6716,9 +6733,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "impossível executar %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "impossível criar o processo para %s -d"
-
#~ msgid "write failed"
#~ msgstr "erro de escrita"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 1704706..72eca4f 100644
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 0a7344b..628e411 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.0\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2003-06-27 19:20-0300\n"
"Last-Translator: Juan Carlos Castro y Castro <jcastro at vialink.com.br>\n"
"Language-Team: Brazilian Portuguese <ldp-br at bazar.conectiva.com.br>\n"
@@ -17,43 +17,56 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Stuart Kemp e David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+# , c-format
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "não é possível criar o diretório %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
# , c-format
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Tente `%s --help' para mais informação.\n"
# , c-format
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -62,80 +75,80 @@ msgstr ""
"Uso: %s [NÚMERO]...\n"
" ou: %s OPÇÃO\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -146,26 +159,14 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -174,7 +175,7 @@ msgid ""
" fsync likewise, but also write metadata\n"
msgstr ""
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -183,52 +184,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s existe, mas não é um diretório"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -245,37 +246,30 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Erro de sistema desconhecido"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "registro truncado"
-msgstr[1] "registro truncado"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
msgstr[1] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr ""
@@ -289,159 +283,169 @@ msgstr ""
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, c-format
msgid ", %g s, %s/s "
msgstr ""
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ""
# , c-format
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "fechando arquivo de entrada %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "fechando arquivo de saída %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
# , c-format
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "abrindo %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "A soma não coincide"
# , c-format
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "escrevendo em %s"
-
-# , c-format
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, fuzzy, c-format
msgid "unrecognized operand %s"
msgstr "opção não reconhecida %s"
# , c-format
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "data inválida `%s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
# , c-format
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "formato de data inválido %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+# , c-format
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "formato de data inválido %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+# , c-format
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "formato de data inválido %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
# , c-format
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "conversão inválida: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "número inválido no início do campo"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "grupo inválido"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "usuário inválido"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "número inválido %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "não pode ignorar usuário e grupo"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "não foi possível criar o link %s"
-
# , c-format
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "não é possível criar o diretório %s"
# , c-format
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "não é possível criar o diretório %s"
# , c-format
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "não é possível criar o diretório %s"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+# , c-format
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "não é possível criar o diretório %s"
+
+# , c-format
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "não é possível criar o diretório %s"
+
+# , c-format
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "não é possível criar o diretório %s"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -449,114 +453,121 @@ msgid ""
msgstr ""
# , c-format
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "lendo %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, fuzzy, c-format
msgid "%s: cannot seek"
msgstr "não foi possível remover `%s'"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
# , c-format
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "atenção: largura %lu inválida; será usado %d em seu lugar"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-# , c-format
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "atenção: largura %lu inválida; será usado %d em seu lugar"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "configurando data de %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
# , c-format
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "não é possível criar o diretório %s"
# , c-format
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "não é possível criar o diretório %s"
# , c-format
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "erro escrevendo %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "escrevendo em %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr ""
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "entrada padrão"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "saída padrão"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "impossível fazer fstat em %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "avançando %s bytes no arquivo de saída %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "registro truncado"
+#~ msgstr[1] "registro truncado"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "não pode ignorar usuário e grupo"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "não foi possível criar o link %s"
+
+# , c-format
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "atenção: largura %lu inválida; será usado %d em seu lugar"
+
+# , c-format
+#~ msgid "error writing %s"
+#~ msgstr "erro escrevendo %s"
+
# , c-format
#~ msgid "invalid argument %s for %s"
#~ msgstr "argumento inválido %s para '%s'"
@@ -3999,11 +4010,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "impossível criar arquivo temporário"
-# , c-format
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "não é possível criar o diretório %s"
-
#~ msgid "write failed"
#~ msgstr "erro de escrita"
diff --git a/po/ru.gmo b/po/ru.gmo
index 97ff853..4ae631b 100644
Binary files a/po/ru.gmo and b/po/ru.gmo differ
diff --git a/po/ru.po b/po/ru.po
index 514d9e2..d9df360 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.9\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2007-03-27 08:06+0400\n"
"Last-Translator: Oleg S. Tihonov <ost at tatnipi.ru>\n"
"Language-Team: Russian <ru at li.org>\n"
@@ -18,40 +18,52 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "невозможно создать процесс для %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Попробуйте `%s --help' для получения более подробного описания.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Использование: %s [ОПЕРАНД]...\n"
" или: %s КЛЮЧ\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Копирует файл, преобразует и форматирует в зависимости от операндов.\n"
@@ -81,21 +92,24 @@ msgstr ""
" count=ЧИСЛО копировать только заданное ЧИСЛО входных блоков\n"
" ibs=ЧИСЛО считывать заданное ЧИСЛО байт за раз\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=ФАЙЛ читать ФАЙЛ, а не стандартный ввод\n"
" iflag=СПИСОК читать в соответствии со СПИСКОМ символов,\n"
@@ -110,52 +124,50 @@ msgstr ""
"ibs\n"
" status=noxfer не выводить статистику передачи\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -173,32 +185,12 @@ msgstr ""
"Каждый элемент СПИСКА для conv может быть:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii из EBCDIC в ASCII\n"
-" ebcdic из ASCII в EBCDIC\n"
-" ibm из ASCII в альтернативную EBCDIC\n"
-" block заполнять записи, заканчивающиеся переводом строки, пробелами "
-"до\n"
-" размера cbs\n"
-" unblock заменять завершающие пробелы в записях размера cbs на перевод "
-"строки\n"
-" lcase изменять регистр с верхнего на нижний\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat не создавать выходной файл\n"
" excl завершаться неуспехом, если выходной файл уже существует\n"
@@ -206,7 +198,7 @@ msgstr ""
" ucase изменять регистр с нижнего на верхний\n"
" swab менять местами каждую пару входных байтов\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -220,7 +212,7 @@ msgstr ""
" fdatasync физически записать выходной файл перед завершением\n"
" fsync аналогично, но записать также метаданные\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -234,51 +226,51 @@ msgstr ""
" append режим добавления (имеет смысл для вывода; рекомендуется "
"conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct использовать прямой ввод/вывод для данных\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory выдавать ошибку, если это не каталог\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync использовать синхронизированный ввод/вывод для данных\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync то же, но так же и для метаданных\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock использовать неблокирующий ввод/вывод\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime не обновлять время последнего доступа\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty не назначать управляющий терминал из файла\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow не следовать по символьным ссылкам\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks выдавать ошибку, если найдено несколько ссылок\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary использовать бинарный ввод/вывод для данных\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text использовать текстовый ввод/вывод для данных\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -308,11 +300,11 @@ msgstr ""
"Ключи:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Неизвестная системная ошибка"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -321,20 +313,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> записей считано\n"
"%<PRIuMAX>+%<PRIuMAX> записей написано\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> усеченная запись\n"
-msgstr[1] "%<PRIuMAX> усеченные записи\n"
-msgstr[2] "%<PRIuMAX> усеченных записей\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -342,7 +326,7 @@ msgstr[0] " скопирован %<PRIuMAX> байт (%s)"
msgstr[1] " скопировано %<PRIuMAX> байта (%s)"
msgstr[2] " скопировано %<PRIuMAX> байт (%s)"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Бесконечность"
@@ -356,147 +340,155 @@ msgstr "Бесконечность"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g c, %s/c\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g c, %s/c\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "закрытие входного файла %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "закрытие выходного файла %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Исчерпаны суффиксы для выходных файлов"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "открытие %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "НЕУСПЕШНО"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "запись в %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "операнд %s не распознан"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "неверная дата %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "неверный формат даты %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "неверный формат даты %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "неверный формат даты %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "недопустимое преобразование: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "недопустимый флаг входа: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "недопустимый флаг выхода: %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "недопустимый флаг статуса: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "неверный номер %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "нельзя сочетать любые два из {ascii,ebcdic,ibm}"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "нельзя совмещать block и unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "нельзя совмещать lcase и ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "нельзя совмещать excl и nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "нельзя сочетать ключи -e и -i"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "нельзя сочетать ключи -e и -i"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "нельзя сочетать ключи -e и -i"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "нельзя сочетать ключи -e и -i"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "нельзя сочетать ключи -e и -i"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -505,89 +497,74 @@ msgstr ""
"внимание: обходим ошибку lseek в ядре для файла (%s)\n"
" mt_type=0x%0lx -- см. <sys/mtio.h> для списка типов"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "чтение %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: невозможно сместить указатель файла"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "переполнение сдвига при чтении файла %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "предупреждение: смещение файла стало неверным после ошибки чтения"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "невозможно обойти ошибку ядра"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "предупреждение: смещение файла стало неверным после ошибки чтения"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "установка флагов для %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "чтение каталога %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "чтение каталога %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "ошибка записи %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "запись в %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "операция fdatasync для %s неуспешна"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "операция fsync для %s неуспешна"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "стандартный ввод"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "стандартный вывод"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -596,20 +573,60 @@ msgstr ""
"смещение слишком велико: невозможно обрезать до величины seek=%<PRIuMAX> (%"
"lu-байтных) блоков"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "невозможно выполнить fstat для %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "отсечение на %<PRIuMAX> байт в выходном файле %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii из EBCDIC в ASCII\n"
+#~ " ebcdic из ASCII в EBCDIC\n"
+#~ " ibm из ASCII в альтернативную EBCDIC\n"
+#~ " block заполнять записи, заканчивающиеся переводом строки, пробелами "
+#~ "до\n"
+#~ " размера cbs\n"
+#~ " unblock заменять завершающие пробелы в записях размера cbs на перевод "
+#~ "строки\n"
+#~ " lcase изменять регистр с верхнего на нижний\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> усеченная запись\n"
+#~ msgstr[1] "%<PRIuMAX> усеченные записи\n"
+#~ msgstr[2] "%<PRIuMAX> усеченных записей\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "нельзя сочетать любые два из {ascii,ebcdic,ibm}"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "нельзя совмещать block и unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "нельзя совмещать lcase и ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "предупреждение: смещение файла стало неверным после ошибки чтения"
+
+#~ msgid "error writing %s"
+#~ msgstr "ошибка записи %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "неверный аргумент %s для %s"
@@ -6603,9 +6620,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "невозможно выполнить %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "невозможно создать процесс для %s -d"
-
#~ msgid "write failed"
#~ msgstr "запись неуспешна"
diff --git a/po/sk.gmo b/po/sk.gmo
index d6c346d..042e2e5 100644
Binary files a/po/sk.gmo and b/po/sk.gmo differ
diff --git a/po/sk.po b/po/sk.po
index 1e71f21..6e745d0 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.10\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-04-04 10:01+0100\n"
"Last-Translator: Ivan Masár <helix84 at centrum.sk>\n"
"Language-Team: Slovak <sk-i18n at lists.linux.sk>\n"
@@ -18,40 +18,52 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "nie je možné vytvoriť proces pre %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Viac informácií získate príkazom `%s --help'.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Použitie: %s [SÚBOR]...\n"
" alebo: %s [VOĽBA]\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopírovač súbor, pričom sa skonvertuje a sformátuje podľa operandov.\n"
@@ -81,21 +92,24 @@ msgstr ""
" count=BLOKOV skopírovať iba BLOKOV vstupných blokov\n"
" ibs=BAJTOV čítať BAJTOV bajtov naraz\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=SÚBOR čítať zo SÚBORu namiesto štandardného vstupu\n"
" iflag=PRÍZN čítať podľa tohto zoznamu symbolov oddelených čiarkami\n"
@@ -107,52 +121,50 @@ msgstr ""
" skip=BLOKOV preskočiť BLOKOV s veľkosťou ibs na začiatku vstupu\n"
" status=noxfer potlačiť výpis štatistiky prenosu\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -170,30 +182,12 @@ msgstr ""
"Každý symbol KONV môže byť:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii z EBCDIC do ASCII\n"
-" ebcdic z ASCII do EBCDIC\n"
-" ibm z ASCII do alternatívneho EBCDIC\n"
-" block vyplniť záznamy ukončené novým riadkom medzerami na veľkosť cbs\n"
-" unblock nahradiť medzery na konci záznamov s veľkosťou cbs znakom nového "
-"riadka\n"
-" lcase zmeniť veľké písmená na malé\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat nevytvárať výstupný súbor\n"
" excl skončiť neúspešne, ak výstupný súbor už existuje\n"
@@ -201,7 +195,7 @@ msgstr ""
" ucase zmeniť malé písmená na veľké\n"
" swab vymeniť každú dvojicu bajtov na vstupe\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -216,7 +210,7 @@ msgstr ""
" fdatasync pred ukončením fyzicky zapísať údaje\n"
" fsync podobne, ale zapísať aj metadáta\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -230,52 +224,52 @@ msgstr ""
" append režim pridávania (zmysluplné iba pre výstup; navrhuje sa "
"conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct použiť pre dáta priamy V/V\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "%s existuje, ale nie je adresárom"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync použiť pre dáta synchronizovaný V/V\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync podobne, ale aj pre metadáta\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock použiť neblokoujúci V/V\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime neaktualizovať čas posledného prístupu\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty nepriraďovať zo súboru riadiaci terminál\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow nenasledovať symbolické odkazy\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks skončiť neúspešne pri viacnásobnom odkaze\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary použiť pre dáta binárny V/V\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text použiť pre dáta textový V/V\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -305,11 +299,11 @@ msgstr ""
"Voľby sú:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Neznáma systémová chyba"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -318,19 +312,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> záznamov prečítaných\n"
"%<PRIuMAX>+%<PRIuMAX> záznamov zapísaných\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "skrátený záznam"
-msgstr[1] "skrátený záznam"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -338,7 +325,7 @@ msgstr[0] "%<PRIuMAX> byte (%s) copied"
msgstr[1] "%<PRIuMAX> skopírované bajty (%s)"
msgstr[2] "%<PRIuMAX> skopírovaných bajtov (%s)"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "nekonečno B"
@@ -352,146 +339,154 @@ msgstr "nekonečno B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, fuzzy, c-format
msgid "closing input file %s"
msgstr "vytváram súbor `%s'\n"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "zatváram výstupný súbor %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "otváram %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "CHYBNÝ"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "zápis do %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "neznámy operand %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "neplatný dátum %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "chybný argument %s pre `%s'"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "chybný argument %s pre `%s'"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "chybný argument %s pre `%s'"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "neplatná konverzia: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "neplatný vstupný prepínač: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "neplatný výstupný prepínač: %sneplatná skupina"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "neplatný stavový prepínač: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "neplatné číslo %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "nie je možné skombinovať dve z {ascii,ebcdic,ibm}"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "nie je možné skombinovať block a unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "nie je možné skombinovať lcase a ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "nie je možné skombinovať excl a nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "nie je možné vytvoriť adresár %s"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "nie je možné vytvoriť adresár %s"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "nie je možné vytvoriť adresár %s"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "nie je možné vytvoriť adresár %s"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "nie je možné vytvoriť adresár %s"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -500,89 +495,74 @@ msgstr ""
"upozornenie: obchádza sa chyba jadra vo funkcii lseek v súbore (%s)\n"
" mt_type=0x%0lx -- pozri zoznam typov v <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "číta sa %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: nie je možné vyhľadať"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "pretečenie pozície pri čítaní súboru %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "upozornenie: chybný ofset v súbore po neúspešnom čítaní"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "nakoniec nie je možné obísť chybu jadra"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "upozornenie: chybný ofset v súbore po neúspešnom čítaní"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "nastavujem príznaky %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "nie je možné vytvoriť adresár %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "nie je možné vytvoriť adresár %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "chyba pri zápise %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "zápis do %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync zlyhalo na %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync zlyhalo na %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "štandardný vstup"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "štandardný výstup"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -591,20 +571,59 @@ msgstr ""
"hodnota pozície je príliš veľká: nie je možné skrátiť na dĺžku seek=%"
"<PRIuMAX> (%lu-bajtových) blokov"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "nie je možné vykonať fstat %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "presúvam sa za %s bajtov vo výstupnom súbore %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii z EBCDIC do ASCII\n"
+#~ " ebcdic z ASCII do EBCDIC\n"
+#~ " ibm z ASCII do alternatívneho EBCDIC\n"
+#~ " block vyplniť záznamy ukončené novým riadkom medzerami na veľkosť "
+#~ "cbs\n"
+#~ " unblock nahradiť medzery na konci záznamov s veľkosťou cbs znakom "
+#~ "nového riadka\n"
+#~ " lcase zmeniť veľké písmená na malé\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "skrátený záznam"
+#~ msgstr[1] "skrátený záznam"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "nie je možné skombinovať dve z {ascii,ebcdic,ibm}"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "nie je možné skombinovať block a unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "nie je možné skombinovať lcase a ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "upozornenie: chybný ofset v súbore po neúspešnom čítaní"
+
+#~ msgid "error writing %s"
+#~ msgstr "chyba pri zápise %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "neplatný argument %s pre %s"
@@ -3903,9 +3922,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "nebolo možné vykonať %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "nie je možné vytvoriť proces pre %s -d"
-
#~ msgid "write failed"
#~ msgstr "chyba pri zápise"
diff --git a/po/sl.gmo b/po/sl.gmo
index bd48b29..7a5cad8 100644
Binary files a/po/sl.gmo and b/po/sl.gmo differ
diff --git a/po/sl.po b/po/sl.po
index 3869627..61d5097 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-04-23 09:26+0200\n"
"Last-Translator: Primož Peterlin <primoz.peterlin at biofiz.mf.uni-lj.si>\n"
"Language-Team: Slovenian <translation-team-sl at lists.sourceforge.net>\n"
@@ -19,41 +19,53 @@ msgstr ""
"%100==4 ? 3 : 0);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin in David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "ni mogoče ustvariti procesa za %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Poskusite »%s --help« za izčrpnejša navodila\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -62,16 +74,15 @@ msgstr ""
"Uporaba: %s [OPERAND]...\n"
" ali: %s IZBIRA\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Prepiši datoteko in jo pretvori in preoblikuj glede na izbire.\n"
@@ -83,21 +94,24 @@ msgstr ""
" count=BLOKOV pretvori samo zahtevano število vhodnik BLOKOV\n"
" ibs=BAJTOV beri po zahtevano število BAJTOV naenkrat\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=DATOTEKA beri z navedene DATOTEKE namesto s standardnega vhoda\n"
" iflag=ZASTAVICA beri kot z vejicami ločen seznam simbolov\n"
@@ -110,52 +124,50 @@ msgstr ""
" dolžine ibs\n"
" status=noxfer brez statistike prenosa\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -173,29 +185,12 @@ msgstr ""
"PRETVORBA je lahko (več izbir ločimo z vejico):\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii iz EBCDIC v ASCII\n"
-" ebcdic iz ASCII v EBCDIC\n"
-" ibm iz ASCII v »alternate EBCDIC«\n"
-" block zapise terminirane z NEWLINE zapolni z presledki do dolžine cbs\n"
-" unblock sledilne presledke v zapisu dolžine cbs nadomesti z NEWLINE\n"
-" lcase velike črke zamenjaj z malimi\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat ne zapiši izhodne datoteke\n"
" excl prenehaj z delom, če izhodna datoteka že obstaja\n"
@@ -203,7 +198,7 @@ msgstr ""
" ucase male črke zamenjaj z velikimi\n"
" swab paroma zamenjaj bajte na vhodu\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -218,7 +213,7 @@ msgstr ""
" fdatasync fizično zapiši izhodno datoteko pred zaključkom dela\n"
" fsync enako, vendar zapiši tudi metapodatke \n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -233,52 +228,52 @@ msgstr ""
"priporočeno\n"
" conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct uporabi neposredne vhodno-izhodne funkcije za podatke\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory opusti, razen če je imenik\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
" dsync uporabi sinhronizirane vhodno-izhodne funkcije za podatke\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync enako, a tudi za metapodatke\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock uporabi neblokirne vhodno-izhodne funkcije\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime ne ažuriraj časa zadnjega dostopa\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty ne določaj krmilnega terminala iz datoteke\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow ne sledi simbolnim povezavam\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks opusti, če je datoteka večkratno povezana\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary uporabi binarne vhodno-izhodne funkcije za podatke\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text uporabi besedilne vhodno-izhodne funkcije za podatke\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -307,11 +302,11 @@ msgstr ""
"Izbire so:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Neznana sistemska napaka"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -320,22 +315,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> zapisov na vhodu\n"
"%<PRIuMAX>+%<PRIuMAX> zapisov na izhodu\n"
-# ! INEXACT
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> odrezanih zapisov\n"
-msgstr[1] "%<PRIuMAX> odrezan zapis\n"
-msgstr[2] "%<PRIuMAX> odrezana zapisa\n"
-msgstr[3] "%<PRIuMAX> odrezani zapisi\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -344,7 +329,7 @@ msgstr[1] "%<PRIuMAX> bajt (%s) prepisan"
msgstr[2] "%<PRIuMAX> bajta (%s) prepisana"
msgstr[3] "%<PRIuMAX> bajti (%s) prepisani"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "neskončno B"
@@ -358,145 +343,152 @@ msgstr "neskončno B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "zapiramo vhodno datoteko %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "zapiramo izhodno datoteko %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Pripone izhodnih datotek so izčrpane"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "odpiramo %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "NAPAKA"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "pišemo na %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "neprepoznan operand %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "neveljavni datum %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "neveljavna oblika datuma %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "neveljavna oblika datuma %s"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "neveljavna oblika datuma %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "neveljavna pretvorba"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "neveljavna vhodna zastavica"
# ! INEXACT
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "neveljavno izhodna zastavica"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "neveljavna statusna zastavica"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "neveljavno število %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "pretvorbe ascii, ebcdic in ibm se medsebojno izključujejo"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "pretvorbi block in unblock se medsebojno izključujeta"
-
-# ! INEXACT
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "pretvorbi lcase in ucase se medsebojno izključujeta"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "pretvorbi excl in nocreat se medsebojno izključujeta"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "izbir -e in -i ni mogoče kombinirati"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "izbir -e in -i ni mogoče kombinirati"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "izbir -e in -i ni mogoče kombinirati"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "izbir -e in -i ni mogoče kombinirati"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "izbir -e in -i ni mogoče kombinirati"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -505,89 +497,74 @@ msgstr ""
"opozorilo: obvoz okoli napake lseek v jedru za datoteko (%s)\n"
" vrste mt_type=0x%0lx -- glejte <sys/mtio.h> za seznam zvrsti"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "beremo %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: premik s »seek« ni mogoč"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "prekoračitev odmika pri branju datoteke %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "opozorilo: neveljavni odmik datoteke po napaki pri branju"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "napake v jedru ni bilo mogoče zaobiti"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "opozorilo: neveljavni odmik datoteke po napaki pri branju"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "nastavljamo zastavice za %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "beremo imenik %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "beremo imenik %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "napaka pri pisanju na %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "pišemo na %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync ni uspel za %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync ni uspel za %s<"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standardni vhod"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standardni izhod"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -596,20 +573,61 @@ msgstr ""
"odmik prevelik: ni moč odrezati na dolžino seek=%<PRIuMAX> (%lu-bajtnih) "
"blokov"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "statusa %s ni moč ugotoviti s fstat"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "napredovali smo prek %<PRIuMAX> bajtov v izhodni datoteki %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii iz EBCDIC v ASCII\n"
+#~ " ebcdic iz ASCII v EBCDIC\n"
+#~ " ibm iz ASCII v »alternate EBCDIC«\n"
+#~ " block zapise terminirane z NEWLINE zapolni z presledki do dolžine "
+#~ "cbs\n"
+#~ " unblock sledilne presledke v zapisu dolžine cbs nadomesti z NEWLINE\n"
+#~ " lcase velike črke zamenjaj z malimi\n"
+
+# ! INEXACT
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> odrezanih zapisov\n"
+#~ msgstr[1] "%<PRIuMAX> odrezan zapis\n"
+#~ msgstr[2] "%<PRIuMAX> odrezana zapisa\n"
+#~ msgstr[3] "%<PRIuMAX> odrezani zapisi\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "pretvorbe ascii, ebcdic in ibm se medsebojno izključujejo"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "pretvorbi block in unblock se medsebojno izključujeta"
+
+# ! INEXACT
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "pretvorbi lcase in ucase se medsebojno izključujeta"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "opozorilo: neveljavni odmik datoteke po napaki pri branju"
+
+#~ msgid "error writing %s"
+#~ msgstr "napaka pri pisanju na %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "neveljavni argument %s za %s"
@@ -6827,9 +6845,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "ni mogoče izvesti %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "ni mogoče ustvariti procesa za %s -d"
-
#~ msgid "write failed"
#~ msgstr "pisanje ni uspelo"
diff --git a/po/sv.gmo b/po/sv.gmo
index 7c05b29..13c5389 100644
Binary files a/po/sv.gmo and b/po/sv.gmo differ
diff --git a/po/sv.po b/po/sv.po
index bbf4ffc..744d1ba 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-05-16 23:07+0200\n"
"Last-Translator: Göran Uddeborg <goeran at uddeborg.se>\n"
"Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
@@ -22,40 +22,52 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "det gick inte att skapa en process för %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Försök med \"%s --help\" för mer information.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -64,16 +76,15 @@ msgstr ""
"Användning: %s [OPERAND]...\n"
" eller: %s FLAGGA\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Kopiera en fil med konvertering och formatering enligt operanderna.\n"
@@ -84,21 +95,24 @@ msgstr ""
" count=BLOCK kopiera endast BLOCK inblock\n"
" ibs=BYTE läs BYTE byte åt gången\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=FIL läs från FIL istället för standard in\n"
" iflag=FLAGGOR läs enligt den kommaseparerade symbollistan\n"
@@ -109,52 +123,50 @@ msgstr ""
" skip=BLOCK hoppa över BLOCK ibs-stora block från början av infil\n"
" status=noxfer utelämna överföringsstatistik\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -172,29 +184,12 @@ msgstr ""
"Varje KONV kan vara:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii från EBCDIC till ASCII\n"
-" ebcdic från ASCII till EBCDIC\n"
-" ibm från ASCII till en annan EBCDIC\n"
-" block fyll ut nyradsavslutade poster med blanktecken till cbs-storlek\n"
-" unblock ersätt avslutande blanktecken med nyrad i cbs-stora poster\n"
-" lcase ändra versaler till gemena\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat skapa inte utfilen\n"
" excl misslyckas om utilen redan finns\n"
@@ -202,7 +197,7 @@ msgstr ""
" ucase ändra gemena till versaler\n"
" swab byt plats på varje par av byte i indata\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -217,7 +212,7 @@ msgstr ""
" fdatasync skriv fysiskt data till utfilen före svslut\n"
" fsync d:o, men skriv även metadata\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -231,51 +226,51 @@ msgstr ""
" append lägg-till-läge (meningsfullt endast för utmatning, conv=notrunc\n"
" rekommenderas)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct använd direkt I/O för data\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory misslyckas om inte en katalog\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync använd synkroniserad I/O för data\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync d:o, men även för metadata\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock använd icke blockerande I/O\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime uppdatera inte åtkomsttiden\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty tilldela inte styrterminal från fil\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow följ inte symboliska länkar\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks misslyckas ifall flera länkar\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary använd binär I/O för data\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text använd text-I/O för data\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -302,11 +297,11 @@ msgstr ""
" 18335302+0 poster ut\n"
" 9387674624 byte (9.4 GB) kopierade, 34.6279 sekunder, 271 MB/s\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Okänt systemfel"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -315,26 +310,19 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> poster in\n"
"%<PRIuMAX>+%<PRIuMAX> poster ut\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> avhuggen post\n"
-msgstr[1] "%<PRIuMAX> avhuggna poster\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%<PRIuMAX> byte (%s) kopierad"
msgstr[1] "%<PRIuMAX> byte (%s) kopierade"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Oändligt B"
@@ -348,143 +336,151 @@ msgstr "Oändligt B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "stänger infil %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "stänger utdatafil %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Slut på utfiländelser"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "öppnar %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "MISSLYCKADES"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "skrivning till %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "okänd operand %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "ogiltigt datum %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "felaktigt datumformat %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "felaktigt datumformat %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "felaktigt datumformat %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "ogiltig konvertering"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "ogiltig inflagga"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "ogiltig utflagga"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "ogiltig statusflagga"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "ogiltigt antal %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "kan inte kombinera något par av {ascii,ebcdic,ibm}"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "kan inte kombinera block och unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "kan inte kombinera lcase och ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "kan inte kombinera excl och nocreate"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "det går inte att kombinera flaggorna -e och -i"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "det går inte att kombinera flaggorna -e och -i"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "det går inte att kombinera flaggorna -e och -i"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "det går inte att kombinera flaggorna -e och -i"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "det går inte att kombinera flaggorna -e och -i"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -493,89 +489,74 @@ msgstr ""
"varning: går runt fel i kärnan i lseek för fil (%s)\n"
" med mt_type=0x%0lx -- se <sys/mtio.h> för en lista av typer"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "läser %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: kan inte söka"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "spill i filposition vid läsning av filen %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "varning: ogiltig filposition efter misslyckad läsning"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "kan inte kringgå fel i kärnan trots allt"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "varning: ogiltig filposition efter misslyckad läsning"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "sätter flaggor för %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "läser katalog %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "läser katalog %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "fel vid skrivning av %s"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "skrivning till %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync misslyckades för %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync misslyckades för %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standard in"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standard ut"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -584,20 +565,57 @@ msgstr ""
"positionen för stor: kan inte hugga av till en längd av seek=%<PRIuMAX> (%lu-"
"byte-)block"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "kan inte göra fstat på %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "hugger av vid %<PRIuMAX> byte i utdatafil %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii från EBCDIC till ASCII\n"
+#~ " ebcdic från ASCII till EBCDIC\n"
+#~ " ibm från ASCII till en annan EBCDIC\n"
+#~ " block fyll ut nyradsavslutade poster med blanktecken till cbs-"
+#~ "storlek\n"
+#~ " unblock ersätt avslutande blanktecken med nyrad i cbs-stora poster\n"
+#~ " lcase ändra versaler till gemena\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> avhuggen post\n"
+#~ msgstr[1] "%<PRIuMAX> avhuggna poster\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "kan inte kombinera något par av {ascii,ebcdic,ibm}"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "kan inte kombinera block och unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "kan inte kombinera lcase och ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "varning: ogiltig filposition efter misslyckad läsning"
+
+#~ msgid "error writing %s"
+#~ msgstr "fel vid skrivning av %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "felaktigt argument %s till %s"
@@ -6685,9 +6703,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "det gick inte att köra %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "det gick inte att skapa en process för %s -d"
-
#~ msgid "write failed"
#~ msgstr "misslyckaes skriva"
diff --git a/po/tr.gmo b/po/tr.gmo
index cd817e2..0a32105 100644
Binary files a/po/tr.gmo and b/po/tr.gmo differ
diff --git a/po/tr.po b/po/tr.po
index 847fd2b..3315f5f 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.3.0\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2005-03-14 04:17+0200\n"
"Last-Translator: Deniz Akkus Kanca <deniz at arayan.com>\n"
"Language-Team: Turkish <gnu-tr-u12a at lists.sourceforge.net>\n"
@@ -20,41 +20,53 @@ msgstr ""
"X-Generator: KBabel 1.9.1\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Paul Rubin ve David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "%s dizini oluşturulamıyor"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Daha fazla bilgi için `%s --help' yazın.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -63,16 +75,15 @@ msgstr ""
"Kullanımı: %s [İŞLEYEN]...\n"
" veya: %s SEÇENEK\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Seçeneklere göre biçemleme ve dönüştürme yaparak bir dosya kopyalar.\n"
@@ -84,21 +95,24 @@ msgstr ""
" count=BLOK yalnızca BLOK sayıda girdi bloğu kopyalar\n"
" ibs=BAYT bir seferde BAYT bayt okur\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=DOSYA standart girdi yerine DOSYA'dan okur\n"
" iflag=BAYRAK virgülle ayrılmış sembol listesine uygun olarak okur\n"
@@ -108,52 +122,50 @@ msgstr ""
" seek=BLOK çıktının başında obs boyunda BLOK sayısında blok atlar\n"
" skip=BLOK girdinin başında ibs boyunda BLOK sayısında blok atlar\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -171,32 +183,12 @@ msgstr ""
"Her CONV sembolü:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii EBCDIC'den ASCII'ye\n"
-" ebcdic ASCII'den EBCDIC'ye\n"
-" ibm ASCII'den alternatifli EBCDIC'ye\n"
-" block satırsonu karakteri ile biten kayıtları cbs boyutuna getirmek\n"
-" için boşlukla doldurur\n"
-" unblock cbs boyutundaki kayıtlarda sonda yer alan boşlukları yenisatır \n"
-" ile değiştirir\n"
-" lcase büyük harfleri küçük harfe dönüştürür\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat çıktı dosyasını oluşturmaz\n"
" excl çıktı dosyası var ise başarısız olur\n"
@@ -212,7 +204,7 @@ msgstr ""
" fdatasync bitirmeden önce çıktı dosya verisini fiziken yazdırır\n"
" fsync fdatasync gibi fakat ek olarak meta veriyi de yazdırır\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
#, fuzzy
msgid ""
" noerror continue after read errors\n"
@@ -235,7 +227,7 @@ msgstr ""
" fdatasync bitirmeden önce çıktı dosya verisini fiziken yazdırır\n"
" fsync fdatasync gibi fakat ek olarak meta veriyi de yazdırır\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
#, fuzzy
msgid ""
"\n"
@@ -249,56 +241,56 @@ msgstr ""
"\n"
" append ekleme kipi (yalnız çıktı için geçerli)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct veri için direkt I/O kullanır\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr " direct veri için direkt I/O kullanır\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync veri için senkron I/O kullanır\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync önceki gibi fakat meta veri için de geçerli\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock bloklamayan I/O kullanır\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
" noctty dosyadan kontrol eden terminali ayarlamaz\n"
" terminal from file\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow sembolik bağları izlemez\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
#, fuzzy
msgid " binary use binary I/O for data\n"
msgstr " direct veri için direkt I/O kullanır\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
#, fuzzy
msgid " text use text I/O for data\n"
msgstr " direct veri için direkt I/O kullanır\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -328,37 +320,30 @@ msgstr ""
"Seçenekler:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Bilinmeyen sistem hatası"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "budanmış kayıt"
-msgstr[1] "budanmış kayıt"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%s bayt (%s) kopyalandı"
msgstr[1] "%s bayt (%s) kopyalandı"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
#, fuzzy
msgid "Infinity B"
msgstr "Sonsuz"
@@ -373,150 +358,155 @@ msgstr "Sonsuz"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g saniye, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, fuzzy, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g saniye, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "girdi dosyası %s kapatılıyor"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "çıktı dosyası %s kapatılıyor"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "kullanacak parça ismi kalmadı"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "%s açılıyor"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "BAŞARISIZ"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "%s'e yazılıyor"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "geçersiz işleyen %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "`%s' geçerli bir zaman dizgesi değil"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "geçersiz tarih biçemi %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "geçersiz tarih biçemi %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "geçersiz tarih biçemi %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "geçersiz dönüşüm: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "geçersiz girdi bayrağı: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "geçersiz çıktı bayrağı: %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "geçersiz durum bayrağı: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "geçersiz sayı %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "{ascii, ebcdic, ibm} değerlerinin herhangi ikisi birleştirilemez"
-
-#
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "`block' ve `unblock' seçenekleri aynı anda kullanılamaz"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr ""
-"`lcase' (küçük harf) ve `ucase' (büyük harf) seçenekleri aynı anda "
-"kullanılamaz"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "`excl' ve `nocreat' seçenekleri birleştirilemez"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "kip ve --reference seçenekleri birleştirilemez"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "kip ve --reference seçenekleri birleştirilemez"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "kip ve --reference seçenekleri birleştirilemez"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "kip ve --reference seçenekleri birleştirilemez"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "kip ve --reference seçenekleri birleştirilemez"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -526,109 +516,138 @@ msgstr ""
"alternatifler\n"
" kullanılıyor -- tür listesi için <sys/mtio.h>'e bakın"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "%s okunuyor"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: aranamadı"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "%s dosya okunurken görece taşması"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "uyarı: başarısız okumadan sonra garip dosya atlaması"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "çekirdek hatası bertaraf edilemedi"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "uyarı: başarısız okumadan sonra garip dosya atlaması"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "%s için seçenekler belirtiliyor"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "dizin %s okunuyor"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "dizin %s okunuyor"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "%s'e yazarken hata"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "%s'e yazılıyor"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "%s için fdatasync başarısız"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "%s için fsync başarısız"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "standart girdi"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "standart çıktı"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "%s'nin dosya durumu (fstat) alınamadı"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "çıktı dosyasında %s bayt ileriye gidildi %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii EBCDIC'den ASCII'ye\n"
+#~ " ebcdic ASCII'den EBCDIC'ye\n"
+#~ " ibm ASCII'den alternatifli EBCDIC'ye\n"
+#~ " block satırsonu karakteri ile biten kayıtları cbs boyutuna "
+#~ "getirmek\n"
+#~ " için boşlukla doldurur\n"
+#~ " unblock cbs boyutundaki kayıtlarda sonda yer alan boşlukları "
+#~ "yenisatır \n"
+#~ " ile değiştirir\n"
+#~ " lcase büyük harfleri küçük harfe dönüştürür\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "budanmış kayıt"
+#~ msgstr[1] "budanmış kayıt"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "{ascii, ebcdic, ibm} değerlerinin herhangi ikisi birleştirilemez"
+
+#
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "`block' ve `unblock' seçenekleri aynı anda kullanılamaz"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr ""
+#~ "`lcase' (küçük harf) ve `ucase' (büyük harf) seçenekleri aynı anda "
+#~ "kullanılamaz"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "uyarı: başarısız okumadan sonra garip dosya atlaması"
+
+#~ msgid "error writing %s"
+#~ msgstr "%s'e yazarken hata"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%s argümanı `%s' için geçersiz"
@@ -6330,10 +6349,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "geçici dosya oluşturulamadı"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "%s dizini oluşturulamıyor"
-
#~ msgid "write failed"
#~ msgstr "yazma başarısız oldu"
diff --git a/po/uk.gmo b/po/uk.gmo
index 8522a5a..b0ad185 100644
Binary files a/po/uk.gmo and b/po/uk.gmo differ
diff --git a/po/uk.po b/po/uk.po
index 6f2b1f3..f73183e 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.9.91\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2007-12-17 15:12+0300\n"
"Last-Translator: Maxim V. Dziumanenko <dziumanenko at gmail.com>\n"
"Language-Team: Ukrainian <translation-team-uk at lists.sourceforge.net>\n"
@@ -18,40 +18,52 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "неможливо створити процес для %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Спробуйте `%s --help' для одержання додаткової інформації.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -60,16 +72,15 @@ msgstr ""
"Використання: %s [ОПЕРАНД]...\n"
" або: %s КЛЮЧ\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Копіює файл, перетворює та форматує у залежності від операндів.\n"
@@ -81,21 +92,24 @@ msgstr ""
" count=ЧИСЛО копіювати лише вказане ЧИСЛО вхідних блоків\n"
" ibs=ЧИСЛО читати вказане ЧИСЛО байт за раз\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=ФАЙЛ читати ФАЙЛ, а не стандартний ввід\n"
" iflag=СПИСОК читати відповідно до СПИСКУ символів,\n"
@@ -108,52 +122,50 @@ msgstr ""
" skip=ЧИСЛО пропустити з початку вводу ЧИСЛО блоків розміром ibs\n"
" status=noxfer не виводити статистику передачі\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -171,31 +183,12 @@ msgstr ""
"Кожен елемент СПИСКУ для conv може бути:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii з EBCDIC на ASCII\n"
-" ebcdic з ASCII на EBCDIC\n"
-" ibm з ASCII на альтернативну EBCDIC\n"
-" block заповнювати записи, що закінчуються переносом рядка, пробілами\n"
-" до розміру cbs\n"
-" unblock замінювати кінцеві пробіли у записах з розміром cbs переносом "
-"рядка\n"
-" lcase змінювати регістр з верхнього на нижній\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat не створювати файл виводу\n"
" excl завершаться помилкою, якщо файл виводу уже існує\n"
@@ -203,7 +196,7 @@ msgstr ""
" ucase змінювати регістр з нижнього на верхній\n"
" swab міняти місцями кожну пару вхідних байтів\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -217,7 +210,7 @@ msgstr ""
" fdatasync фізично записати файл виводу перед завершенням\n"
" fsync аналогічно, але записати також метадані\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -231,51 +224,51 @@ msgstr ""
" append режим додавання (має сенс для виводу; рекомендується "
"conv=notrunc)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct використовувати прямий ввід/вивід для даних\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory помилка, якщо не є каталогом\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync використовувати синхронізований ввід/вивід для даних\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync те саме, але також для метаданих\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock використовувати ввід/вивід без блокування\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime не оновлювати час останнього доступу\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty не призначати керуючий термінал з файлу\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow не слідувати за символьним посиланням\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks помилка, якщо знайдено декілька посилань\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary використовувати двійковий ввід/вивід для даних\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text використовувати текстовий ввід/вивід для даних\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -305,11 +298,11 @@ msgstr ""
"Ключі:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Невідома системна помилка"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -318,20 +311,12 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> записів прочитано\n"
"%<PRIuMAX>+%<PRIuMAX> записів записано\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> обрізаний запис\n"
-msgstr[1] "%<PRIuMAX> обрізані записи\n"
-msgstr[2] "%<PRIuMAX> обрізаних записів\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
@@ -339,7 +324,7 @@ msgstr[0] " скопійовано %<PRIuMAX> байт (%s)"
msgstr[1] " скопійовано %<PRIuMAX> байти (%s)"
msgstr[2] " скопійовано %<PRIuMAX> байтів (%s)"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "Нескінченість"
@@ -353,147 +338,155 @@ msgstr "Нескінченість"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g с, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g с, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "закриття вхідного файлу %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "закриття файлу виводу %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Вичерпані суфікси для вихідних файлів"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "відкриття %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "ПОМИЛКА"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "запис у %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "операнд %s не розпізнаний"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "неправильна дата %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "неправильний формат дати %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "неправильний формат дати %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "неправильний формат дати %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "неприпустиме перетворення: %s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "неприпустима ознака входу: %s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "неприпустимий ознака виводу: %s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "неприпустимий ознака статусу: %s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "неправильний номер %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "не можна одночасно використовувати будь-які два з {ascii,ebcdic,ibm}"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "не можна одночасно використовувати block та unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "не можна одночасно використовувати lcase та ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "не можна одночасно використовувати excl та nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "не можна одночасно використовувати ключі -e та -i"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "не можна одночасно використовувати ключі -e та -i"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "не можна одночасно використовувати ключі -e та -i"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "не можна одночасно використовувати ключі -e та -i"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "не можна одночасно використовувати ключі -e та -i"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -502,89 +495,74 @@ msgstr ""
"попередження: обходиться помилка lseek у ядрі для файлу (%s)\n"
" mt_type=0x%0lx -- см. <sys/mtio.h> для списку типів"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "читання %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: не вдається зсунути вказівник файлу"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "переповнення зсуву при читанні файлу %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "попередження: некоректний зсув файлу після помилки читання"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "не вдається обійти помилку ядра"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "попередження: некоректний зсув файлу після помилки читання"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "встановлення ознак для %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "читання каталогу %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "читання каталогу %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "помилка запису %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "запис у %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "операція fdatasync для %s завершилась помилкою"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "операція fsync для %s завершилась помилкою"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "стандартний ввід"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "стандартний вивід"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -593,20 +571,61 @@ msgstr ""
"зсув надто великий: не вдається обрізати до величини seek=%<PRIuMAX> (%lu-"
"байтних) блоків"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "не вдається виконати fstat для %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "відсікання на %<PRIuMAX> байт у файлі виводу %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii з EBCDIC на ASCII\n"
+#~ " ebcdic з ASCII на EBCDIC\n"
+#~ " ibm з ASCII на альтернативну EBCDIC\n"
+#~ " block заповнювати записи, що закінчуються переносом рядка, "
+#~ "пробілами\n"
+#~ " до розміру cbs\n"
+#~ " unblock замінювати кінцеві пробіли у записах з розміром cbs переносом "
+#~ "рядка\n"
+#~ " lcase змінювати регістр з верхнього на нижній\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> обрізаний запис\n"
+#~ msgstr[1] "%<PRIuMAX> обрізані записи\n"
+#~ msgstr[2] "%<PRIuMAX> обрізаних записів\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr ""
+#~ "не можна одночасно використовувати будь-які два з {ascii,ebcdic,ibm}"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "не можна одночасно використовувати block та unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "не можна одночасно використовувати lcase та ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "попередження: некоректний зсув файлу після помилки читання"
+
+#~ msgid "error writing %s"
+#~ msgstr "помилка запису %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "неправильний аргумент %s для %s"
@@ -6688,9 +6707,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "неможливо виконати %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "неможливо створити процес для %s -d"
-
#~ msgid "write failed"
#~ msgstr "запис завершився помилкою"
diff --git a/po/vi.gmo b/po/vi.gmo
index cd81f54..29cd32b 100644
Binary files a/po/vi.gmo and b/po/vi.gmo differ
diff --git a/po/vi.po b/po/vi.po
index 28a01c2..758f845 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.11\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2008-04-23 17:47+0930\n"
"Last-Translator: Clytie Siddall <clytie at riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN at googlegroups.com>\n"
@@ -19,40 +19,52 @@ msgstr ""
"X-Generator: LocFactoryEditor 1.7b3\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "không tạo được tiến trình cho %s -d"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Hãy thử lệnh trợ giúp « %s --help » để biết thêm thông tin.\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -61,16 +73,15 @@ msgstr ""
"Sử dụng: %s [TOÁN_HẠNG]...\n"
" hoặc: %s TÙY_CHỌN\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"Sao chép mọt tập tin, chuyển đổi và định dạng theo toán hạng.\n"
@@ -82,21 +93,24 @@ msgstr ""
" count=KHỐI chỉ sao chép KHỐI khối đầu vào\n"
" ibs=BYTES đọc BYTES byte cùng một lúc\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=TẬP_TIN đọc từ TẬP_TIN thay cho đầu vào tiêu chuẩn\n"
" iflag=CỜ đọc như danh sách các ký hiệu phân cách bởi dấu phẩy\n"
@@ -107,52 +121,50 @@ msgstr ""
" skip=KHỐI bỏ qua KHỐI khối với kích thước ibs ở đầu đầu vào\n"
" status=noxfer bỏ đi thông kê truyền tải\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -170,30 +182,12 @@ msgstr ""
"Mỗi ký hiệu CONV có thể là:\n"
"\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii từ EBCDIC tới ASCII\n"
-" ebcdic từ ASCII tới EBCDIC\n"
-" ibm từ ASCII tới EBCDIC xen kẽ\n"
-" block thêm mục ghi dừng dòng mới với khoảng trắng đến kích cỡ cbs\n"
-" unblock thay thế khoảng trắng theo sau trong mục ghi kích cỡ cbs bằng "
-"dòng mới\n"
-" lcase thay đổi chữ hoa thành chữ thường\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
+#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat không tạo tập tin kết quả\n"
" excl lỗi nếu tập tin kết quả đã có\n"
@@ -201,7 +195,7 @@ msgstr ""
" ucase thay đổi chữ thường thành chữ hoa\n"
" swab trao đổi mọi cặp byte đưa vào\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
msgid ""
" noerror continue after read errors\n"
" sync pad every input block with NULs to ibs-size; when used\n"
@@ -215,7 +209,7 @@ msgstr ""
" fdatasync ghi vật lý dữ liệu tập tin kết quả lên đĩa trước khi thoát\n"
" fsync như trên, nhưng đồng thời ghi cả siêu dữ liệu\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -229,51 +223,51 @@ msgstr ""
" append chế độ phụ thêm\n"
" (chỉ có ích cho kết quả ra; cũng đề nghị « conv=notrunc »)\n"
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr " direct sử dụng V/R thẳng cho dữ liệu\n"
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
msgid " directory fail unless a directory\n"
msgstr " directory lỗi nếu không phải thư mục\n"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr " dsync dùng V/R đã đồng bộ cho dữ liệu\n"
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr " sync như trên, nhưng đồng thời cho cả siêu dữ liệu\n"
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr " nonblock sử dụng V/R không đặt khối\n"
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr " noatime không cập nhật giờ truy cập\n"
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr " noctty không ấn định thiết bị cuối điều khiển từ tập tin\n"
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr " nofollow không đi theo liên kết mềm\n"
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr " nolinks lỗi nếu có nhiều liên kết\n"
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr " binary sử dụng V/R nhị phân cho dữ liệu\n"
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr " text sử dụng V/R văn bản cho dữ liệu\n"
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -302,11 +296,11 @@ msgstr ""
"Tùy chọn:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "Lỗi hệ thống không rõ"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, fuzzy, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
@@ -315,24 +309,18 @@ msgstr ""
"%<PRIuMAX>+%<PRIuMAX> mục ghi vào\n"
"%<PRIuMAX>+%<PRIuMAX> mục ghi ra\n"
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> mục ghi bị cắt ngắn\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "%<PRIuMAX> byte (%s) đã sao chép"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "B vô cùng"
@@ -346,143 +334,151 @@ msgstr "B vô cùng"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ", %g s, %s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "đang đóng tập tin vào %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "đang đóng tập tin ra %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "Hết đuôi (hậu tố) để dùng cho tập tin kết quả"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "đang mở %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "BỊ LỖI"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "đang ghi tới %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "toán hạng không nhận ra %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "ngày sai %s'"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "sai định dạng ngày tháng %s"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "sai định dạng ngày tháng %s"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "sai định dạng ngày tháng %s"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
msgid "invalid conversion"
msgstr "sai chuyển đổi"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
msgid "invalid input flag"
msgstr "cờ đầu vào không hợp lệ"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
msgid "invalid output flag"
msgstr "cờ đầu ra không hợp lệ"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
msgid "invalid status flag"
msgstr "cờ trạng thái không hợp lệ"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "số không hợp lệ %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "không thể kết hợp hai trong số {ascii,ebcdic,ibm}"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "không thể kết hợp block và unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "không thể kết hợp lcase (chữ thường) và ucase (chữ hoa)"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "không thể kết hợp excl và nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "không thể kết hợp hai tùy chọn « -e » và « -i »"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "không thể kết hợp hai tùy chọn « -e » và « -i »"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "không thể kết hợp hai tùy chọn « -e » và « -i »"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "không thể kết hợp hai tùy chọn « -e » và « -i »"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "không thể kết hợp hai tùy chọn « -e » và « -i »"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -491,89 +487,74 @@ msgstr ""
"cảnh báo : đang gỡ rối lỗi nhân lseek cho tập tin (%s)\n"
" có mt_type=0x%0lx -- xem <sys/mtio.h> để biết danh sách các dạng"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "đang đọc %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s: không thể tìm nơi"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr "vùng hiệu bị tràn khi đọc tập tin %s"
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "cảnh báo : vùng hiệu tập tin không hợp lệ sau lỗi đọc"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "vậy không làm việc được với lỗi của nhân"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "cảnh báo : vùng hiệu tập tin không hợp lệ sau lỗi đọc"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr "đang thiết lập cờ cho %s"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "đang đọc thư mục %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "đang đọc thư mục %s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "lỗi ghi %s"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "đang ghi tới %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "fdatasync bị lỗi cho %s"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "fsync bị lỗi cho %s"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "đầu vào tiêu chuẩn"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "đầu ra tiêu chuẩn"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, fuzzy, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
@@ -582,20 +563,56 @@ msgstr ""
"vùng hiệu quá lớn: không thể cắt ngắn thành chiều dài seek=%<PRIuMAX> (%lu-"
"byte) khối"
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "không fstat được %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "đang cắt ngắn ở %<PRIuMAX> byte trong tập tin kết quả %s"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii từ EBCDIC tới ASCII\n"
+#~ " ebcdic từ ASCII tới EBCDIC\n"
+#~ " ibm từ ASCII tới EBCDIC xen kẽ\n"
+#~ " block thêm mục ghi dừng dòng mới với khoảng trắng đến kích cỡ cbs\n"
+#~ " unblock thay thế khoảng trắng theo sau trong mục ghi kích cỡ cbs bằng "
+#~ "dòng mới\n"
+#~ " lcase thay đổi chữ hoa thành chữ thường\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> mục ghi bị cắt ngắn\n"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "không thể kết hợp hai trong số {ascii,ebcdic,ibm}"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "không thể kết hợp block và unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "không thể kết hợp lcase (chữ thường) và ucase (chữ hoa)"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "cảnh báo : vùng hiệu tập tin không hợp lệ sau lỗi đọc"
+
+#~ msgid "error writing %s"
+#~ msgstr "lỗi ghi %s"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "đối số sai %s cho %s"
@@ -6769,9 +6786,6 @@ msgstr ""
#~ msgid "couldn't execute %s -d"
#~ msgstr "không thể thực hiện %s -d"
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "không tạo được tiến trình cho %s -d"
-
#~ msgid "write failed"
#~ msgstr "lỗi ghi"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 66f133c..614a083 100644
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index b498d83..a232901 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 6.1\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2006-08-24 23:38+0800\n"
"Last-Translator: Funda Wang <fundawang at linux.net.cn>\n"
"Language-Team: Chinese (simplified) <i18n-translation at lists.linux.net.cn>\n"
@@ -19,40 +19,52 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
msgid "David MacKenzie"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "无法创建目录 %s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "请尝试执行“%s --help”来获取更多信息。\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -61,16 +73,15 @@ msgstr ""
"用法:%s [操作符]...\n"
" 或:%s 选项\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"复制文件,并根据以下的选项将数据转换和格式化。\n"
@@ -81,21 +92,24 @@ msgstr ""
" count=块数目 只复制指定<块数目>的输入数据\n"
" ibs=字节 每次读取指定的<字节>\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=文件 读取<文件>内容而非标准输入的数据\n"
" iflag=标志 按照逗号分隔的符号列表读取\n"
@@ -106,52 +120,50 @@ msgstr ""
" skip=块数目 先略过以 ibs 为单位的指定<块数目>的输入数据\n"
" status=noxfer 禁止传送统计\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
#, fuzzy
msgid ""
"\n"
@@ -168,33 +180,12 @@ msgstr ""
"GB=1000000000,G=1073741824,还有 T、P、E、Z、Y 如此类推。\n"
"每个<关键字>可以是:\n"
-#: src/dc3dd.c:1129
-#, fuzzy
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii 由 EBCDIC 转换至 ASCII\n"
-" ebcdic 由 ASCII 转换至 EBCDIC\n"
-" ibm 由 ASCII 转换至 alternated EBCDIC\n"
-" block 将以 newline 作为结束字符的块的 newline 换成空格,直至空格\n"
-" 填满 cbs 表示的大小\n"
-" unblock 会将 cbs 大小的块中所有结束的空格删除,并转换为一个 newline 字"
-"符\n"
-" lcase 将大写字符转换为小写\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" notrunc 不截断输出文件\n"
" ucase 将小写字符转换为大写\n"
@@ -203,7 +194,7 @@ msgstr ""
" sync 将每个输入数据块以 NUL 字符填满至 ibs 的大小;当配合 block\n"
" 或 unblock 时,会以空格代替 NUL 字符填充\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
#, fuzzy
msgid ""
" noerror continue after read errors\n"
@@ -219,7 +210,7 @@ msgstr ""
" sync 将每个输入数据块以 NUL 字符填满至 ibs 的大小;当配合 block\n"
" 或 unblock 时,会以空格代替 NUL 字符填充\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -228,52 +219,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "安装目录时不能用 strip 选项"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, c-format
msgid ""
"\n"
@@ -290,35 +281,29 @@ msgid ""
"\n"
msgstr ""
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "未知的系统错误"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "%<PRIuMAX> 个被截断了的块\n"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] ""
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
msgid "Infinity B"
msgstr "无穷 B"
@@ -332,148 +317,154 @@ msgstr "无穷 B"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ",%g 秒,%s/秒\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, c-format
msgid ", %g s, %s/s\n"
msgstr ",%g 秒,%s/秒\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "正在关闭输入文件 %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "正在关闭输出文件 %s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
msgid "Split extensions exhausted"
msgstr ""
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "打开 %s"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
msgid "Verify FAILED"
msgstr ""
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "正在写入 %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "无法识别的操作数 %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "无效的日期 %s"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "日期格式 %s 无效"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
+#, c-format
+msgid "Illegal ifjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "日期格式 %s 无效"
+
+#: src/dc3dd.c:2793
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal vfjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "日期格式 %s 无效"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "转换无效:%s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "无效的输入标志:%s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "无效的输出标志:%s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "日期格式 %s 无效"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "无效的号码 %s"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr ""
-
-#: src/dc3dd.c:2682
-#, fuzzy
-msgid "cannot combine block and unblock"
-msgstr "不可同时省略用户和所属组"
-
-#: src/dc3dd.c:2684
-#, fuzzy
-msgid "cannot combine lcase and ucase"
-msgstr "无法比较文件名 %s 和 %s"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
#, fuzzy
msgid "cannot combine excl and nocreat"
msgstr "无法决定 %s 所在的设备及 inode"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "无法决定 %s 所在的设备及 inode"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "无法决定 %s 所在的设备及 inode"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "无法决定 %s 所在的设备及 inode"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "无法决定 %s 所在的设备及 inode"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "无法决定 %s 所在的设备及 inode"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -482,109 +473,131 @@ msgstr ""
"警告:暂时避免有关文件 (%s) 的 lseek 核心错误,文件的 mt_type=0x%0lx --\n"
" 有关 mt_type 类型的列表请参考 <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "读入 %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s:无法搜索"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "警告:指定来源文件%s多于一次"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr ""
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "警告:指定来源文件%s多于一次"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, fuzzy, c-format
msgid "setting flags for %s"
msgstr "设置 %s 的时间"
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "读取目录 %s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "读取目录 %s"
-#: src/dc3dd.c:3789
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "error writing %s"
-msgstr "写入 %s 出错"
-
-#: src/dc3dd.c:3915
-#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "正在写入 %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr ""
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, fuzzy, c-format
msgid "fsync failed for %s"
msgstr "无法保留%s的时间"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "标准输入"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "标准输出"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "无法 fstat %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "略过输出文件 %2$s 的最初 %1$s 个字节"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#, fuzzy
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii 由 EBCDIC 转换至 ASCII\n"
+#~ " ebcdic 由 ASCII 转换至 EBCDIC\n"
+#~ " ibm 由 ASCII 转换至 alternated EBCDIC\n"
+#~ " block 将以 newline 作为结束字符的块的 newline 换成空格,直至空格\n"
+#~ " 填满 cbs 表示的大小\n"
+#~ " unblock 会将 cbs 大小的块中所有结束的空格删除,并转换为一个 newline 字"
+#~ "符\n"
+#~ " lcase 将大写字符转换为小写\n"
+
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "%<PRIuMAX> 个被截断了的块\n"
+
+#, fuzzy
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "不可同时省略用户和所属组"
+
+#, fuzzy
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "无法比较文件名 %s 和 %s"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "警告:指定来源文件%s多于一次"
+
+#~ msgid "error writing %s"
+#~ msgstr "写入 %s 出错"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%2$s 的参数 %1$s 无效"
@@ -3799,10 +3812,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "无法创建临时文件"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "无法创建目录 %s"
-
#~ msgid "write failed"
#~ msgstr "写入失败"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 89657c3..e73e469 100644
Binary files a/po/zh_TW.gmo and b/po/zh_TW.gmo differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 88a8558..40f5bf5 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: coreutils 5.3.0\n"
"Report-Msgid-Bugs-To: bug-coreutils at gnu.org\n"
-"POT-Creation-Date: 2008-09-04 16:52-0400\n"
+"POT-Creation-Date: 2009-04-07 16:11-0400\n"
"PO-Revision-Date: 2005-07-02 04:13+0800\n"
"Last-Translator: Abel Cheung <abelcheung at gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n at linux.org.tw>\n"
@@ -23,41 +23,53 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:51
+#: src/dc3dd.c:59
msgid "Paul Rubin"
msgstr ""
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:52
+#: src/dc3dd.c:60
#, fuzzy
msgid "David MacKenzie"
msgstr "Stuart Kemp 及 David MacKenzie"
#. This is a proper name. See the gettext manual, section Names.
-#: src/dc3dd.c:53
+#: src/dc3dd.c:61
msgid "Stuart Kemp"
msgstr ""
-#: src/dc3dd.c:518
+#: src/dc3dd.c:523
+#, fuzzy
+msgid "Could not allocate space for thread"
+msgstr "無法建立目錄%s"
+
+#: src/dc3dd.c:538 src/dc3dd.c:546
+msgid "Unable to allocate space for thread buffer"
+msgstr ""
+
+#: src/dc3dd.c:556
+msgid "Unable to allocate space for lock/signals"
+msgstr ""
+
+#: src/dc3dd.c:714
#, c-format
msgid "Unknown hash algorithm %s"
msgstr ""
-#: src/dc3dd.c:536
+#: src/dc3dd.c:730
msgid "Unable to allocate space for hashes"
msgstr ""
-#: src/dc3dd.c:680
-#, c-format
-msgid "Unable to allocate hashing buffer"
+#: src/dc3dd.c:771 src/dc3dd.c:777 src/dc3dd.c:781
+msgid "Unable to allocate space for threads"
msgstr ""
-#: src/dc3dd.c:1048
+#: src/dc3dd.c:1090
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "請嘗試執行‘%s --help’來獲取更多資訊。\n"
-#: src/dc3dd.c:1052
+#: src/dc3dd.c:1094
#, fuzzy, c-format
msgid ""
"Usage: %s [OPERAND]...\n"
@@ -66,16 +78,15 @@ msgstr ""
"用法:%s [檔案]...\n"
" 或:%s [選項]\n"
-#: src/dc3dd.c:1057
+#: src/dc3dd.c:1099
#, fuzzy
msgid ""
"Copy a file, converting and formatting according to the operands.\n"
"\n"
-" bs=BYTES force ibs=BYTES and obs=BYTES\n"
-" cbs=BYTES convert BYTES bytes at a time\n"
-" conv=CONVS convert the file as per the comma separated symbol list\n"
-" count=SECTORS copy only SECTORS input sectors\n"
-" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
+" bs=BYTES force ibs=BYTES and obs=BYTES\n"
+" conv=CONVS convert the file as per the comma separated symbol list\n"
+" count=SECTORS copy only SECTORS input sectors\n"
+" ibs=BYTES read BYTES bytes at a time (must be a multiple of input "
"sector size)\n"
msgstr ""
"複製檔案,並根據以下的選項將資料轉換和格式化。\n"
@@ -86,21 +97,24 @@ msgstr ""
" count=區段數目 只複製指定 <區段數目> 的輸入資料\n"
" ibs=位元組 每次讀取指定的 <位元組>\n"
-#: src/dc3dd.c:1066
+#: src/dc3dd.c:1107
#, fuzzy
msgid ""
-" if=FILE read from FILE instead of stdin\n"
-" ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n"
-" iflag=FLAGS read as per the comma separated symbol list\n"
-" pattern=HEX write HEX to every byte of the output\n"
-" textpattern=TEXT write the string TEXT repeatedly to the output\n"
-" obs=BYTES write BYTES bytes at a time\n"
-" of=FILE write to FILE instead of stdout\n"
-" of:=COMMAND pipe output to the given command\n"
-" oflag=FLAGS write as per the comma separated symbol list\n"
-" seek=SECTORS skip SECTORS input sectors at start of output\n"
-" skip=SECTORS skip SECTORS input sectors at start of input\n"
-" status=noxfer suppress transfer statistics\n"
+" if=FILE read from FILE instead of stdin\n"
+" ifjoin=BASE.FMT read from split files with name BASE and splitformat "
+"FMT\n"
+" iflag=FLAGS read as per the comma separated symbol list\n"
+" pattern=HEX write HEX to every byte of the output\n"
+" textpattern=TEXT write the string TEXT repeatedly to the output\n"
+" obs=BYTES write BYTES bytes at a time\n"
+" of=FILE write to FILE instead of stdout\n"
+" of:=COMMAND pipe output to the given command\n"
+" oflag=FLAGS write as per the comma separated symbol list\n"
+" wipe=FILE wipe device FILE with zeros (or specify pattern/"
+"textpattern)\n"
+" seek=SECTORS skip SECTORS input sectors at start of output\n"
+" skip=SECTORS skip SECTORS input sectors at start of input\n"
+" status=noxfer suppress transfer statistics\n"
msgstr ""
" if=檔案 讀取 <檔案> 內容而非標準輸入的資料\n"
" obs=位元組 每次寫入指定的 <位元組>\n"
@@ -109,52 +123,50 @@ msgstr ""
" skip=區段數目 先略過以 ibs 為單位的指定 <區段數目> 的輸入資料\n"
" status=noxfer 不顯示輸入/輸出結果\n"
-#: src/dc3dd.c:1080
+#: src/dc3dd.c:1122
msgid ""
-" split=BYTES split the output into pieces of size BYTES\n"
+" split=BYTES split the output into pieces of size BYTES\n"
" splitformat=FMT create extensions for split pieces using FMT\n"
-" Extensions can be numerical starting at zero,\n"
-" numerical starting at one, or alphabetical.\n"
-" These options are selected by using a series of\n"
-" zeros, ones, or a's, respectively. The number\n"
-" of characters used indicates the desired length of\n"
-" the extensions. For example, splitformat=1111\n"
-" indicates four character numerical extensions\n"
-" starting with 0001.\n"
-" progress=on displays a progress meter\n"
+" Extensions can be numerical starting at zero,\n"
+" numerical starting at one, or alphabetical.\n"
+" These options are selected by using a series of\n"
+" zeros, ones, or a's, respectively. The number\n"
+" of characters used indicates the desired length of\n"
+" the extensions. For example, splitformat=1111\n"
+" indicates four character numerical extensions\n"
+" starting with 0001.\n"
+" progress=on displays a progress meter\n"
" progresscount=NUM number of blocks processed between each progress "
"update\n"
-" sizeprobe=on estimates size of input file for use with status\n"
-" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
-" hashconv=WHEN determines when data should be hashed, either before\n"
-" or after conversions\n"
+" sizeprobe=on estimates size of input file for use with status\n"
+" hash=ALGORITHM computes ALGORITHM hashes of the input data\n"
msgstr ""
-#: src/dc3dd.c:1102
+#: src/dc3dd.c:1142
msgid ""
" hashwindow=BYTES number of bytes for piecewise hashing\n"
-" hashlog=FILE appends piecewise hashes to the log file\n"
-" errlog=FILE appends errors to the log file\n"
-" log=FILE appends hashes and errors to the same file\n"
-" errors=group group read errors together\n"
+" hashlog=FILE appends piecewise hashes to the log file\n"
+" errlog=FILE appends errors to the log file\n"
+" log=FILE appends hashes and errors to the same file\n"
+" errors=group group read errors together\n"
msgstr ""
-#: src/dc3dd.c:1109
+#: src/dc3dd.c:1149
msgid ""
-" vf=FILE verify the input against FILE\n"
-" vfjoin=BASE.FMT verify the input against split files with name BASE and "
+" vf=FILE verify the input against FILE\n"
+" vfjoin=BASE.FMT verify the input against split files with name BASE and "
"splitformat FMT\n"
-" verifylog=FILE write the results of the verify to the given file\n"
+" verifylog=FILE write the results of the verify to the given file\n"
msgstr ""
-#: src/dc3dd.c:1115
+#: src/dc3dd.c:1155
msgid ""
"\n"
"ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n"
"\n"
msgstr ""
-#: src/dc3dd.c:1120
+#: src/dc3dd.c:1160
msgid ""
"\n"
"BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n"
@@ -170,32 +182,12 @@ msgstr ""
"GB=1000*1000*1000,G=1024*1024*1024,還有 T/P/E/Z/Y 如此類推。\n"
"每個 <關鍵字> 可以是:\n"
-#: src/dc3dd.c:1129
-msgid ""
-" ascii from EBCDIC to ASCII\n"
-" ebcdic from ASCII to EBCDIC\n"
-" ibm from ASCII to alternate EBCDIC\n"
-" block pad newline-terminated records with spaces to cbs-size\n"
-" unblock replace trailing spaces in cbs-size records with newline\n"
-" lcase change upper case to lower case\n"
-msgstr ""
-" ascii 由 EBCDIC 轉換至 ASCII\n"
-" ebcdic 由 ASCII 轉換至 EBCDIC\n"
-" ibm 由 ASCII 轉換至 alternate EBCDIC\n"
-" block 將以 newline 作為結束字元的區段的 newline 換成空格,\n"
-" 直至空格填滿 cbs 表示的大小\n"
-" unblock 會將 cbs 大小的區段中所有結束的空格刪除,\n"
-" 並轉換為一個 newline 字元\n"
-" lcase 將大寫字元轉換為小寫\n"
-
-#: src/dc3dd.c:1137
+#: src/dc3dd.c:1169
#, fuzzy
msgid ""
" nocreat do not create the output file\n"
" excl fail if the output file already exists\n"
" notrunc do not truncate the output file\n"
-" ucase change lower case to upper case\n"
-" swab swap every pair of input bytes\n"
msgstr ""
" nocreat 輸出檔不存在的話不會寫出結果\n"
" excl 如果輸出檔已經存在則作為失敗處理\n"
@@ -208,7 +200,7 @@ msgstr ""
" fdatasync 真正將資料寫入磁碟後才結束程式\n"
" fsync 類似 fdatasync,並寫入元資料\n"
-#: src/dc3dd.c:1144
+#: src/dc3dd.c:1174
#, fuzzy
msgid ""
" noerror continue after read errors\n"
@@ -228,7 +220,7 @@ msgstr ""
" fdatasync 真正將資料寫入磁碟後才結束程式\n"
" fsync 類似 fdatasync,並寫入元資料\n"
-#: src/dc3dd.c:1151
+#: src/dc3dd.c:1181
msgid ""
"\n"
"Each FLAG symbol may be:\n"
@@ -237,52 +229,52 @@ msgid ""
"suggested)\n"
msgstr ""
-#: src/dc3dd.c:1158
+#: src/dc3dd.c:1188
msgid " direct use direct I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1160
+#: src/dc3dd.c:1190
#, fuzzy
msgid " directory fail unless a directory\n"
msgstr "建立目錄時不能指定目的地目錄"
-#: src/dc3dd.c:1162
+#: src/dc3dd.c:1192
msgid " dsync use synchronized I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1164
+#: src/dc3dd.c:1194
msgid " sync likewise, but also for metadata\n"
msgstr ""
-#: src/dc3dd.c:1166
+#: src/dc3dd.c:1196
msgid " nonblock use non-blocking I/O\n"
msgstr ""
-#: src/dc3dd.c:1168
+#: src/dc3dd.c:1198
msgid " noatime do not update access time\n"
msgstr ""
-#: src/dc3dd.c:1170
+#: src/dc3dd.c:1200
msgid " noctty do not assign controlling terminal from file\n"
msgstr ""
-#: src/dc3dd.c:1173
+#: src/dc3dd.c:1203
msgid " nofollow do not follow symlinks\n"
msgstr ""
-#: src/dc3dd.c:1175
+#: src/dc3dd.c:1205
msgid " nolinks fail if multiply-linked\n"
msgstr ""
-#: src/dc3dd.c:1177
+#: src/dc3dd.c:1207
msgid " binary use binary I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1179
+#: src/dc3dd.c:1209
msgid " text use text I/O for data\n"
msgstr ""
-#: src/dc3dd.c:1183
+#: src/dc3dd.c:1213
#, fuzzy, c-format
msgid ""
"\n"
@@ -311,35 +303,29 @@ msgstr ""
"選項包括:\n"
"\n"
-#: src/dc3dd.c:1236
+#: src/dc3dd.c:1266
msgid "Unknown system error"
msgstr "不明的系統錯誤"
-#: src/dc3dd.c:1733 src/dc3dd.c:1740
+#: src/dc3dd.c:1953 src/dc3dd.c:1960
#, c-format
msgid ""
"%<PRIuMAX>+%<PRIuMAX> sectors in\n"
"%<PRIuMAX>+%<PRIuMAX> sectors out\n"
msgstr ""
-#: src/dc3dd.c:1748 src/dc3dd.c:1754
-#, fuzzy, c-format
-msgid "%<PRIuMAX> truncated record\n"
-msgid_plural "%<PRIuMAX> truncated records\n"
-msgstr[0] "個被截斷了的區段"
-
-#: src/dc3dd.c:1766
+#: src/dc3dd.c:1971
#, c-format
msgid "\n"
msgstr ""
-#: src/dc3dd.c:1788 src/dc3dd.c:1796
+#: src/dc3dd.c:1999 src/dc3dd.c:2007
#, fuzzy, c-format
msgid "%<PRIuMAX> byte (%s) %s"
msgid_plural "%<PRIuMAX> bytes (%s) %s"
msgstr[0] "複製了 %s 位元組 (%s)"
-#: src/dc3dd.c:1830
+#: src/dc3dd.c:2041
#, fuzzy
msgid "Infinity B"
msgstr "無限"
@@ -354,147 +340,155 @@ msgstr "無限"
#. but that was incorrect for languages like Polish. To fix this
#. bug we now use SI symbols even though they're a bit more
#. confusing in English.
-#: src/dc3dd.c:1843
+#: src/dc3dd.c:2054
#, fuzzy, c-format
msgid ", %g s, %s/s "
msgstr ",%g 秒,%s/s\n"
-#: src/dc3dd.c:1846
+#: src/dc3dd.c:2057
#, fuzzy, c-format
msgid ", %g s, %s/s\n"
msgstr ",%g 秒,%s/s\n"
-#: src/dc3dd.c:1903
+#: src/dc3dd.c:2139
#, c-format
msgid "closing input file %s"
msgstr "正在關閉輸入檔 %s"
-#: src/dc3dd.c:1910
+#: src/dc3dd.c:2146
#, c-format
msgid "closing output file %s"
msgstr "正在關閉輸出檔%s"
-#: src/dc3dd.c:2145
+#: src/dc3dd.c:2399
msgid "Unable to allocate filename"
msgstr ""
-#: src/dc3dd.c:2175
+#: src/dc3dd.c:2428
#, fuzzy
msgid "Split extensions exhausted"
msgstr "輸出檔的後置字串已用盡"
-#: src/dc3dd.c:2196 src/dc3dd.c:2437 src/dc3dd.c:2444 src/dc3dd.c:2452
-#: src/dc3dd.c:2553 src/dc3dd.c:4025 src/dc3dd.c:4067 src/dc3dd.c:4082
-#: src/dc3dd.c:4093
+#: src/dc3dd.c:2449 src/dc3dd.c:2698 src/dc3dd.c:2705 src/dc3dd.c:2713
+#: src/dc3dd.c:2809 src/dc3dd.c:3919 src/dc3dd.c:3970 src/dc3dd.c:3985
+#: src/dc3dd.c:3996
#, c-format
msgid "opening %s"
msgstr "開啟 %s 中"
-#: src/dc3dd.c:2209
+#: src/dc3dd.c:2462
msgid "Unable to allocate memory"
msgstr ""
-#: src/dc3dd.c:2224 src/dc3dd.c:2230
+#: src/dc3dd.c:2478 src/dc3dd.c:2484
#, fuzzy
msgid "Verify FAILED"
msgstr "錯誤"
-#: src/dc3dd.c:2284 src/dc3dd.c:3369
-#, c-format
-msgid "writing to %s"
-msgstr "正在寫入 %s"
-
-#: src/dc3dd.c:2411 src/dc3dd.c:2648
+#: src/dc3dd.c:2672 src/dc3dd.c:2908
#, c-format
msgid "unrecognized operand %s"
msgstr "無法識別參數 %s"
-#: src/dc3dd.c:2421 src/dc3dd.c:2428 src/dc3dd.c:2573
+#: src/dc3dd.c:2682 src/dc3dd.c:2689 src/dc3dd.c:2829 src/dc3dd.c:2962
#, fuzzy, c-format
msgid "illegal pattern %s"
msgstr "日期無效:‘%s’"
-#: src/dc3dd.c:2479
-#, c-format
-msgid "unknown hash convention %s"
-msgstr ""
-
-#: src/dc3dd.c:2500
+#: src/dc3dd.c:2748
msgid "It is pitch dark here. You are likely to be eaten by a grue."
msgstr ""
-#: src/dc3dd.c:2505
+#: src/dc3dd.c:2753
#, fuzzy, c-format
msgid "Illegal split format %s"
msgstr "%2$s的參數%1$s無效"
-#: src/dc3dd.c:2521 src/dc3dd.c:2542
+#: src/dc3dd.c:2768
#, c-format
-msgid "Illegal join format %s"
+msgid "Illegal ifjoin format %s - missing extension"
msgstr ""
-#: src/dc3dd.c:2557
+#: src/dc3dd.c:2773
+#, fuzzy, c-format
+msgid "Illegal ifjoin format %s"
+msgstr "%2$s的參數%1$s無效"
+
+#: src/dc3dd.c:2793
+#, c-format
+msgid "Illegal vfjoin format %s - missing extension"
+msgstr ""
+
+#: src/dc3dd.c:2798
+#, fuzzy, c-format
+msgid "Illegal vfjoin format %s"
+msgstr "%2$s的參數%1$s無效"
+
+#: src/dc3dd.c:2813
#, c-format
msgid "%s not implemented yet"
msgstr ""
-#: src/dc3dd.c:2582
+#: src/dc3dd.c:2847
#, fuzzy
msgid "invalid conversion"
msgstr "轉換用的關鍵字無效:%s"
-#: src/dc3dd.c:2585
+#: src/dc3dd.c:2850
#, fuzzy
msgid "invalid input flag"
msgstr "輸入旗標無效:%s"
-#: src/dc3dd.c:2588
+#: src/dc3dd.c:2853
#, fuzzy
msgid "invalid output flag"
msgstr "輸出旗標無效:%s"
-#: src/dc3dd.c:2591
+#: src/dc3dd.c:2856
#, fuzzy
msgid "invalid status flag"
msgstr "狀態旗標無效:%s"
-#: src/dc3dd.c:2653
+#: src/dc3dd.c:2913
#, c-format
msgid "invalid number %s"
msgstr "數字 %s 無效"
-#: src/dc3dd.c:2680
-msgid "cannot combine any two of {ascii,ebcdic,ibm}"
-msgstr "不可同時使用 ascii, ebcdic, ibm 中的任何二個"
-
-#: src/dc3dd.c:2682
-msgid "cannot combine block and unblock"
-msgstr "不可同時使用 block 和 unblock"
-
-#: src/dc3dd.c:2684
-msgid "cannot combine lcase and ucase"
-msgstr "不可同時使用 lcase 和 ucase"
-
-#: src/dc3dd.c:2686
+#: src/dc3dd.c:2938
msgid "cannot combine excl and nocreat"
msgstr "不可同時使用 excl 和 nocreat"
-#: src/dc3dd.c:2690
+#: src/dc3dd.c:2941
#, fuzzy
msgid "cannot combine if= and ifjoin="
msgstr "如果自行指定權限,不可同時配合 --reference 選項一起使用"
-#: src/dc3dd.c:2693
+#: src/dc3dd.c:2944
#, fuzzy
msgid "cannot combine vf= and vfjoin="
msgstr "如果自行指定權限,不可同時配合 --reference 選項一起使用"
-#: src/dc3dd.c:2708
+#: src/dc3dd.c:2947
#, c-format
msgid "error: split size must be a multiple of block size (currently %zd)"
msgstr ""
-#: src/dc3dd.c:2970
+#: src/dc3dd.c:2950
+#, fuzzy
+msgid "cannot combine if= and wipe="
+msgstr "如果自行指定權限,不可同時配合 --reference 選項一起使用"
+
+#: src/dc3dd.c:2953
+#, fuzzy
+msgid "cannot combine wipe= and ifjoin="
+msgstr "如果自行指定權限,不可同時配合 --reference 選項一起使用"
+
+#: src/dc3dd.c:2955
+#, fuzzy
+msgid "cannot combine wipe= and vfjoin="
+msgstr "如果自行指定權限,不可同時配合 --reference 選項一起使用"
+
+#: src/dc3dd.c:3116
#, c-format
msgid ""
"warning: working around lseek kernel bug for file (%s)\n"
@@ -503,109 +497,132 @@ msgstr ""
"警告:暫時避免有關檔案 (%s) 的 lseek 核心錯誤,檔案的 mt_type=0x%0lx ─\n"
" 有關 mt_type 類型的清單請參考 <sys/mtio.h>"
-#: src/dc3dd.c:3019
+#: src/dc3dd.c:3165
#, fuzzy, c-format
msgid "skip: reading %s"
msgstr "讀取 %s"
-#: src/dc3dd.c:3027 src/dc3dd.c:3086 src/dc3dd.c:3133
+#: src/dc3dd.c:3173 src/dc3dd.c:3237
#, c-format
msgid "%s: cannot seek"
msgstr "%s:無法搜尋"
-#: src/dc3dd.c:3064 src/dc3dd.c:3109
+#: src/dc3dd.c:3210
#, c-format
msgid "offset overflow while reading file %s"
msgstr ""
-#: src/dc3dd.c:3077
+#: src/dc3dd.c:3228
#, fuzzy
msgid "advance: warning: invalid file offset after failed read"
msgstr "警告:寬度 %lu 是無效的;以 %d 代替"
-#: src/dc3dd.c:3082 src/dc3dd.c:3129
+#: src/dc3dd.c:3233
msgid "cannot work around kernel bug after all"
msgstr "無法避開系統核心的錯誤"
-#: src/dc3dd.c:3123
-#, fuzzy
-msgid "rewind: warning: invalid file offset after failed read"
-msgstr "警告:寬度 %lu 是無效的;以 %d 代替"
-
-#: src/dc3dd.c:3272
+#: src/dc3dd.c:3291
#, c-format
msgid "setting flags for %s"
msgstr ""
-#: src/dc3dd.c:3284
+#: src/dc3dd.c:3303
#, c-format
msgid "Recorded %<PRIuMAX> %s from sector %<PRIuMAX> through %<PRIuMAX>"
msgstr ""
-#: src/dc3dd.c:3507
-#, c-format
-msgid "reading %s at block %jd (sectors %jd-%jd)"
-msgstr ""
-
-#: src/dc3dd.c:3572 src/dc3dd.c:3694
+#: src/dc3dd.c:3337 src/dc3dd.c:3814
#, fuzzy, c-format
msgid "reading %s at sector %jd"
msgstr "無法建立目錄%s"
-#: src/dc3dd.c:3574
+#: src/dc3dd.c:3339
#, fuzzy, c-format
msgid "reading %s at sectors %jd-%jd"
msgstr "無法建立目錄%s"
-#: src/dc3dd.c:3789
-#, c-format
-msgid "error writing %s"
-msgstr "寫入 %s 時發生錯誤"
-
-#: src/dc3dd.c:3915
+#: src/dc3dd.c:3428 src/dc3dd.c:4155
#, c-format
-msgid "dd_copy() cleanup: nwritten mismatch writing %s"
-msgstr ""
+msgid "writing to %s"
+msgstr "正在寫入 %s"
-#: src/dc3dd.c:3935
+#: src/dc3dd.c:3490
#, c-format
msgid "fdatasync failed for %s"
msgstr "%s 的 fdatasync 失敗"
-#: src/dc3dd.c:3945
+#: src/dc3dd.c:3500
#, c-format
msgid "fsync failed for %s"
msgstr "%s 的 fsync 失敗"
-#: src/dc3dd.c:4013
+#: src/dc3dd.c:3907
msgid "standard input"
msgstr "標準輸出"
-#: src/dc3dd.c:4035
+#: src/dc3dd.c:3938
msgid "standard output"
msgstr "標準輸出"
-#: src/dc3dd.c:4103
+#: src/dc3dd.c:4016
#, c-format
msgid ""
"offset too large: cannot truncate to a length of seek=%<PRIuMAX> (%lu-byte) "
"sectors"
msgstr ""
-#: src/dc3dd.c:4118
+#: src/dc3dd.c:4031
#, c-format
msgid "cannot fstat %s"
msgstr "無法 fstat %s"
-#: src/dc3dd.c:4124
+#: src/dc3dd.c:4037
#, fuzzy, c-format
msgid "truncating at %<PRIuMAX> bytes in output file %s"
msgstr "略過輸出檔%2$s的最初 %1$s 個位元組"
-#: src/dc3dd.c:4222
+#: src/dc3dd.c:4131
msgid "Verify PASSED"
msgstr ""
+#~ msgid ""
+#~ " ascii from EBCDIC to ASCII\n"
+#~ " ebcdic from ASCII to EBCDIC\n"
+#~ " ibm from ASCII to alternate EBCDIC\n"
+#~ " block pad newline-terminated records with spaces to cbs-size\n"
+#~ " unblock replace trailing spaces in cbs-size records with newline\n"
+#~ " lcase change upper case to lower case\n"
+#~ msgstr ""
+#~ " ascii 由 EBCDIC 轉換至 ASCII\n"
+#~ " ebcdic 由 ASCII 轉換至 EBCDIC\n"
+#~ " ibm 由 ASCII 轉換至 alternate EBCDIC\n"
+#~ " block 將以 newline 作為結束字元的區段的 newline 換成空格,\n"
+#~ " 直至空格填滿 cbs 表示的大小\n"
+#~ " unblock 會將 cbs 大小的區段中所有結束的空格刪除,\n"
+#~ " 並轉換為一個 newline 字元\n"
+#~ " lcase 將大寫字元轉換為小寫\n"
+
+#, fuzzy
+#~ msgid "%<PRIuMAX> truncated record\n"
+#~ msgid_plural "%<PRIuMAX> truncated records\n"
+#~ msgstr[0] "個被截斷了的區段"
+
+#~ msgid "cannot combine any two of {ascii,ebcdic,ibm}"
+#~ msgstr "不可同時使用 ascii, ebcdic, ibm 中的任何二個"
+
+#~ msgid "cannot combine block and unblock"
+#~ msgstr "不可同時使用 block 和 unblock"
+
+#~ msgid "cannot combine lcase and ucase"
+#~ msgstr "不可同時使用 lcase 和 ucase"
+
+#, fuzzy
+#~ msgid "rewind: warning: invalid file offset after failed read"
+#~ msgstr "警告:寬度 %lu 是無效的;以 %d 代替"
+
+#~ msgid "error writing %s"
+#~ msgstr "寫入 %s 時發生錯誤"
+
#~ msgid "invalid argument %s for %s"
#~ msgstr "%2$s的參數%1$s無效"
@@ -5048,10 +5065,6 @@ msgstr ""
#~ msgid "couldn't open temporary file"
#~ msgstr "無法建立暫存檔"
-#, fuzzy
-#~ msgid "couldn't create process for %s -d"
-#~ msgstr "無法建立目錄%s"
-
#~ msgid "write failed"
#~ msgstr "寫入時發生錯誤"
diff --git a/src/Makefile.am b/src/Makefile.am
index 23e65ed..8aba745 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,8 +1,13 @@
-
bin_PROGRAMS = dc3dd
noinst_HEADERS = system.h
+if COND_USE_HDPARM
+dc3dd_SOURCES = dc3dd.c hdparm/hpa_dco.c hdparm/identify.c hdparm/sgio.c
+else
+dc3dd_SOURCES = dc3dd.c
+endif
+
AM_CPPFLAGS = -I$(top_srcdir)/lib
# Sometimes, the expansion of $(LIBINTL) includes -lc which may
@@ -10,6 +15,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/lib
# must precede $(LIBINTL) in order to ensure we use GNU getopt.
# But libcoreutils.a must also follow $(LIBINTL), since libintl uses
# replacement functions defined in libcoreutils.a.
-LDADD = ../lib/libcoreutils.a $(LIBINTL) ../lib/libcoreutils.a
+# TODO: is this the right place for -lpthread?
+LDADD = ../lib/libcoreutils.a $(LIBINTL) ../lib/libcoreutils.a -lpthread
-dc3dd_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC)
\ No newline at end of file
+dc3dd_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC)
diff --git a/src/Makefile.in b/src/Makefile.in
index 39902a2..a85abf1 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -83,9 +83,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/alloca.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \
- $(top_srcdir)/m4/host-os.m4 $(top_srcdir)/m4/human.m4 \
- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \
- $(top_srcdir)/m4/iconv_open.m4 $(top_srcdir)/m4/idcache.m4 \
+ $(top_srcdir)/m4/hdparm.m4 $(top_srcdir)/m4/host-os.m4 \
+ $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/iconv_h.m4 $(top_srcdir)/m4/iconv_open.m4 \
+ $(top_srcdir)/m4/idcache.m4 \
$(top_srcdir)/m4/include-exclude-prog.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
@@ -191,8 +192,13 @@ CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
-dc3dd_SOURCES = dc3dd.c
-dc3dd_OBJECTS = dc3dd.$(OBJEXT)
+am__dc3dd_SOURCES_DIST = dc3dd.c hdparm/hpa_dco.c hdparm/identify.c \
+ hdparm/sgio.c
+ at COND_USE_HDPARM_FALSE@am_dc3dd_OBJECTS = dc3dd.$(OBJEXT)
+ at COND_USE_HDPARM_TRUE@am_dc3dd_OBJECTS = dc3dd.$(OBJEXT) \
+ at COND_USE_HDPARM_TRUE@ hpa_dco.$(OBJEXT) identify.$(OBJEXT) \
+ at COND_USE_HDPARM_TRUE@ sgio.$(OBJEXT)
+dc3dd_OBJECTS = $(am_dc3dd_OBJECTS)
am__DEPENDENCIES_1 =
am__DEPENDENCIES_2 = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
../lib/libcoreutils.a
@@ -205,8 +211,8 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = dc3dd.c
-DIST_SOURCES = dc3dd.c
+SOURCES = $(dc3dd_SOURCES)
+DIST_SOURCES = $(am__dc3dd_SOURCES_DIST)
HEADERS = $(noinst_HEADERS)
ETAGS = etags
CTAGS = ctags
@@ -594,6 +600,7 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
U = @U@
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+USE_HDPARM = @USE_HDPARM@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VOID_UNSETENV = @VOID_UNSETENV@
@@ -661,6 +668,8 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
noinst_HEADERS = system.h
+ at COND_USE_HDPARM_FALSE@dc3dd_SOURCES = dc3dd.c
+ at COND_USE_HDPARM_TRUE@dc3dd_SOURCES = dc3dd.c hdparm/hpa_dco.c hdparm/identify.c hdparm/sgio.c
AM_CPPFLAGS = -I$(top_srcdir)/lib
# Sometimes, the expansion of $(LIBINTL) includes -lc which may
@@ -668,7 +677,8 @@ AM_CPPFLAGS = -I$(top_srcdir)/lib
# must precede $(LIBINTL) in order to ensure we use GNU getopt.
# But libcoreutils.a must also follow $(LIBINTL), since libintl uses
# replacement functions defined in libcoreutils.a.
-LDADD = ../lib/libcoreutils.a $(LIBINTL) ../lib/libcoreutils.a
+# TODO: is this the right place for -lpthread?
+LDADD = ../lib/libcoreutils.a $(LIBINTL) ../lib/libcoreutils.a -lpthread
dc3dd_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC)
all: all-am
@@ -737,6 +747,9 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dc3dd.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hpa_dco.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/identify.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sgio.Po at am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -752,6 +765,48 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+hpa_dco.o: hdparm/hpa_dco.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hpa_dco.o -MD -MP -MF $(DEPDIR)/hpa_dco.Tpo -c -o hpa_dco.o `test -f 'hdparm/hpa_dco.c' || echo '$(srcdir)/'`hdparm/hpa_dco.c
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/hpa_dco.Tpo $(DEPDIR)/hpa_dco.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hdparm/hpa_dco.c' object='hpa_dco.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hpa_dco.o `test -f 'hdparm/hpa_dco.c' || echo '$(srcdir)/'`hdparm/hpa_dco.c
+
+hpa_dco.obj: hdparm/hpa_dco.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hpa_dco.obj -MD -MP -MF $(DEPDIR)/hpa_dco.Tpo -c -o hpa_dco.obj `if test -f 'hdparm/hpa_dco.c'; then $(CYGPATH_W) 'hdparm/hpa_dco.c'; else $(CYGPATH_W) '$(srcdir)/hdparm/hpa_dco.c'; fi`
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/hpa_dco.Tpo $(DEPDIR)/hpa_dco.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hdparm/hpa_dco.c' object='hpa_dco.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hpa_dco.obj `if test -f 'hdparm/hpa_dco.c'; then $(CYGPATH_W) 'hdparm/hpa_dco.c'; else $(CYGPATH_W) '$(srcdir)/hdparm/hpa_dco.c'; fi`
+
+identify.o: hdparm/identify.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT identify.o -MD -MP -MF $(DEPDIR)/identify.Tpo -c -o identify.o `test -f 'hdparm/identify.c' || echo '$(srcdir)/'`hdparm/identify.c
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/identify.Tpo $(DEPDIR)/identify.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hdparm/identify.c' object='identify.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o identify.o `test -f 'hdparm/identify.c' || echo '$(srcdir)/'`hdparm/identify.c
+
+identify.obj: hdparm/identify.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT identify.obj -MD -MP -MF $(DEPDIR)/identify.Tpo -c -o identify.obj `if test -f 'hdparm/identify.c'; then $(CYGPATH_W) 'hdparm/identify.c'; else $(CYGPATH_W) '$(srcdir)/hdparm/identify.c'; fi`
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/identify.Tpo $(DEPDIR)/identify.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hdparm/identify.c' object='identify.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o identify.obj `if test -f 'hdparm/identify.c'; then $(CYGPATH_W) 'hdparm/identify.c'; else $(CYGPATH_W) '$(srcdir)/hdparm/identify.c'; fi`
+
+sgio.o: hdparm/sgio.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sgio.o -MD -MP -MF $(DEPDIR)/sgio.Tpo -c -o sgio.o `test -f 'hdparm/sgio.c' || echo '$(srcdir)/'`hdparm/sgio.c
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sgio.Tpo $(DEPDIR)/sgio.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hdparm/sgio.c' object='sgio.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sgio.o `test -f 'hdparm/sgio.c' || echo '$(srcdir)/'`hdparm/sgio.c
+
+sgio.obj: hdparm/sgio.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sgio.obj -MD -MP -MF $(DEPDIR)/sgio.Tpo -c -o sgio.obj `if test -f 'hdparm/sgio.c'; then $(CYGPATH_W) 'hdparm/sgio.c'; else $(CYGPATH_W) '$(srcdir)/hdparm/sgio.c'; fi`
+ at am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sgio.Tpo $(DEPDIR)/sgio.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hdparm/sgio.c' object='sgio.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sgio.obj `if test -f 'hdparm/sgio.c'; then $(CYGPATH_W) 'hdparm/sgio.c'; else $(CYGPATH_W) '$(srcdir)/hdparm/sgio.c'; fi`
+
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
diff --git a/src/dc3dd.c b/src/dc3dd.c
index a1de399..5f78239 100644
--- a/src/dc3dd.c
+++ b/src/dc3dd.c
@@ -1,1285 +1,478 @@
-/* dd -- convert a file while copying it.
- Copyright (C) 85, 90, 91, 1995-2008 Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-/* Written by Paul Rubin, David MacKenzie, and Stuart Kemp. */
-
-#include <config.h>
-
-#define SWAB_ALIGN_OFFSET 2
-
+// dc3dd -- a dd for digital forensics.
+// Copyright (C) 85, 90, 91, 1995-2009 Free Software Foundation, Inc.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+//-------------------------
+// INCLUDES
+//-------------------------
+
+#include <config.h> // NOTE: "config.h" must be first include
#include <sys/types.h>
#include <signal.h>
#include <getopt.h>
-
+#include <stdarg.h>
+#include <pthread.h>
#include "system.h"
#include "error.h"
-#include "fd-reopen.h"
-#include "gethrxtime.h"
+#include "gethrxtime.h"
#include "human.h"
#include "long-options.h"
#include "quote.h"
#include "quotearg.h"
#include "xstrtol.h"
#include "xtime.h"
-
#include "md5.h"
#include "sha1.h"
#include "sha256.h"
#include "sha512.h"
-#include <stdarg.h>
+#ifdef __linux__
+ #include <sys/mount.h>
+ # include <sys/mtio.h>
+ #ifdef USE_HDPARM
+ #include <linux/types.h>
+ #include "hdparm/hpa_dco.h"
+ #endif
+#elif defined (__APPLE__)
+ #include <sys/disk.h>
+ #include <sys/ioctl.h>
+#elif defined (__CYGWIN__)
+ #include <sys/ioctl.h>
+ #include <cygwin/types.h>
+ #include <cygwin/fs.h>
+#endif
-static void process_signals (void);
+//-------------------------
+// #DEFINES
+//-------------------------
-/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "dc3dd"
#define AUTHORS \
- proper_name ("Paul Rubin"), \
- proper_name ("David MacKenzie"), \
- proper_name ("Stuart Kemp"), \
- "patched for DC3 by Jesse Kornblum and Andrew Medico"
-
-/* Use SA_NOCLDSTOP as a proxy for whether the sigaction machinery is
- present. SA_NODEFER and SA_RESETHAND are XSI extensions. */
-#ifndef SA_NOCLDSTOP
-# define SA_NOCLDSTOP 0
-# define sigprocmask(How, Set, Oset) /* empty */
-# define sigset_t int
-# if ! HAVE_SIGINTERRUPT
-# define siginterrupt(sig, flag) /* empty */
-# endif
-#endif
-#ifndef SA_NODEFER
-# define SA_NODEFER 0
-#endif
-#ifndef SA_RESETHAND
-# define SA_RESETHAND 0
-#endif
-
-#ifndef SIGINFO
-# define SIGINFO SIGUSR1
-#endif
-
-#if ! HAVE_FDATASYNC
-# define fdatasync(fd) (errno = ENOSYS, -1)
-#endif
-
-#define max(a, b) ((a) > (b) ? (a) : (b))
-#define output_char(c) \
- do \
- { \
- obuf[oc++] = (c); \
- if (oc >= output_blocksize) \
- write_output (); \
- } \
- while (0)
-
-/* Default input and output blocksize. */
-#ifndef DEFAULT_BLOCKSIZE
-# define DEFAULT_BLOCKSIZE 32768
-#endif
-
-/* How many bytes to add to the input and output block sizes before invoking
- malloc. See dd_copy for details. INPUT_BLOCK_SLOP must be no less than
- OUTPUT_BLOCK_SLOP. */
-#define INPUT_BLOCK_SLOP (2 * SWAB_ALIGN_OFFSET + 2 * page_size - 1)
-#define OUTPUT_BLOCK_SLOP (page_size - 1)
-
-/* Maximum blocksize for the given SLOP.
- Keep it smaller than SIZE_MAX - SLOP, so that we can
- allocate buffers that size. Keep it smaller than SSIZE_MAX, for
- the benefit of system calls like "read". And keep it smaller than
- OFF_T_MAX, for the benefit of the large-offset seek code. */
-#define MAX_BLOCKSIZE(slop) MIN (SIZE_MAX - (slop), MIN (SSIZE_MAX, OFF_T_MAX))
-
-/* Conversions bit masks. */
-enum
- {
- C_ASCII = 01,
-
- C_EBCDIC = 02,
- C_IBM = 04,
- C_BLOCK = 010,
- C_UNBLOCK = 020,
- C_LCASE = 040,
- C_UCASE = 0100,
- C_SWAB = 0200,
- C_NOERROR = 0400,
- C_NOTRUNC = 01000,
- C_SYNC = 02000,
-
- /* Use separate input and output buffers, and combine partial
- input blocks. */
- C_TWOBUFS = 04000,
-
- C_NOCREAT = 010000,
- C_EXCL = 020000,
- C_FDATASYNC = 040000,
- C_FSYNC = 0100000,
-
- C_DYNAMIC = 0200000
- };
-
-/* Status bit masks. */
-enum
- {
- STATUS_NOXFER = 01
- };
-
-/* The name this program was run with. */
-char *program_name;
-
-// TODO: need to resolve the desire for input_file/output_file to be
-// const, with the fact that split/join modify the values
-/* The name of the input file, or NULL for the standard input. */
-static char /*const*/ *input_file = NULL;
-
-/* The name of the output file, or NULL for the standard output. */
-static char /*const*/ *output_file = NULL;
-
-/* The page size on this host. */
-static size_t page_size;
-
-/* The number of bytes in which atomic reads are done. */
-static size_t input_blocksize = 0;
-
-/* The number of bytes in which atomic writes are done. */
-static size_t output_blocksize = 0;
-
-/* The sector size of the applicable device
- * (input device normally; output device when in pattern mode) */
-static size_t dc3_sectorsize = 0;
-
-static size_t dc3_small_read = 0;
-
-/* Conversion buffer size, in bytes. 0 prevents conversions. */
-static size_t conversion_blocksize = 0;
-
-/* Skip this many records of `input_blocksize' bytes before input. */
-static uintmax_t skip_sectors = 0;
-
-/* Skip this many records of `output_blocksize' bytes before output. */
-static uintmax_t seek_sectors = 0;
+ proper_name("Paul Rubin"), \
+ proper_name("David MacKenzie"), \
+ proper_name("Stuart Kemp"), \
+ proper_name("Jesse Kornblum"), \
+ proper_name("Andrew Medico"), \
+ proper_name("Richard Cordovano")
+
+// Keep it smaller than SIZE_MAX - alignment add-on bytes, to allow
+// allocating buffers that size. Keep it smaller than SSIZE_MAX, for the
+// benefit of system calls like read(). And keep it smaller than OFF_T_MAX,
+// for the benefit of lseek().
+#define MAX_BLOCKSIZE() MIN (SIZE_MAX - (2 * getpagesize() - 1), MIN (SSIZE_MAX, OFF_T_MAX))
+
+#define STRINGIFY(s) #s
+#define AS_STRING(s) STRINGIFY(s)
+
+#define DC3DD_ASSERT(c) {if (!(c)) report_program_error((#c));}
+
+//-------------------------
+// CONSTANTS
+//-------------------------
+
+static const size_t DEFAULT_SECTOR_SIZE = 512;
+static const size_t DEFAULT_BUFFER_SIZE = 32768;
+static const uint8_t NUM_BUFFERS = 64;
+static const uint8_t NUM_HASHES = 4;
+static const uintmax_t INFINITE_BYTES = (uintmax_t)-1;
+static const uintmax_t INFINITE_SECTORS = (uintmax_t)-1;
+static const mode_t OUTPUT_FILE_PERMS = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
+static const int FILE_DESCRIPTOR_NOT_SET = -2;
+static const size_t DISPLAY_MESSAGE_LENGTH = 4096;
+static const long int JOB_PROGRESS_INTERVAL_MILLISECS = 100;
+
+//-------------------------
+// ENUMS
+//-------------------------
+
+enum IO_STATE
+{
+ PENDING,
+ OPEN,
+ COMPLETE,
+ FATAL_ERROR
+};
-/* Copy only this many records. The default is effectively infinity. */
-static uintmax_t max_sectors = (uintmax_t) -1;
+enum EXIT_CODE
+{
+ DC3DD_EXIT_CODE_NOT_SET = -1,
+ DC3DD_EXIT_COMPLETED,
+ DC3DD_EXIT_ABORTED,
+ DC3DD_EXIT_FAILED,
+};
-/* Bit vector of conversions to apply. */
-static int conversions_mask = 0;
+//-------------------------
+// TYPEDEFS
+//-------------------------
-/* Open flags for the input and output files. */
-static int input_flags = 0;
-static int output_flags = 0;
+typedef struct _file_t
+{
+ char* unparsed_name;
+ char* name;
+ uintmax_t number;
+ int flags;
+ int descriptor;
+ bool probed;
+ intmax_t offset;
+ bool is_device;
+ bool is_block_device;
+ uintmax_t probed_size_in_bytes;
+ uintmax_t probed_size_in_sectors;
+ size_t probed_sector_size;
+ uintmax_t size_in_bytes;
+ bool part_of_set;
+ bool verify_requested;
+ struct _file_t* next_file;
+}
+file_t;
+
+typedef struct _settings_t
+{
+ char* input_pattern_string;
+ char* input_pattern;
+ size_t input_pattern_length;
+ file_t* input_file;
+ file_t* output_files;
+ file_t* wipe_target;
+ size_t sector_size;
+ const char* sector_size_source;
+ size_t buffer_size;
+ uintmax_t input_sectors_to_skip;
+ uintmax_t output_sectors_to_skip;
+ uintmax_t max_sectors_to_input;
+ uintmax_t max_output_file_size;
+ bool recover_errors;
+ bool splitting_output;
+ bool verifying_output;
+ bool append_output;
+ bool corrupt_output;
+}
+settings_t;
+
+typedef void hash_init_func_t(void* ctx);
+typedef void hash_update_func_t(const void* buf, size_t len, void* ctx);
+typedef void hash_finish_func_t(void* ctx, void* buf);
+
+typedef struct _hash_algorithm_t
+{
+ bool active;
+ char* name;
+ size_t context_size;
+ size_t sum_size;
+ hash_init_func_t* init;
+ hash_update_func_t* update;
+ hash_finish_func_t* finish;
+}
+hash_algorithm_t;
-/* Status flags for what is printed to stderr. */
-static int status_flags = 0;
+typedef struct _hash_t
+{
+ hash_algorithm_t* algorithm;
+ void* context;
+ char* sum;
+ char* result;
+ uintmax_t bytes_hashed;
+ struct _hash_t* current_piece;
+ struct _hash_t* pieces;
+ uintmax_t piecewise_hash_length;
+ struct _hash_t* next_hash;
+}
+hash_t;
-/* If nonzero, filter characters through the translation table. */
-static bool translation_needed = false;
+typedef struct _buffer_t
+{
+ char* data;
+ size_t length;
+}
+buffer_t;
-/* Number of partial blocks read. */
-static uintmax_t r_partial = 0;
+typedef struct _buffer_queue_t
+{
+ buffer_t* buffers;
+ uint number_of_buffers;
+ uint buffers_used;
+ uint next_available_buffer;
+ pthread_mutex_t* lock;
+ pthread_cond_t* not_empty;
+ pthread_cond_t* not_full;
+ bool done_buffering;
+}
+buffer_queue_t;
-/* Number of full blocks read. */
-static uintmax_t r_full = 0;
+typedef struct _input_t
+{
+ enum IO_STATE state;
+ size_t buffer_size;
+ buffer_t buffer;
+ size_t sector_size;
+ uintmax_t max_sectors_to_input;
+ uintmax_t bytes_to_input;
+ uintmax_t bytes_input;
+ file_t* current_file;
+ file_t* files;
+ uintmax_t sectors_to_skip;
+ uintmax_t current_sector;
+ bool recover_errors;
+ int current_errno;
+ uintmax_t current_errno_count;
+ uintmax_t current_errno_start_sector;
+ uintmax_t bad_sectors;
+ char* pattern_string;
+ char* pattern;
+ size_t pattern_length;
+ void (*open)(struct _input_t* input);
+ void (*produce_bytes)(struct _input_t* input);
+ void (*close)(struct _input_t* input);
+}
+input_t;
-/* Number of bytes written. */
-static uintmax_t w_bytes = 0;
+typedef struct _output_t
+{
+ enum IO_STATE state;
+ pthread_t thread;
+ size_t sector_size;
+ uintmax_t buffer_size;
+ buffer_queue_t* buffer_queue;
+ uintmax_t bytes_output;
+ hash_t* hash;
+ file_t* current_file;
+ file_t* files;
+ uintmax_t max_file_size;
+ uintmax_t sectors_to_skip;
+ bool append_garbage_bytes;
+ void (*open)(struct _output_t* output);
+ void (*consume_bytes)(struct _output_t* output, buffer_t* buffer);
+ void (*close)(struct _output_t* output);
+ struct _output_t* expected_hashes;
+ struct _output_t* actual_hashes;
+ struct _output_t* next_output;
+}
+output_t;
-/* Number of bytes in input file */
-static uintmax_t input_bytes = 0;
+typedef struct _task_t
+{
+ pthread_t thread;
+ pthread_mutex_t* signalling_lock;
+ input_t* input;
+ output_t* outputs;
+ bool completed;
+ bool aborted;
+ enum EXIT_CODE exit_code;
+ struct _task_t* next_task;
+}
+task_t;
-static uintmax_t dc3_sectors_w_partial = 0;
-static uintmax_t dc3_sectors_w_full = 0;
-static uintmax_t dc3_sectors_r_partial = 0;
-static uintmax_t dc3_sectors_r_full = 0;
+typedef struct _job_t
+{
+ pthread_t monitor_thread;
+ task_t* tasks;
+ long int progress_interval_in_ms;
+ void (*report_progress)(struct _job_t* job, bool final);
+ enum EXIT_CODE exit_code;
+ struct _job_t* next_job;
+}
+job_t;
-/* Whether or not we should probe the input file and get its size */
-#ifdef DEFAULT_SIZEPROBE
- static bool dc3_sizeprobe = true;
-#else
- static bool dc3_sizeprobe = false;
-#endif
+//-------------------------
+// GLOBAL VARIABLES
+//-------------------------
-/* Time that dd started. */
+char* program_name = NULL;
static xtime_t start_time;
-
-/* True if input is seekable. */
-static bool input_seekable;
-
-/* True if we're wiping a device */
-static bool dc3_mode_wipe = false;
-
-/* True if we're verifying the output file */
-static bool dc3_mode_verify = false;
-
-
-/* True if we should be combining error messages */
-static bool dc3_group_errors = false;
-
-/* True if the last read was an error */
-static bool dc3_previous_error = false;
-
-/* Number of previous reads that were errors */
-static uintmax_t dc3_previous_error_count = 0;
-
-/* Previous error encountered */
-static int dc3_previous_error_errno = 0;
-
-
-/* True if we're piping the output to another process */
-static bool dc3_pipe_output = false;
-
-/* True if we are splitting the output file */
-static bool dc3_split = false;
-
-/* Number of bytes that should be written to each split file */
-uintmax_t dc3_split_bytes = 0;
-
-/* Number of bytes written to the current split file */
-uintmax_t dc3_split_current = 0;
-
-/* Format for split files */
-char * dc3_split_format = "000";
-
-/* Current number of split files */
-uintmax_t dc3_split_number = 0;
-
-/* Current filename being written to */
-char * dc3_split_filename = NULL;
-
-// ifjoin state
-static bool dc3_ifjoin = false; // Are we reading in split files?
-char* dc3_ifjoin_base = NULL; // Base name for reading in split files
-char* dc3_ifjoin_ext = NULL; // splitformat for reading in split files
-uintmax_t dc3_ifjoin_number = 0; // Current index of input split file
-static bool dc3_ifjoin_done = false; // True if we closed the last input split file
-
-// vfjoin state
-static bool dc3_vfjoin = false; // Are we verifying split files?
-char* dc3_vfjoin_base = NULL; // Base name for verifying split files
-char* dc3_vfjoin_ext = NULL; // splitformat for verifying split files
-uintmax_t dc3_vfjoin_number = 0; // Current index of verify split file
-
-/* True if we need to compute hashes */
-static bool dc3_hash = false;
-
-/* True if the user has already specified a hash algorithm to use */
-static bool dc3_hash_manual = false;
-
-/* Bytes to use for each piecewise hash */
-uintmax_t dc3_hash_window = 0;
-
-/* Bytes read in the current piecewise hash */
-uintmax_t dc3_hash_current = 0;
-
-/* True if we need to compute hashes before copy (hashconv=before) */
-#ifdef DEFAULT_HASHCONV_BEFORE
- static bool dc3_hash_before = true;
-#else
-# ifdef DEFAULT_HASHCONV_AFTER
- static bool dc3_hash_before = false;
-# else
- static bool dc3_hash_before = true;
-# endif
+static FILE* log = NULL;
+static FILE* hash_log = NULL;
+static bool progress_displayed = false;
+static pthread_mutex_t signalling_lock;
+static pthread_cond_t* interrupted = 0;
+
+#ifdef DEFAULT_VERBOSE_REPORTING
+static bool verbose_reporting = true;
+#else
+static bool verbose_reporting = false;
#endif
-/* Holds data used to update each hash */
-static char * dc3_hash_buffer;
-
-
-/* External log for hashes */
-FILE * hash_log = NULL;
-
-/* External log for errors */
-FILE * error_log = NULL;
-
-
-/* True if we need to display status messages */
-#ifdef DEFAULT_PROGRESS
- static bool dc3_progress = true;
+#ifdef DEFAULT_COMPACT_REPORTING
+static bool compact_reporting = true;
#else
- static bool dc3_progress = false;
+static bool compact_reporting = false;
#endif
-/* Becomes true once a progress message has been printed */
-static bool dc3_progress_printed = false;
-
-/* Number of blocks counted before a progress count is displayed */
-#ifdef DEFAULT_PROGRESSCOUNT
- static uintmax_t dc3_progress_count = (uintmax_t)DEFAULT_PROGRESSCOUNT;
+#ifdef DEFAULT_BASE_TEN_BYTES_REPORTING
+static int progress_bytes_reporting_flag = 0;
#else
- static uintmax_t dc3_progress_count = 0;
+static int progress_bytes_reporting_flag = human_base_1024;
#endif
-/* Number of blocks read since the last progress message was displayed */
-static uintmax_t dc3_progress_current = 0;
+// A single lock is used for both the logs and the console so that the order of
+// output will be the same everywhere.
+static pthread_mutex_t reporting_lock;
-
-/* True if we're using a pattern as input */
-static bool dc3_use_pattern = false;
-
-enum
- {
- DC3_EXIT_COMPLETE = 01,
- DC3_EXIT_ABORTED = 02,
- DC3_EXIT_FAILED = 04
- };
-
-static int dc3_exit_reason = 0;
-
-
-/* We use the following datatype to keep track of the state of
- the various hashing algorithms.
-
- To add a new algorithm:
-
- 1. Increment DC3_NUM_HASHES
-
- 2. Add the appropriate definition to dc3_hashinfo.
- This includes the size of the hash sum (i.e. the size
- of the hash in bytes, bit length divided by eight),
- the size of the internal hash state structure,
- and the functions necessary to initialize, update,
- and finalize the hash.
-*/
-
-
-/* State for hashing algorihtms */
-typedef struct _dc3_hashtype_t {
- bool inuse;
-
- /* The name of the hash algorithm, e.g. "md5" */
- char * name;
-
- /* We have to keep separate contexts for the current window of
- data being hashed and the overall file. These blocks start
- at different points. */
- void * ctx_window;
- void * ctx_total;
-
- /* We can get away with just one sum and result buffer, however,
- as these get computed at separate times for the current window
- and the file as a whole. */
- char * sum;
- char * result;
-
- /* The sum_size is used to compute the size of the result.
- Size of Result = 2 * sum_size */
- size_t sum_size;
-
- /* Size of the internal data structures stored in ctx_window and
- and ctx_total. This is used to allocate memory. */
- size_t ctx_size;
-
- /* Number of bytes processed in total. Used to compute the
- start and stop points for each hash window. */
- uintmax_t total;
-
- void (*init)(void *);
- void (*update)(const void *, size_t, void *);
- void (*final)(void *, void *);
-
-} dc3_hashtype_t;
-
-
-#define DC3_NUM_HASHES 4
-
-static dc3_hashtype_t dc3_hashinfo[DC3_NUM_HASHES] =
- {
- {
-#ifdef DEFAULT_HASH_MD5
+static hash_algorithm_t hash_algorithms[] =
+{
+ {
+ #ifdef DEFAULT_HASH_MD5
true,
-#else
+ #else
false,
-#endif
+ #endif
"md5",
- NULL,
- NULL,
- NULL,
- NULL,
- 16,
sizeof(struct md5_ctx),
- 0,
- (void (*)(void *))md5_init_ctx,
- (void (*)(const void *, size_t, void *))md5_process_bytes,
- (void (*)(void *, void *))md5_finish_ctx},
+ 16,
+ (hash_init_func_t*)md5_init_ctx,
+ (hash_update_func_t*)md5_process_bytes,
+ (hash_finish_func_t*)md5_finish_ctx,
+ },
{
-#ifdef DEFAULT_HASH_SHA1
+ #ifdef DEFAULT_HASH_SHA1
true,
-#else
+ #else
false,
-#endif
+ #endif
"sha1",
- NULL,
- NULL,
- NULL,
- NULL,
- 20,
sizeof(struct sha1_ctx),
- 0,
- (void (*)(void *))sha1_init_ctx,
- (void (*)(const void *, size_t, void *))sha1_process_bytes,
- (void (*)(void *, void *))sha1_finish_ctx},
+ 20,
+ (hash_init_func_t*)sha1_init_ctx,
+ (hash_update_func_t*)sha1_process_bytes,
+ (hash_finish_func_t*)sha1_finish_ctx,
+ },
{
-#ifdef DEFAULT_HASH_SHA256
+ #ifdef DEFAULT_HASH_SHA256
true,
-#else
+ #else
false,
-#endif
+ #endif
"sha256",
- NULL,
- NULL,
- NULL,
- NULL,
- 32,
sizeof(struct sha256_ctx),
- 0,
- (void (*)(void *))sha256_init_ctx,
- (void (*)(const void *, size_t, void *))sha256_process_bytes,
- (void (*)(void *, void *))sha256_finish_ctx},
+ 32,
+ (hash_init_func_t*)sha256_init_ctx,
+ (hash_update_func_t*)sha256_process_bytes,
+ (hash_finish_func_t*)sha256_finish_ctx,
+ },
{
-#ifdef DEFAULT_HASH_SHA512
+ #ifdef DEFAULT_HASH_SHA512
true,
-#else
+ #else
false,
-#endif
+ #endif
"sha512",
- NULL,
- NULL,
- NULL,
- NULL,
- 64,
sizeof(struct sha512_ctx),
- 0,
- (void (*)(void *))sha512_init_ctx,
- (void (*)(const void *, size_t, void *))sha512_process_bytes,
- (void (*)(void *, void *))sha512_finish_ctx}
- };
-
-
-static void
-dc3_error(int status, int errnum, const char *message, ...);
-
-void dc3_exit_msg();
-
-static void dc3_parse_hash(const char *val)
-{
- bool done = false;
- uint8_t i;
- char *new;
-
- /* If there have been algorithms specified using the configure
- script (e.g. -DDEFAULT_HASH_MD5), we want to clear those
- *unless* this is the second time through this function.
- (e.g. the user called hash=md5 hash=sha1). */
- if (!dc3_hash_manual)
- {
- for (i = 0 ; i < DC3_NUM_HASHES ; i++)
- dc3_hashinfo[i].inuse = false;
- }
- dc3_hash_manual = true;
-
- do {
- new = strchr(val,',');
- if (NULL == new)
- done = true;
- else
- *new = 0;
-
- for (i = 0 ; i < DC3_NUM_HASHES ; i++)
- {
- if (STREQ(dc3_hashinfo[i].name,val))
- {
- dc3_hashinfo[i].inuse = true;
- break;
- }
- }
- if (DC3_NUM_HASHES == i)
- dc3_error(EXIT_FAILURE,0,_("Unknown hash algorithm %s"), quote(val));
-
- val = new+1;
- } while (!done);
-}
-
-static void
-dc3_hash_init_algorithm(uint8_t i)
-{
- dc3_hashinfo[i].ctx_window = malloc(dc3_hashinfo[i].ctx_size);
- dc3_hashinfo[i].ctx_total = malloc(dc3_hashinfo[i].ctx_size);
- dc3_hashinfo[i].sum = malloc(dc3_hashinfo[i].sum_size);
- dc3_hashinfo[i].result = malloc(2 * dc3_hashinfo[i].sum_size + 1);
-
- if (NULL == dc3_hashinfo[i].ctx_window ||
- NULL == dc3_hashinfo[i].ctx_total ||
- NULL == dc3_hashinfo[i].sum ||
- NULL == dc3_hashinfo[i].result)
- dc3_error(EXIT_FAILURE,0,_("Unable to allocate space for hashes"));
-
- dc3_hash_current = 0;
-
- dc3_hashinfo[i].init(dc3_hashinfo[i].ctx_window);
- dc3_hashinfo[i].init(dc3_hashinfo[i].ctx_total);
-}
-
-
-static void
-dc3_hash_init(void)
-{
- uint8_t i;
-
- if (NULL == hash_log)
- hash_log = stderr;
-
- for (i = 0 ; i < DC3_NUM_HASHES ; ++i)
- {
- if (dc3_hashinfo[i].inuse)
- dc3_hash_init_algorithm(i);
- }
-}
-
-
-
-static void
-dc3_hash_update_total(uint8_t i, char *buf, size_t len)
-{
- memcpy(dc3_hash_buffer,buf,len);
- dc3_hashinfo[i].update(dc3_hash_buffer,len,dc3_hashinfo[i].ctx_total);
-}
-
-
-static void
-dc3_hash_result(uint8_t i)
-{
- size_t p;
- static char hex[] = "0123456789abcdef";
-
- for (p = 0; p < dc3_hashinfo[i].sum_size ; p++)
- {
- dc3_hashinfo[i].result[2 * p] = hex[(dc3_hashinfo[i].sum[p] >> 4) & 0xf];
- dc3_hashinfo[i].result[2 * p + 1] = hex[dc3_hashinfo[i].sum[p] & 0xf];
- }
-
- dc3_hashinfo[i].result[2 * dc3_hashinfo[i].sum_size] = 0;
-}
-
-static void
-dc3_hash_display_window_print(uint8_t i, FILE* file)
-{
- fprintf(file,"%s %"PRIuMAX"- %"PRIuMAX": %s\n",
- dc3_hashinfo[i].name,
- dc3_hashinfo[i].total - dc3_hash_current,
- dc3_hashinfo[i].total,
- dc3_hashinfo[i].result);
- fflush(file);
-}
-
-static void
-dc3_hash_display_window(uint8_t i)
-{
- dc3_hash_result(i);
-
- // TODO: really, this only needs to be done before the *first* hash line, but it shouldn't hurt to do it for each one
- fprintf(stderr, " \r");
- dc3_hash_display_window_print(i, stderr);
- if (hash_log != stderr)
- dc3_hash_display_window_print(i, hash_log);
-}
-
-static void
-dc3_hash_display_final_print(uint8_t i, FILE* file)
-{
- fprintf(file,"%s TOTAL: %s\n",
- dc3_hashinfo[i].name,
- dc3_hashinfo[i].result);
- fflush(file);
-}
-
-static void
-dc3_hash_display_final(uint8_t i)
-{
- dc3_hash_result(i);
-
- dc3_hash_display_final_print(i, stderr);
- if (hash_log != stderr)
- dc3_hash_display_final_print(i, hash_log);
-}
-
-static void
-dc3_hash_update_window(char *buf, size_t len)
-{
- uint8_t i;
- uintmax_t left = dc3_hash_window - dc3_hash_current;
-
- //fprintf(stderr, "dc3_hash_display_window() called with len=%zd, dc3_hash_current=%zd\n", len, dc3_hash_current);
-
- if (0 == left)
- {
- for (i = 0 ; i < DC3_NUM_HASHES ; ++i)
- {
- if (dc3_hashinfo[i].inuse)
- {
- dc3_hashinfo[i].final(dc3_hashinfo[i].ctx_window,
- dc3_hashinfo[i].sum);
- dc3_hash_display_window(i);
- dc3_hashinfo[i].init(dc3_hashinfo[i].ctx_window);
- }
- }
-
- //fprintf(stderr, "dc3_hash_update_window() resetting dc3_hash_current to 0\n");
-
- dc3_hash_current = 0;
- left = dc3_hash_window;
- }
-
- memcpy(dc3_hash_buffer,buf,len);
-
- if (len <= left)
- {
- for (i = 0 ; i < DC3_NUM_HASHES ; ++i)
- {
- if (dc3_hashinfo[i].inuse)
- {
- dc3_hashinfo[i].update(dc3_hash_buffer,
- len,
- dc3_hashinfo[i].ctx_window);
-
- // RBF - Should total calculations to be moved total_update function?
- dc3_hashinfo[i].total += len;
- }
- }
-
- //fprintf(stderr, "dc3_hash_update_window() 1 incrementing dc3_hash_current by len %zd\n", len);
- dc3_hash_current += len;
-
- }
- else
- {
- for (i = 0 ; i < DC3_NUM_HASHES ; ++i)
- {
- if (dc3_hashinfo[i].inuse)
- {
- dc3_hashinfo[i].update(dc3_hash_buffer,
- left,
- dc3_hashinfo[i].ctx_window);
- // RBF - Should total calculations to be moved total_update function?
- dc3_hashinfo[i].total += left;
- }
- }
-
- //fprintf(stderr, "dc3_hash_update_window() 2 incrementing dc3_hash_current by left %zd\n", left);
- dc3_hash_current += left;
- dc3_hash_update_window(buf+left,len-left);
+ 64,
+ (hash_init_func_t*)sha512_init_ctx,
+ (hash_update_func_t*)sha512_process_bytes,
+ (hash_finish_func_t*)sha512_finish_ctx,
}
+ };
- //fprintf(stderr, "dc3_hash_update_window() final: dc3_hash_current now %zd\n", dc3_hash_current);
-}
+//-------------------------
+// FUNCTIONS
+//-------------------------
+void usage(int status);
static void
-dc3_hash_update(char *buf, size_t len)
+flush_logs()
{
- uint8_t i;
-
- dc3_hash_buffer = malloc(len);
- if (NULL == dc3_hash_buffer)
- error(EXIT_FAILURE,0,_("Unable to allocate hashing buffer"));
-
- //fprintf(stderr, "dc3_hash_update: called with len=%zd\n", len);
-
- /* It's easy to update the total hash, so we do that first. */
-
- for (i = 0 ; i < DC3_NUM_HASHES ; ++i)
- {
- if (dc3_hashinfo[i].inuse)
- dc3_hash_update_total(i,buf,len);
- }
-
- if (dc3_hash_window != 0)
- dc3_hash_update_window(buf,len);
-
- free(dc3_hash_buffer);
+ fflush(stderr);
+ if (log != NULL)
+ {
+ fflush(log);
+ }
+ if (hash_log != NULL)
+ {
+ fflush(hash_log);
+ }
}
static void
-dc3_hash_final(void)
+terminate_logging()
{
- //fprintf(stderr, "dc3_hash_final called\n");
- uint8_t i;
-
- fprintf(stderr, " \r");
-
- /* We want to display all of the piecewise hashes before we
- display any of the total hashes */
- if (dc3_hash_window != 0)
- {
- for (i = 0 ; i < DC3_NUM_HASHES ; ++i)
- {
- if (dc3_hashinfo[i].inuse)
- {
- dc3_hashinfo[i].final(dc3_hashinfo[i].ctx_window,
- dc3_hashinfo[i].sum);
- dc3_hash_display_window(i);
- }
- }
- }
-
- for (i = 0 ; i < DC3_NUM_HASHES ; ++i)
- {
- if (dc3_hashinfo[i].inuse)
- {
- //fprintf(stderr, "dc3_hash_final(): calling final() for hash %d, ctx_total=%zd\n", i, dc3_hashinfo[i].ctx_total);
- dc3_hashinfo[i].final(dc3_hashinfo[i].ctx_total,
- dc3_hashinfo[i].sum);
- dc3_hash_display_final(i);
- }
- }
-}
-
-/* Get current time as a string
- * Format: 'YYYY-MM-DD HH:MM:SS -0000'
- */
-char*
-dc3_time()
-{
- const size_t len = 32; // more than enough to hold 'YYYY-MM-DD HH:MM:SS -0000'
- time_t t;
- struct tm tm;
- char* time_str = xmalloc(len);
-
- t = time(NULL);
- struct tm* ret = localtime_r(&t, &tm);
-
- if (ret == NULL)
- dc3_error(EXIT_FAILURE, errno, "localtime");
-
- if (strftime(time_str, len, "%F %T %z", &tm) == 0)
- dc3_error(EXIT_FAILURE, 0, "strftime returned 0");
-
- return time_str;
-}
-
-// return the extension of the given filename, after splitting
-// on the given delimiter
-const char*
-dc3_fileext(const char* filename, const char* delim)
-{
- const char* next = filename;
- const char* ext = NULL;
-
- while ((next = strstr(next, delim)) != NULL)
- {
- next = ext = next + 1;
- }
-
- return ext;
-}
-
-const char*
-dc3_filebase(const char* filename, const char* delim)
-{
- const char* next = filename;
- const char* ext = NULL;
-
- while ((next = strstr(next, delim)) != NULL)
- {
- next = ext = next + 1;
- }
-
- if (ext == NULL)
- return NULL;
-
- int offset = (ext-1) - filename;
-
- char* base = xstrdup(filename);
- base[offset] = '\0';
-
- return base;
-}
-
-bool dc3_validate_splitformat(const char* pattern)
-{
- size_t pos, len = strlen(pattern);
- char first = tolower(pattern[0]);
-
- for (pos = 0; pos < len; ++pos)
- {
- if ((tolower(pattern[pos]) != 'a' &&
- tolower(pattern[pos]) != '1' &&
- tolower(pattern[pos]) != '0') ||
- tolower(pattern[pos]) != first)
- return false;
- }
-
- return true;
+ // Close the logs and tear down the reporting mutex.
+ pthread_mutex_lock(&reporting_lock);
+ flush_logs();
+ if (log)
+ {
+ fclose(log);
+ }
+ if (hash_log)
+ {
+ fclose(hash_log);
+ }
+ pthread_mutex_unlock(&reporting_lock);
+ pthread_mutex_destroy(&reporting_lock);
}
-/* Pattern used as input */
-char * dc3_pattern_value;
-
-/* Length of the pattern being used */
-uintmax_t dc3_pattern_len;
-
-/* Error number corresponding to initial attempt to lseek input.
- If ESPIPE, do not issue any more diagnostics about it. */
-static int input_seek_errno;
-
-/* File offset of the input, in bytes, along with a flag recording
- whether it overflowed. The offset is valid only if the input is
- seekable and if the offset has not overflowed. */
-static uintmax_t input_offset;
-static bool input_offset_overflow;
-
-/* Records truncated by conv=block. */
-static uintmax_t r_truncate = 0;
-
-/* Output representation of newline and space characters.
- They change if we're converting to EBCDIC. */
-static char newline_character = '\n';
-static char space_character = ' ';
-
-/* Output buffer. */
-static char *obuf;
-
-/* Current index into `obuf'. */
-static size_t oc = 0;
-
-/* Index into current line, for `conv=block' and `conv=unblock'. */
-static size_t col = 0;
-
-/* The set of signals that are caught. */
-static sigset_t caught_signals;
-
-/* If nonzero, the value of the pending fatal signal. */
-static sig_atomic_t volatile interrupt_signal;
-
-/* A count of the number of pending info signals that have been received. */
-static sig_atomic_t volatile info_signal_count;
-
-/* A longest symbol in the struct symbol_values tables below. */
-#define LONGEST_SYMBOL "fdatasync"
-
-/* A symbol and the corresponding integer value. */
-struct symbol_value
-{
- char symbol[sizeof LONGEST_SYMBOL];
- int value;
-};
-
-/* Conversion symbols, for conv="...". */
-static struct symbol_value const conversions[] =
-{
- {"ascii", C_ASCII | C_TWOBUFS}, /* EBCDIC to ASCII. */
- {"ebcdic", C_EBCDIC | C_TWOBUFS}, /* ASCII to EBCDIC. */
- {"ibm", C_IBM | C_TWOBUFS}, /* Slightly different ASCII to EBCDIC. */
- {"block", C_BLOCK | C_TWOBUFS}, /* Variable to fixed length records. */
- {"unblock", C_UNBLOCK | C_TWOBUFS}, /* Fixed to variable length records. */
- {"lcase", C_LCASE | C_TWOBUFS}, /* Translate upper to lower case. */
- {"ucase", C_UCASE | C_TWOBUFS}, /* Translate lower to upper case. */
- {"swab", C_SWAB | C_TWOBUFS}, /* Swap bytes of input. */
- {"noerror", C_NOERROR}, /* Ignore i/o errors. */
- {"nocreat", C_NOCREAT}, /* Do not create output file. */
- {"excl", C_EXCL}, /* Fail if the output file already exists. */
- {"notrunc", C_NOTRUNC}, /* Do not truncate output file. */
- {"sync", C_SYNC}, /* Pad input records to ibs with NULs. */
- {"fdatasync", C_FDATASYNC}, /* Synchronize output data before finishing. */
- {"fsync", C_FSYNC}, /* Also synchronize output metadata. */
- //{"dynamic", C_DYNAMIC}, /* When read errors occur on input, try to
- // re-read smaller pieces of the block to
- // maximize data recovery */
- {"", 0}
-};
-
-/* Flags, for iflag="..." and oflag="...". */
-static struct symbol_value const flags[] =
-{
- {"append", O_APPEND},
- {"binary", O_BINARY},
- {"direct", O_DIRECT},
- {"directory", O_DIRECTORY},
- {"dsync", O_DSYNC},
- {"noatime", O_NOATIME},
- {"noctty", O_NOCTTY},
- {"nofollow", HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0},
- {"nolinks", O_NOLINKS},
- {"nonblock", O_NONBLOCK},
- {"sync", O_SYNC},
- {"text", O_TEXT},
- {"", 0}
-};
-
-/* Status, for status="...". */
-static struct symbol_value const statuses[] =
-{
- {"noxfer", STATUS_NOXFER},
- {"", 0}
-};
-
-/* Translation table formed by applying successive transformations. */
-static unsigned char trans_table[256];
-
-static char const ascii_to_ebcdic[] =
-{
- '\000', '\001', '\002', '\003', '\067', '\055', '\056', '\057',
- '\026', '\005', '\045', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\074', '\075', '\062', '\046',
- '\030', '\031', '\077', '\047', '\034', '\035', '\036', '\037',
- '\100', '\117', '\177', '\173', '\133', '\154', '\120', '\175',
- '\115', '\135', '\134', '\116', '\153', '\140', '\113', '\141',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\172', '\136', '\114', '\176', '\156', '\157',
- '\174', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\321', '\322', '\323', '\324', '\325', '\326',
- '\327', '\330', '\331', '\342', '\343', '\344', '\345', '\346',
- '\347', '\350', '\351', '\112', '\340', '\132', '\137', '\155',
- '\171', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\221', '\222', '\223', '\224', '\225', '\226',
- '\227', '\230', '\231', '\242', '\243', '\244', '\245', '\246',
- '\247', '\250', '\251', '\300', '\152', '\320', '\241', '\007',
- '\040', '\041', '\042', '\043', '\044', '\025', '\006', '\027',
- '\050', '\051', '\052', '\053', '\054', '\011', '\012', '\033',
- '\060', '\061', '\032', '\063', '\064', '\065', '\066', '\010',
- '\070', '\071', '\072', '\073', '\004', '\024', '\076', '\341',
- '\101', '\102', '\103', '\104', '\105', '\106', '\107', '\110',
- '\111', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
- '\130', '\131', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\160', '\161', '\162', '\163', '\164', '\165',
- '\166', '\167', '\170', '\200', '\212', '\213', '\214', '\215',
- '\216', '\217', '\220', '\232', '\233', '\234', '\235', '\236',
- '\237', '\240', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\312', '\313', '\314', '\315', '\316', '\317', '\332', '\333',
- '\334', '\335', '\336', '\337', '\352', '\353', '\354', '\355',
- '\356', '\357', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static char const ascii_to_ibm[] =
-{
- '\000', '\001', '\002', '\003', '\067', '\055', '\056', '\057',
- '\026', '\005', '\045', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\074', '\075', '\062', '\046',
- '\030', '\031', '\077', '\047', '\034', '\035', '\036', '\037',
- '\100', '\132', '\177', '\173', '\133', '\154', '\120', '\175',
- '\115', '\135', '\134', '\116', '\153', '\140', '\113', '\141',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\172', '\136', '\114', '\176', '\156', '\157',
- '\174', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\321', '\322', '\323', '\324', '\325', '\326',
- '\327', '\330', '\331', '\342', '\343', '\344', '\345', '\346',
- '\347', '\350', '\351', '\255', '\340', '\275', '\137', '\155',
- '\171', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\221', '\222', '\223', '\224', '\225', '\226',
- '\227', '\230', '\231', '\242', '\243', '\244', '\245', '\246',
- '\247', '\250', '\251', '\300', '\117', '\320', '\241', '\007',
- '\040', '\041', '\042', '\043', '\044', '\025', '\006', '\027',
- '\050', '\051', '\052', '\053', '\054', '\011', '\012', '\033',
- '\060', '\061', '\032', '\063', '\064', '\065', '\066', '\010',
- '\070', '\071', '\072', '\073', '\004', '\024', '\076', '\341',
- '\101', '\102', '\103', '\104', '\105', '\106', '\107', '\110',
- '\111', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
- '\130', '\131', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\160', '\161', '\162', '\163', '\164', '\165',
- '\166', '\167', '\170', '\200', '\212', '\213', '\214', '\215',
- '\216', '\217', '\220', '\232', '\233', '\234', '\235', '\236',
- '\237', '\240', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\312', '\313', '\314', '\315', '\316', '\317', '\332', '\333',
- '\334', '\335', '\336', '\337', '\352', '\353', '\354', '\355',
- '\356', '\357', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static char const ebcdic_to_ascii[] =
-{
- '\000', '\001', '\002', '\003', '\234', '\011', '\206', '\177',
- '\227', '\215', '\216', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\235', '\205', '\010', '\207',
- '\030', '\031', '\222', '\217', '\034', '\035', '\036', '\037',
- '\200', '\201', '\202', '\203', '\204', '\012', '\027', '\033',
- '\210', '\211', '\212', '\213', '\214', '\005', '\006', '\007',
- '\220', '\221', '\026', '\223', '\224', '\225', '\226', '\004',
- '\230', '\231', '\232', '\233', '\024', '\025', '\236', '\032',
- '\040', '\240', '\241', '\242', '\243', '\244', '\245', '\246',
- '\247', '\250', '\133', '\056', '\074', '\050', '\053', '\041',
- '\046', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\135', '\044', '\052', '\051', '\073', '\136',
- '\055', '\057', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\174', '\054', '\045', '\137', '\076', '\077',
- '\272', '\273', '\274', '\275', '\276', '\277', '\300', '\301',
- '\302', '\140', '\072', '\043', '\100', '\047', '\075', '\042',
- '\303', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\304', '\305', '\306', '\307', '\310', '\311',
- '\312', '\152', '\153', '\154', '\155', '\156', '\157', '\160',
- '\161', '\162', '\313', '\314', '\315', '\316', '\317', '\320',
- '\321', '\176', '\163', '\164', '\165', '\166', '\167', '\170',
- '\171', '\172', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\173', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
- '\110', '\111', '\350', '\351', '\352', '\353', '\354', '\355',
- '\175', '\112', '\113', '\114', '\115', '\116', '\117', '\120',
- '\121', '\122', '\356', '\357', '\360', '\361', '\362', '\363',
- '\134', '\237', '\123', '\124', '\125', '\126', '\127', '\130',
- '\131', '\132', '\364', '\365', '\366', '\367', '\370', '\371',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-/* True if we need to close the standard output *stream*. */
-static bool close_stdout_required = true;
-
-/* The only reason to close the standard output *stream* is if
- parse_long_options fails (as it does for --help or --version).
- In any other case, dd uses only the STDOUT_FILENO file descriptor,
- and the "cleanup" function calls "close (STDOUT_FILENO)".
- Closing the file descriptor and then letting the usual atexit-run
- close_stdout function call "fclose (stdout)" would result in a
- harmless failure of the close syscall (with errno EBADF).
- This function serves solely to avoid the unnecessary close_stdout
- call, once parse_long_options has succeeded. */
-static void
-maybe_close_stdout (void)
-{
- if (close_stdout_required)
- close_stdout ();
-}
-
-void
-usage (int status)
-{
- if (status != EXIT_SUCCESS)
- fprintf (stderr, _("Try `%s --help' for more information.\n"),
- program_name);
- else
- {
- printf (_("\
-Usage: %s [OPERAND]...\n\
- or: %s OPTION\n\
-"),
- program_name, program_name);
- fputs (_("\
-Copy a file, converting and formatting according to the operands.\n\
-\n\
- bs=BYTES force ibs=BYTES and obs=BYTES\n\
- cbs=BYTES convert BYTES bytes at a time\n\
- conv=CONVS convert the file as per the comma separated symbol list\n\
- count=SECTORS copy only SECTORS input sectors\n\
- ibs=BYTES read BYTES bytes at a time (must be a multiple of input sector size)\n\
-"), stdout);
- fputs (_("\
- if=FILE read from FILE instead of stdin\n\
- ifjoin=BASE.FMT read from split files with name BASE and splitformat FMT\n\
- iflag=FLAGS read as per the comma separated symbol list\n\
- pattern=HEX write HEX to every byte of the output\n\
- textpattern=TEXT write the string TEXT repeatedly to the output\n\
- obs=BYTES write BYTES bytes at a time\n\
- of=FILE write to FILE instead of stdout\n\
- of:=COMMAND pipe output to the given command\n\
- oflag=FLAGS write as per the comma separated symbol list\n\
- wipe=FILE wipe device FILE with zeros (or specify pattern/textpattern)\n\
- seek=SECTORS skip SECTORS input sectors at start of output\n\
- skip=SECTORS skip SECTORS input sectors at start of input\n\
- status=noxfer suppress transfer statistics\n\
-"), stdout);
- fputs (_("\
- split=BYTES split the output into pieces of size BYTES\n\
- splitformat=FMT create extensions for split pieces using FMT\n\
- Extensions can be numerical starting at zero,\n\
- numerical starting at one, or alphabetical.\n\
- These options are selected by using a series of\n\
- zeros, ones, or a's, respectively. The number\n\
- of characters used indicates the desired length of\n\
- the extensions. For example, splitformat=1111\n\
- indicates four character numerical extensions\n\
- starting with 0001.\n\
- progress=on displays a progress meter\n\
- progresscount=NUM number of blocks processed between each progress update\n\
- sizeprobe=on estimates size of input file for use with status\n\
- hash=ALGORITHM computes ALGORITHM hashes of the input data\n\
- hashconv=WHEN determines when data should be hashed, either before\n\
- or after conversions\n\
-"), stdout);
- /*
- hashformat=FORMAT format for writing piecewise hashes\n\
- totalhashformat=FORMAT format for writing overall hashes\n\
- */
- fputs (_("\
- hashwindow=BYTES number of bytes for piecewise hashing\n\
- hashlog=FILE appends piecewise hashes to the log file\n\
- errlog=FILE appends errors to the log file\n\
- log=FILE appends hashes and errors to the same file\n\
- errors=group group read errors together\n\
-"), stdout);
- fputs (_("\
- vf=FILE verify the input against FILE\n\
- vfjoin=BASE.FMT verify the input against split files with name BASE and splitformat FMT\n\
- verifylog=FILE write the results of the verify to the given file\n\
-"), stdout);
-
- fputs (_("\
-\n\
-ALGORITHM can be a comma separated list of md5, sha1, sha256, and sha512\n\
-\n\
-"), stdout);
- fputs (_("\
-\n\
-BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n\
-xM M, c 1, w 2, b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,\n\
-GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.\n\
-\n\
-Each CONV symbol may be:\n\
-\n\
-"), stdout);
- fputs (_("\
- ascii from EBCDIC to ASCII\n\
- ebcdic from ASCII to EBCDIC\n\
- ibm from ASCII to alternate EBCDIC\n\
- block pad newline-terminated records with spaces to cbs-size\n\
- unblock replace trailing spaces in cbs-size records with newline\n\
- lcase change upper case to lower case\n\
-"), stdout);
- fputs (_("\
- nocreat do not create the output file\n\
- excl fail if the output file already exists\n\
- notrunc do not truncate the output file\n\
- ucase change lower case to upper case\n\
- swab swap every pair of input bytes\n\
-"), stdout);
- fputs (_("\
- noerror continue after read errors\n\
- sync pad every input block with NULs to ibs-size; when used\n\
- with block or unblock, pad with spaces rather than NULs\n\
- fdatasync physically write output file data before finishing\n\
- fsync likewise, but also write metadata\n\
-"), stdout);
- fputs (_("\
-\n\
-Each FLAG symbol may be:\n\
-\n\
- append append mode (makes sense only for output; conv=notrunc suggested)\n\
-"), stdout);
- if (O_DIRECT)
- fputs (_(" direct use direct I/O for data\n"), stdout);
- if (O_DIRECTORY)
- fputs (_(" directory fail unless a directory\n"), stdout);
- if (O_DSYNC)
- fputs (_(" dsync use synchronized I/O for data\n"), stdout);
- if (O_SYNC)
- fputs (_(" sync likewise, but also for metadata\n"), stdout);
- if (O_NONBLOCK)
- fputs (_(" nonblock use non-blocking I/O\n"), stdout);
- if (O_NOATIME)
- fputs (_(" noatime do not update access time\n"), stdout);
- if (O_NOCTTY)
- fputs (_(" noctty do not assign controlling terminal from file\n"),
- stdout);
- if (HAVE_WORKING_O_NOFOLLOW)
- fputs (_(" nofollow do not follow symlinks\n"), stdout);
- if (O_NOLINKS)
- fputs (_(" nolinks fail if multiply-linked\n"), stdout);
- if (O_BINARY)
- fputs (_(" binary use binary I/O for data\n"), stdout);
- if (O_TEXT)
- fputs (_(" text use text I/O for data\n"), stdout);
-
- {
- char const *siginfo_name = (SIGINFO == SIGUSR1 ? "USR1" : "INFO");
- printf (_("\
-\n\
-Sending a %s signal to a running `dd' process makes it\n\
-print I/O statistics to standard error and then resume copying.\n\
-\n\
- $ dd if=/dev/zero of=/dev/null& pid=$!\n\
- $ kill -%s $pid; sleep 1; kill $pid\n\
- 18335302+0 sectors in\n\
- 18335302+0 sectors out\n\
- 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s\n\
-\n\
-Options are:\n\
-\n\
-"),
- siginfo_name, siginfo_name);
- }
-
- fputs (HELP_OPTION_DESCRIPTION, stdout);
- fputs (VERSION_OPTION_DESCRIPTION, stdout);
- fputs (" --flags display compile-time flags\n", stdout);
- emit_bug_reporting_address ();
- }
- exit (status);
-}
-
-
-
-
-/** Begin code copied (and modified) from ../lib/error.c **/
+// Begin code copied (and modified) from ../lib/error.c
#define __strerror_r strerror_r
static void
-print_errno_message (int errnum)
+report_errno_message(int errnum)
{
- char const *s;
+ char const *s;
#if defined HAVE_STRERROR_R || _LIBC
- char errbuf[1024];
-# if STRERROR_R_CHAR_P || _LIBC
- s = __strerror_r (errnum, errbuf, sizeof errbuf);
+ char errbuf[DISPLAY_MESSAGE_LENGTH];
+#if STRERROR_R_CHAR_P || _LIBC
+ s = __strerror_r(errnum, errbuf, sizeof errbuf);
# else
- if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
- s = errbuf;
- else
- s = 0;
+ if (__strerror_r(errnum, errbuf, sizeof errbuf) == 0)
+ {
+ s = errbuf;
+ }
+ else
+ {
+ s = 0;
+ }
# endif
#else
- s = strerror (errnum);
+ s = strerror(errnum);
#endif
#if !_LIBC
- if (! s)
- s = _("Unknown system error");
+ if (!s)
+ {
+ s = _("system error");
+ }
#endif
#if _LIBC
- __fxprintf (NULL, ": %s", s);
+ __fxprintf(NULL, ": %s", s);
#else
- fprintf (stderr, ": %s", s);
- if (error_log != NULL)
- fprintf (error_log, ": %s", s);
+ fprintf(stderr, ": %s", s);
+ if (log != NULL)
+ {
+ fprintf(log, ": %s", s);
+ }
#endif
}
-
-
static void
-dc3_error_tail(int status, int errnum, const char *message, va_list args)
+report_error_tail(int status, int errnum, const char *message, va_list args)
{
- va_list arg2;
- va_copy(arg2,args);
+ va_list arg2;
+ va_copy(arg2, args);
#if _LIBC
- if (_IO_fwide (stderr, 0) > 0)
- {
+ if (_IO_fwide (stderr, 0) > 0)
+ {
# define ALLOCA_LIMIT 2000
- size_t len = strlen (message) + 1;
+ size_t len = strlen(message) + 1;
wchar_t *wmessage = NULL;
mbstate_t st;
size_t res;
@@ -1287,3034 +480,4017 @@ dc3_error_tail(int status, int errnum, const char *message, va_list args)
bool use_malloc = false;
while (1)
- {
- if (__libc_use_alloca (len * sizeof (wchar_t)))
- wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
- else
+ {
+ if (__libc_use_alloca(len * sizeof (wchar_t)))
+ {
+ wmessage = (wchar_t *)alloca(len * sizeof (wchar_t));
+ }
+ else
+ {
+ if (!use_malloc)
{
- if (!use_malloc)
- wmessage = NULL;
-
- wchar_t *p = (wchar_t *) realloc (wmessage,
- len * sizeof (wchar_t));
- if (p == NULL)
- {
- free (wmessage);
- fputws_unlocked (L"out of memory\n", stderr);
- return;
- }
- wmessage = p;
- use_malloc = true;
+ wmessage = NULL;
}
- memset (&st, '\0', sizeof (st));
- tmp = message;
-
- res = mbsrtowcs (wmessage, &tmp, len, &st);
- if (res != len)
- break;
- if (__builtin_expect (len >= SIZE_MAX / 2, 0))
+ wchar_t *p = (wchar_t *)realloc(wmessage, len * sizeof (wchar_t));
+ if (p == NULL)
{
- /* This really should not happen if everything is fine. */
- res = (size_t) -1;
- break;
+ free (wmessage);
+ fputws_unlocked(L"out of memory\n", stderr);
+ return;
}
+ wmessage = p;
+ use_malloc = true;
+ }
+ memset(&st, '\0', sizeof (st));
+ tmp = message;
+
+ res = mbsrtowcs(wmessage, &tmp, len, &st);
+ if (res != len)
+ {
+ break;
+ }
- len *= 2;
- }
-
- if (res == (size_t) -1)
- {
- /* The string cannot be converted. */
- if (use_malloc)
- {
- free (wmessage);
- use_malloc = false;
- }
- wmessage = (wchar_t *) L"???";
- }
+ if (__builtin_expect(len >= SIZE_MAX / 2, 0))
+ {
+ res = (size_t)-1;
+ break;
+ }
- __vfwprintf (stderr, wmessage, args);
- if (error_log != NULL)
- __vfwprintf (error_log, wmessage, arg2);
+ len *= 2;
+ }
+ if (res == (size_t)-1)
+ {
+ // The string cannot be converted.
+ if (use_malloc)
+ {
+ free (wmessage);
+ use_malloc = false;
+ }
+ wmessage = (wchar_t *) L"???";
+ }
+ __vfwprintf(stderr, wmessage, args);
+ if (log != NULL)
+ {
+ __vfwprintf(log, wmessage, arg2);
+ }
+
if (use_malloc)
- free (wmessage);
- }
- else
+ {
+ free(wmessage);
+ }
+ }
+ else
#endif
- {
- vfprintf (stderr, message, args);
- if (error_log != NULL)
- vfprintf (error_log, message, arg2);
- }
+ {
+ vfprintf(stderr, message, args);
+ if (log != NULL)
+ {
+ vfprintf(log, message, arg2);
+ }
+ }
- va_end (args);
+ va_end(args);
- ++error_message_count;
- if (errnum)
- print_errno_message (errnum);
+ ++error_message_count;
+ if (errnum)
+ {
+ report_errno_message(errnum);
+ }
+
#if _LIBC
- __fxprintf (NULL, "\n");
+ __fxprintf(NULL, "\n");
#else
- putc ('\n', stderr);
- if (error_log != NULL)
- {
- putc ('\n', error_log);
- fflush(error_log);
- }
+ putc('\n', stderr);
+ if (log != NULL)
+ {
+ putc('\n', log);
+ fflush(log);
+ }
#endif
- fflush (stderr);
- if (status)
- exit (status);
-}
-
-
+ fflush(stderr);
+ if(status)
+ {
+ usage(status);
+ }
+}
static void
-dc3_error(int status, int errnum, const char *message, ...)
+report_error(int status, int errnum, const char *message, ...)
{
- va_list args;
-
+ pthread_mutex_lock(&reporting_lock);
+
#if defined _LIBC && defined __libc_ptf_call
- /* We do not want this call to be cut short by a thread
- cancellation. Therefore disable cancellation for now. */
- int state = PTHREAD_CANCEL_ENABLE;
- __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
- 0);
+ int state = PTHREAD_CANCEL_ENABLE;
+ __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0);
#endif
-
- fflush (stdout);
+
+ fflush (stdout);
+
#ifdef _LIBC
- _IO_flockfile (stderr);
+ _IO_flockfile (stderr);
#endif
#if _LIBC
- __fxprintf (NULL, "%s%s: ", (dc3_progress_printed?"\n":""),program_name);
+ __fxprintf (NULL, "%s[!!] ", progress_displayed ? "\n" : "");
#else
- fprintf (stderr, "%s%s: ", (dc3_progress_printed?"\n":""),program_name);
+ fprintf (stderr, "%s[!!] ", progress_displayed ? "\n" : "");
#endif
- if (error_log != NULL)
- fprintf (error_log, "%s: ", program_name);
+ if (log)
+ {
+ fputs("[!!] ", log);
+ }
+
+ va_list args;
+ va_start(args, message);
+ report_error_tail(status, errnum, message, args);
- va_start (args, message);
- dc3_error_tail(status,errnum,message,args);
-
#ifdef _LIBC
- _IO_funlockfile (stderr);
+ _IO_funlockfile (stderr);
# ifdef __libc_ptf_call
- __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
-# endif
-#endif
-}
-
-/** End code copied (and modified) from ../lib/error.c **/
-
-
-/** Begin code copied (and modified) from md5deep helpers.c **/
-
-#ifdef __linux__
-
-#ifdef HAVE_SYS_IOCTL_H
-#ifdef HAVE_SYS_MOUNT_H
-
-# include <sys/mount.h>
-
+ __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
#endif
#endif
-static void
-dc3_probe_file(int fd)
-{
- uintmax_t num_sectors = 0, sector_size = 0;
- struct stat sb;
-
- if (fstat(fd,&sb))
- return;
-
- if (S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode))
- {
- input_bytes = sb.st_size;
- return;
- }
-
-#ifdef HAVE_SYS_IOCTL_H
-#ifdef HAVE_SYS_MOUNT_H
-
- if (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode))
- {
-#if defined(_IO) && defined(BLKGETSIZE)
- if (ioctl(fd, BLKGETSIZE, &num_sectors))
- return;
-#else
- // If we can't run the ioctl call, we can't do anything here
- return;
-#endif // ifdefined _IO and BLKGETSIZE
-
-
-
-#if defined(_IO) && defined(BLKSSZGET)
-
- if (ioctl(fd, BLKSSZGET, §or_size))
- return;
-
-
- if (sector_size != 0)
- {
- //fprintf(stderr, "dc3_probe_file: probed sector size to be %d\n", sector_size);
- dc3_sectorsize = sector_size;
- }
-
- if (0 == sector_size)
- sector_size = 512;
- else if (sector_size != 512)
- // fixup num_sectors if necessary
- num_sectors = num_sectors * 512 / sector_size;
-#else
- sector_size = 512;
-#endif // ifdef _IO and BLKSSZGET
-
- input_bytes = (num_sectors * sector_size);
-
- //fprintf(stderr, "dc3_probe_file: input_bytes = %jd (%jd * %jd)\n", input_bytes, num_sectors, sector_size);
- }
-
-
-
-#endif // #ifdef HAVE_SYS_MOUNT_H
-#endif // #ifdef HAVE_SYS_IOCTL_H
-}
+ pthread_mutex_unlock(&reporting_lock);
+}
+// End code copied (and modified) from ../lib/error.c
-static void
-dc3_probe_sectorsize(int fd)
+static void
+report_to_log(const char* message)
{
- uintmax_t sector_size = 0;
- struct stat sb;
+ pthread_mutex_lock(&reporting_lock);
- if (fstat(fd,&sb))
- return;
+ // Write the message to the console and to the log, if it exists.
+ fputs(message, stderr);
+ if (log)
+ {
+ fputs(message, log);
+ }
- if (S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode))
- {
- input_bytes = sb.st_size;
- return;
- }
-
-#ifdef HAVE_SYS_IOCTL_H
-#ifdef HAVE_SYS_MOUNT_H
-
- if (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode))
- {
-#if defined(_IO) && defined(BLKSSZGET)
-
- if (ioctl(fd, BLKSSZGET, §or_size))
- return;
-
- if (sector_size != 0)
- {
- //fprintf(stderr, "dc3_probe_sectorsize: probed sector size to be %d\n", sector_size);
- dc3_sectorsize = sector_size;
- }
-
-#endif // ifdef _IO and BLKSSZGET
- }
-
-#endif // #ifdef HAVE_SYS_MOUNT_H
-#endif // #ifdef HAVE_SYS_IOCTL_H
+ pthread_mutex_unlock(&reporting_lock);
}
-
-
-#elif defined (__APPLE__)
-
-#ifdef HAVE_SYS_IOCTL_H
-# include <sys/disk.h>
-# include <sys/ioctl.h>
-#endif
-
-static void
-dc3_probe_file(int fd)
-{
- struct stat info;
- off_t total = 0;
- /* RBF - Is there a better way to emulate ftell? */
- off_t original = lseek(fd,0,SEEK_CUR);
- uint32_t blocksize = 0;
- uint64_t blockcount = 0;
-
- /* I'd prefer not to use fstat as it will follow symbolic links. We don't
- follow symbolic links. That being said, all symbolic links *should*
- have been caught before we got here. */
-
- if (fstat(fd, &info))
- return;
-
-#ifdef HAVE_SYS_IOCTL_H
- /* Block devices, like /dev/hda, don't return a normal filesize.
- If we are working with a block device, we have to ask the operating
- system to tell us the true size of the device.
-
- This isn't the recommended way to do check for block devices,
- but using S_ISBLK(info.stmode) wasn't working. */
- if (info.st_mode & S_IFBLK)
- {
- /* Get the block size */
- if (ioctl(fd, DKIOCGETBLOCKSIZE,&blocksize) < 0)
- return;
-
- /* Get the number of blocks */
- if (ioctl(fd, DKIOCGETBLOCKCOUNT, &blockcount) < 0)
- return;
-
- if (blocksize != 0)
- {
- //fprintf(stderr, "dc3_probe_file: probed sector size to be %d\n", blocksize);
- dc3_sectorsize = blocksize;
- }
-
- total = blocksize * blockcount;
- }
-#endif // ifdef HAVE_IOCTL_H
-
- else
- {
- total = lseek(fd,0,SEEK_END);
- if ((lseek(fd,original,SEEK_SET)))
- return;
- }
-
- input_bytes = (total - original);
+static void
+report_to_hash_log_or_log(char* message)
+{
+ pthread_mutex_lock(&reporting_lock);
+
+ // Write the message to the console, and to the hash log, if it exists.
+ // If the hash log does not exist, write the message to the log,
+ // if it exists.
+ fputs(message, stderr);
+ if (hash_log)
+ {
+ fputs(message, hash_log);
+ }
+ else if (log)
+ {
+ fputs(message, log);
+ }
+
+ pthread_mutex_unlock(&reporting_lock);
}
-
-static void
-dc3_probe_sectorsize(int fd)
-{
- struct stat info;
- uint32_t blocksize = 0;
-
- /* I'd prefer not to use fstat as it will follow symbolic links. We don't
- follow symbolic links. That being said, all symbolic links *should*
- have been caught before we got here. */
-
- if (fstat(fd, &info))
- return;
-
-#ifdef HAVE_SYS_IOCTL_H
- /* Block devices, like /dev/hda, don't return a normal filesize.
- If we are working with a block device, we have to ask the operating
- system to tell us the true size of the device.
-
- This isn't the recommended way to do check for block devices,
- but using S_ISBLK(info.stmode) wasn't working. */
- if (info.st_mode & S_IFBLK)
- {
- /* Get the block size */
- if (ioctl(fd, DKIOCGETBLOCKSIZE,&blocksize) < 0)
- return;
-
- if (blocksize != 0)
- {
- //fprintf(stderr, "dc3_probe_sectorsize: probed sector size to be %d\n", blocksize);
- dc3_sectorsize = blocksize;
- }
- //else { fprintf(stderr, "dc3_probe_sectorsize: failed to probe sector size\n"); }
- }
-#endif // ifdef HAVE_IOCTL_H
+static void
+report_to_all(char* message)
+{
+ pthread_mutex_lock(&reporting_lock);
+
+ // Write the message to the console, and to the log and hash log,
+ // if they exist.
+ fputs(message, stderr);
+ if (log)
+ {
+ fputs(message, log);
+ }
+ if (hash_log)
+ {
+ fputs(message, hash_log);
+ }
+
+ pthread_mutex_unlock(&reporting_lock);
}
-#elif defined (__CYGWIN__) // ifdef __APPLE__
-
-#include <sys/ioctl.h>
-#include <cygwin/types.h>
-#include <cygwin/fs.h>
-
-
-static void
-dc3_probe_file(int fd)
+static char*
+get_formatted_time_string()
{
- uintmax_t num_sectors = 0, sector_size = 0;
- struct stat sb;
-
- if (fstat(fd,&sb))
- return;
-
- if (S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode))
- {
- input_bytes = sb.st_size;
- return;
- }
-
- if (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode))
- {
- if (ioctl(fd, BLKGETSIZE, &num_sectors))
- return;
-
- if (ioctl(fd, BLKSSZGET, §or_size))
- return;
-
- if (sector_size != 0)
- dc3_sectorsize = sector_size;
-
- if (0 == sector_size)
- sector_size = 512;
- else if (sector_size != 512) // fixup num_sectors if necessary
- num_sectors = num_sectors * 512 / sector_size;
-
- input_bytes = (num_sectors * sector_size);
-
- //fprintf(stderr, "dc3_probe_file: input_bytes = %jd (%jd * %jd)\n",
- // input_bytes, num_sectors, sector_size);
- }
-}
+ // Get the current local time.
+ time_t t = time(NULL);
+ struct tm tm;
+ struct tm* ret = localtime_r(&t, &tm);
+ if (ret == NULL)
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, "localtime() failed");
+ }
+
+ // Put it in string form.
+ const size_t len = 32; // More than enough to hold 'YYYY-MM-DD HH:MM:SS -0000'
+ char* time_str = (char*)malloc(len);
+ if (strftime(time_str, len, "%F %T %z", &tm) == 0)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, "strftime() returned 0");
+ }
+ return time_str;
+}
-static void
-dc3_probe_sectorsize(int fd)
+static void
+report_exit_message(int exit_code)
{
- uintmax_t sector_size = 0;
- struct stat sb;
-
- if (fstat(fd,&sb))
- return;
-
- if (S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode))
- {
- input_bytes = sb.st_size;
- return;
- }
-
- if (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode))
- {
- if (ioctl(fd, BLKSSZGET, §or_size))
- return;
-
- if (sector_size != 0)
- dc3_sectorsize = sector_size;
-
- //fprintf(stderr, "dc3_probe_sectorsize: probed sector size to be %d\n", sector_size);
- }
+ // Translate the exit code into a printable word.
+ const char* verb = NULL;
+ switch (exit_code)
+ {
+ case DC3DD_EXIT_COMPLETED:
+ verb = _("completed");
+ break;
+ case DC3DD_EXIT_ABORTED:
+ verb = _("aborted");
+ break;
+ case DC3DD_EXIT_FAILED:
+ case DC3DD_EXIT_CODE_NOT_SET:
+ default:
+ verb = _("failed");
+ break;
+ }
+
+ // Write the exit message to all logs (i.e., console, log, hash log).
+ // The message acts as a sort of footer for the run.
+ char* formatted_stop_time = get_formatted_time_string();
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, _("%s %s at %s\n\n"), PROGRAM_NAME, verb, formatted_stop_time);
+ free(formatted_stop_time);
+ report_to_all(message);
+ flush_logs();
}
-#else // ifdef __CYGWIN__
-
-/* This is code for general UNIX systems
- (e.g. NetBSD, FreeBSD, OpenBSD, etc) */
-
-static off_t
-midpoint (off_t a, off_t b, long blksize)
+static void
+report_program_error(const char* assertion)
{
- off_t aprime = a / blksize;
- off_t bprime = b / blksize;
- off_t c, cprime;
-
- cprime = (bprime - aprime) / 2 + aprime;
- c = cprime * blksize;
-
- return c;
+ char internal_error[DISPLAY_MESSAGE_LENGTH];
+ sprintf(internal_error, _("%s: internal error %s at line %d"), program_name, assertion, __LINE__);
+ report_to_log(internal_error);
+ report_exit_message(DC3DD_EXIT_ABORTED);
+ terminate_logging();
+ emit_bug_reporting_address();
+ exit(DC3DD_EXIT_ABORTED);
}
-
-off_t find_dev_size(int fd, int blk_size)
+static void
+report_output_hashes(output_t* output)
{
+ // Report the parallel hash lists stashed in the output struct.
+ char message[DISPLAY_MESSAGE_LENGTH];
+ output_t* actual_hash_output = output->actual_hashes;
+ output_t* expected_hash_output = output->expected_hashes;
+ while (actual_hash_output && expected_hash_output)
+ {
+ hash_t* actual_hash = actual_hash_output->hash;
+ hash_t* expected_hash = expected_hash_output->hash;
+
+ // Report total hash match/mismatch.
+ sprintf(message, _(" %s %s (%s)\n"),
+ STREQ(actual_hash->result, expected_hash->result) ? _("[ok]") : _("[MISMATCH]"),
+ actual_hash->result,
+ actual_hash->algorithm->name);
+ report_to_all(message);
+
+ // Report piecewise hashes of files, if any.
+ if (output->files)
+ {
+ uintmax_t start_sector = 0;
+ file_t* file = output->files;
+ hash_t* actual_piece = actual_hash->pieces;
+ hash_t* expected_piece = expected_hash->pieces;
+ while (file && actual_piece && expected_piece)
+ {
+ // For a file set, report piecewise hash matches/mismatches,
+ // indented two levels.
+ sprintf(message, _(" %s %s, sectors %"PRIuMAX" - %"PRIuMAX", %s\n"),
+ STREQ(actual_piece->result, expected_piece->result) ? _("[ok]") : _("[MISMATCH]"),
+ actual_piece->result,
+ start_sector,
+ start_sector + actual_piece->bytes_hashed / output->sector_size - 1,
+ quote(file->name));
+ report_to_hash_log_or_log(message);
+
+ start_sector += actual_piece->bytes_hashed / output->sector_size;
+ file = file->next_file;
+ actual_piece = actual_piece->next_hash;
+ expected_piece = expected_piece->next_hash;
+ }
+ }
- off_t curr = 0, amount = 0;
- void *buf;
-
- if (blk_size == 0)
- return 0;
-
- buf = malloc(blk_size);
-
- for (;;) {
- ssize_t nread;
-
- lseek(fd, curr, SEEK_SET);
- nread = read(fd, buf, blk_size);
- if (nread < blk_size)
- {
- if (nread <= 0)
- {
- if (curr == amount)
- {
- free(buf);
- lseek(fd, 0, SEEK_SET);
- return amount;
- }
- curr = midpoint(amount, curr, blk_size);
- }
- else
- { /* 0 < nread < blk_size */
- free(buf);
- lseek(fd, 0, SEEK_SET);
- return amount + nread;
- }
- }
- else
- {
- amount = curr + blk_size;
- curr = amount * 2;
- }
- }
-
- free(buf);
- lseek(fd, 0, SEEK_SET);
- return amount;
+ actual_hash_output = actual_hash_output->next_output;
+ expected_hash_output = expected_hash_output->next_output;
+ }
}
-
-static void
-dc3_probe_file(int fd)
+static void
+report_input_hashes(output_t* output)
{
- struct stat sb;
-
- if (fstat(fd,&sb))
- return;
-
- if (S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode))
- input_bytes = sb.st_size;
- else if (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode))
- input_bytes = find_dev_size(fd,sb.st_blksize);
-}
-
-#endif // ifdef __LINUX__
-
-
-/** End code copied (and modified) from md5deep helpers.c **/
-
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, _(" %s (%s)\n"),
+ output->hash->result, output->hash->algorithm->name);
+ report_to_all(message);
+
+ if (output->hash->pieces != NULL)
+ {
+ uintmax_t start_sector = 0;
+ hash_t* piece = output->hash->pieces;
+ while (piece)
+ {
+ sprintf(message, _(" %s, sectors %"PRIuMAX" - %"PRIuMAX"\n"),
+ piece->result,
+ start_sector,
+ start_sector + piece->bytes_hashed / output->sector_size - 1);
+ report_to_hash_log_or_log(message);
+ start_sector += piece->bytes_hashed / output->sector_size;
+ piece = piece->next_hash;
+ }
+ }
+}
static void
-dc3_reprobe()
+report_files_IO(file_t* files, size_t sector_size, bool is_input)
{
- uintmax_t save = input_bytes;
- input_bytes = 0;
- dc3_probe_file(STDIN_FILENO);
- input_bytes += save;
+ char message[DISPLAY_MESSAGE_LENGTH];
+ file_t* file = files;
+ while (file)
+ {
+ uintmax_t sectors = file->size_in_bytes / sector_size;
+ uintmax_t leftover_bytes = file->size_in_bytes % sector_size;
+ if (leftover_bytes == 0)
+ {
+ sprintf(message,
+ _(" %"PRIuMAX" sectors %s %s\n"),
+ sectors, is_input ? _("in from") : _("out to"),
+ quote(file->name));
+ }
+ else
+ {
+ sprintf(message,
+ _(" %"PRIuMAX" sectors + %"PRIuMAX" bytes %s %s\n"),
+ sectors, leftover_bytes,
+ is_input ? _("in from") : _("out to"), quote(file->name));
+ }
+ report_to_log(message);
+ file = file->next_file;
+ }
}
-
static void
-translate_charset (char const *new_trans)
+report_file_IO(file_t* file, uintmax_t bytes, size_t sector_size, bool is_input)
{
- int i;
-
- for (i = 0; i < 256; i++)
- trans_table[i] = new_trans[trans_table[i]];
- translation_needed = true;
+ // Write the file name.
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, "%s results for %s %s:\n",
+ is_input ? _("input") : _("output"),
+ file->is_device ? _("device") : file->part_of_set ? _("files") : _("file"),
+ quote(file->unparsed_name));
+ report_to_all(message);
+
+ // Write the number of the sectors read or written.
+ uintmax_t sectors = bytes / sector_size;
+ uintmax_t leftover_bytes = bytes % sector_size;
+ if (leftover_bytes == 0)
+ {
+ sprintf(message, _(" %"PRIuMAX" sectors %s\n"), sectors, is_input ? _("in") : _("out"));
+ }
+ else
+ {
+ sprintf(message, _(" %"PRIuMAX" sectors + %"PRIuMAX" bytes %s\n"),
+ sectors, leftover_bytes, is_input ? _("in") : _("out"));
+ }
+ report_to_log(message);
}
-/* Return true if I has more than one bit set. I must be nonnegative. */
-
-static inline bool
-multiple_bits_set (int i)
+static void
+report_file_output(output_t* output)
{
- return (i & (i - 1)) != 0;
+ report_file_IO(output->current_file, output->bytes_output, output->sector_size, false);
+ if (verbose_reporting)
+ {
+ report_files_IO(output->files, output->sector_size, false);
+ }
}
-/* Print transfer statistics. */
-static void dc3_display_progress(int print_to_log);
-
-/* Options we use repeatedly whend displaying units */
-static int dc3_human_opts = \
- (human_autoscale | human_round_to_nearest | human_suppress_point_zero
- | human_space_before_unit | human_SI | human_base_1024);
-
-static void
-print_stats (void)
-{
- fprintf (stderr,
- _("%"PRIuMAX"+%"PRIuMAX" sectors in\n"
- "%"PRIuMAX"+%"PRIuMAX" sectors out\n"),
- dc3_sectors_r_full, dc3_sectors_r_partial,
- dc3_sectors_w_full, dc3_sectors_w_partial);
-
- if (error_log != NULL)
- fprintf (error_log,
- _("%"PRIuMAX"+%"PRIuMAX" sectors in\n"
- "%"PRIuMAX"+%"PRIuMAX" sectors out\n"),
- dc3_sectors_r_full, dc3_sectors_r_partial,
- dc3_sectors_w_full, dc3_sectors_w_partial);
-
- if (r_truncate != 0)
- {
- fprintf (stderr,
- ngettext ("%"PRIuMAX" truncated record\n",
- "%"PRIuMAX" truncated records\n",
- select_plural (r_truncate)),
- r_truncate);
- if (error_log != NULL)
- fprintf (error_log,
- ngettext ("%"PRIuMAX" truncated record\n",
- "%"PRIuMAX" truncated records\n",
- select_plural (r_truncate)),
- r_truncate);
- }
-
- if (status_flags & STATUS_NOXFER)
- return;
-
- dc3_display_progress(true);
+static void
+report_input(input_t* input)
+{
+ char message[DISPLAY_MESSAGE_LENGTH];
+ if (input->current_file)
+ {
+ report_file_IO(input->current_file, input->bytes_input, input->sector_size, true);
+ if (input->current_file->is_device)
+ {
+ sprintf(message, _(" %"PRIuMAX" bad sectors replaced by zeros\n"), input->bad_sectors);
+ report_to_log(message);
+ }
- /* Added to clear line now that dc3_display_progress uses \r */
- fprintf(stderr,_("\n"));
+ if (verbose_reporting)
+ {
+ report_files_IO(input->files, input->sector_size, true);
+ }
+ }
+ else
+ {
+ sprintf(message, _("input results for pattern %s:\n"), quote(input->pattern_string));
+ report_to_all(message);
+ sprintf(message, _(" %"PRIuMAX" sectors in\n"), input->bytes_input / input->sector_size);
+ report_to_all(message);
+ }
}
+static void
+report_results(job_t* jobs)
+{
+ pthread_mutex_lock(&reporting_lock);
+
+ // The first job is the imaging (or wiping) job, and there is only
+ // one task in an imaging job.
+ job_t* imaging_job = jobs;
+ task_t* imaging_task = jobs->tasks;
+ job_t* verification_job = imaging_job->next_job;
+
+ // Report progress, this time setting the final flag so it
+ // is terminated with a newline character instead of a carriage
+ // return character and is written to the log (if present)
+ // as well as the console.
+ imaging_job->report_progress(imaging_job, true);
+ if (verification_job)
+ {
+ verification_job->report_progress(verification_job, true);
+ }
+ if (!compact_reporting) report_to_all("\n");
+
+ // Report input stats and hashes.
+ report_input(imaging_task->input);
+ output_t* output = imaging_task->outputs;
+ while (output)
+ {
+ if (output->hash)
+ {
+ report_input_hashes(output);
+ }
+ output = output->next_output;
+ }
+ if (!compact_reporting) report_to_all("\n");
+
+ // Report output stats and hashes.
+ output = imaging_task->outputs;
+ while (output)
+ {
+ if (output->current_file)
+ {
+ report_file_output(output);
+ if (output->current_file->verify_requested &&
+ verification_job &&
+ verification_job->exit_code == DC3DD_EXIT_COMPLETED)
+ {
+ report_output_hashes(output);
+ }
+ if (!compact_reporting) report_to_all("\n");
+ }
+ output = output->next_output;
+ }
+
+ pthread_mutex_unlock(&reporting_lock);
+}
-/* This function used to be part of print_stats. We need
- to print this information as a progress meter, so I
- moved it to a separate function - J Kornblum */
-static void dc3_display_progress(int print_to_log)
+static void
+report_verification_progress(job_t* job, bool final)
{
- char hbuf[LONGEST_HUMAN_READABLE + 1];
- int human_opts = dc3_human_opts;
- xtime_t now = gethrxtime ();
- double delta_s;
- char const *bytes_per_second;
- float percent_done;
-
- /* Use integer arithmetic to compute the transfer rate,
- since that makes it easy to use SI abbreviations. */
-
- const char* verb = NULL;
- if (dc3_mode_verify)
- verb = "compared";
- else if (dc3_mode_wipe)
- verb = "wiped";
- else
- verb = "copied";
-
- fprintf (stderr,
- ngettext ("%"PRIuMAX" byte (%s) %s",
- "%"PRIuMAX" bytes (%s) %s",
- select_plural (w_bytes)),
- w_bytes,
- human_readable (w_bytes, hbuf, human_opts, 1, 1),
- verb);
- if (error_log != NULL && print_to_log)
- fprintf (error_log,
- ngettext ("%"PRIuMAX" byte (%s) %s",
- "%"PRIuMAX" bytes (%s) %s",
- select_plural (w_bytes)),
- w_bytes,
- human_readable (w_bytes, hbuf, human_opts, 1, 1),
- verb);
-
- if (input_bytes != 0)
- {
- percent_done = 100 * (w_bytes / (float)input_bytes);
+ uintmax_t bytes_input = 0;
+ uintmax_t bytes_to_input = 0;
+ task_t* task = job->tasks;
+ while (task)
+ {
+ // Synchronization of this read-only access to the task thread data is not required
+ // since exact calculations are not required for the progress bar.
+ bytes_input += task->input->bytes_input;
+ bytes_to_input += task->input->bytes_to_input;
+ task = task->next_task;
+ }
+ float percent_complete = bytes_to_input ? 100.0f * (float)bytes_input / (float)bytes_to_input : 100.0f;
+
+ pthread_mutex_lock(&reporting_lock);
+ fprintf(stderr, "%79s", "\r");
+ if (bytes_to_input > 0)
+ {
+ fprintf(stderr, _("output hashing (%2.0f%%)%s"), percent_complete, final ? "\n" : "\r");
+ if (log && final)
+ {
+ fprintf(log, _("output hashing (%2.0f%%)\n"), percent_complete);
+ }
+ }
+ else
+ {
+ fprintf(stderr, _("output hashing (??%%)%s"), final ? "\n" : "\r");
+ if (log && final)
+ {
+ fputs(_("output hashing (??%%)\n"), log);
+ }
+ }
+ progress_displayed = true;
+ pthread_mutex_unlock(&reporting_lock);
+}
- fprintf (stderr," (%2.0f%%)", percent_done);
- if (error_log != NULL && print_to_log)
- fprintf (error_log," (%2.0f%%)", percent_done);
- }
- else
- {
- fprintf (stderr," (??%%)");
- if (error_log != NULL && print_to_log)
- fprintf (error_log," (??%%)");
- }
+static void
+report_imaging_progress(job_t* job, bool final)
+{
+ // There is only one task in an imaging job.
+ task_t* task = job->tasks;
+
+ int human_opts = (human_autoscale | human_round_to_nearest | human_suppress_point_zero |
+ human_space_before_unit | human_SI | progress_bytes_reporting_flag);
+ char stats[DISPLAY_MESSAGE_LENGTH];
+ char hbuf[LONGEST_HUMAN_READABLE + 1];
+
+ pthread_mutex_lock(&reporting_lock);
+ fprintf(stderr, "%79s", "\r");
+
+ sprintf(stats, _("%"PRIuMAX" bytes (%s) copied"),
+ task->input->bytes_input,
+ human_readable(task->input->bytes_input, hbuf, human_opts, 1, 1));
+ fputs(stats, stderr);
+ if (log && final)
+ {
+ fputs(stats, log);
+ }
+
+ if (task->input->bytes_to_input != INFINITE_BYTES)
+ {
+ // Oddly, the %% format specifier has no effect if this is done with sprintf().
+ float percent_complete =
+ 100.0f * ((float)task->input->bytes_input / (float)task->input->bytes_to_input);
+ fprintf(stderr, " (%2.0f%%)", percent_complete);
+ if (log && final)
+ {
+ fprintf(log, " (%2.0f%%)", percent_complete);
+ }
+ }
+ else
+ {
+ fputs(" (??%)", stderr);
+ if (log && final)
+ {
+ fputs(" (??%)", log);
+ }
+ }
- if (start_time < now)
- {
+ double delta_s = 0.0;
+ char const *bytes_per_second = NULL;
+ xtime_t now = gethrxtime();
+ if (start_time < now)
+ {
double XTIME_PRECISIONe0 = XTIME_PRECISION;
uintmax_t delta_xtime = now;
delta_xtime -= start_time;
delta_s = delta_xtime / XTIME_PRECISIONe0;
- bytes_per_second = human_readable (w_bytes, hbuf, human_opts,
- XTIME_PRECISION, delta_xtime);
- }
- else
- {
- delta_s = 0;
+ bytes_per_second =
+ human_readable(task->input->bytes_input, hbuf, human_opts, XTIME_PRECISION, delta_xtime);
+ }
+ else
+ {
+ delta_s = 0.0;
bytes_per_second = _("Infinity B");
- }
-
- /* TRANSLATORS: The two instances of "s" in this string are the SI
- symbol "s" (meaning second), and should not be translated.
-
- This format used to be:
-
- ngettext (", %g second, %s/s\n", ", %g seconds, %s/s\n", delta_s == 1)
-
- but that was incorrect for languages like Polish. To fix this
- bug we now use SI symbols even though they're a bit more
- confusing in English. */
- fprintf (stderr, _(", %g s, %s/s "), delta_s, bytes_per_second);
- fprintf (stderr,"\r");
- if (error_log != NULL && print_to_log)
- fprintf (error_log, _(", %g s, %s/s\n"), delta_s, bytes_per_second);
+ }
+
+ // TRANSLATORS: The two instances of "s" in this string are the SI
+ // symbol "s" (meaning second), and should not be translated.
+ //
+ // This format used to be:
+ //
+ // ngettext (", %g second, %s/s\n", ", %g seconds, %s/s\n", delta_s == 1)
+ //
+ // but that was incorrect for languages like Polish. To fix this
+ // bug we now use SI symbols even though they're a bit more
+ // confusing in English.
+ fprintf (stderr, _(", %g s, %s/s %s"), delta_s, bytes_per_second, final ? "\n" : "\r");
+ if (log && final)
+ {
+ fprintf (log, _(", %g s, %s/s\n"), delta_s, bytes_per_second);
+ }
+
+ progress_displayed = true;
+ pthread_mutex_unlock(&reporting_lock);
}
-int hex2char(char *hstr)
+static void
+add_to_task_list(task_t** head, task_t* new_task)
{
- int retval;
-
- if (strlen(hstr) != 2)
- return -1;
- if (EOF == sscanf(hstr, "%x", &retval))
- return -1;
- return retval;
+ if (*head)
+ {
+ task_t* task = *head;
+ while (task)
+ {
+ if (task->next_task == NULL)
+ {
+ task->next_task = new_task;
+ break;
+ }
+ task = task->next_task;
+ }
+ }
+ else
+ {
+ *head = new_task;
+ }
}
-
-char * make_pattern(const char *pattern)
+static void
+add_to_output_list(output_t** head, output_t* new_output)
{
- size_t plen, numbytes, i;
- char * buffer;
-
- plen = strlen(pattern);
- if (plen == 0 || plen % 2 != 0)
- return NULL;
-
- numbytes = plen / 2;
- buffer = malloc(numbytes);
-
- for (i = 0; i < numbytes; i++) {
- char tmpstring[3];
- int byteval;
- strncpy(tmpstring, &pattern[i*2], 2);
- tmpstring[2] = '\0';
- byteval = hex2char(tmpstring);
-
- if (byteval == -1) {
- free(buffer);
- return NULL;
- }
- buffer[i] = (char)byteval;
- }
-
- dc3_pattern_len = numbytes;
-
- return buffer;
+ if (*head)
+ {
+ output_t* output = *head;
+ while (output)
+ {
+ if (output->next_output == NULL)
+ {
+ output->next_output = new_output;
+ break;
+ }
+ output = output->next_output;
+ }
+ }
+ else
+ {
+ *head = new_output;
+ }
}
-
static void
-cleanup (void)
+add_to_file_list(file_t** head, file_t* new_file)
{
- if (dc3_progress)
- {
- fprintf(stderr," \r");
- }
-
- if (dc3_ifjoin_done == false && close (STDIN_FILENO) < 0)
- dc3_error (EXIT_FAILURE, errno,
- _("closing input file %s"), quote (input_file));
-
- /* Don't remove this call to close, even though close_stdout
- closes standard output. This close is necessary when cleanup
- is called as part of a signal handler. */
- if (close (STDOUT_FILENO) < 0)
- dc3_error (EXIT_FAILURE, errno,
- _("closing output file %s"), quote (output_file));
+ if (*head)
+ {
+ file_t* file = *head;
+ while (file)
+ {
+ if (file->next_file == NULL)
+ {
+ file->next_file = new_file;
+ break;
+ }
+ file = file->next_file;
+ }
+ }
+ else
+ {
+ *head = new_file;
+ }
}
-static inline void ATTRIBUTE_NORETURN
-quit (int code)
+static void
+add_to_hash_list(hash_t** head, hash_t* new_hash)
{
- cleanup ();
-
- if (!dc3_mode_verify)
- print_stats ();
-
- if (code != EXIT_SUCCESS)
- dc3_exit_reason = DC3_EXIT_FAILED;
-
- dc3_exit_msg();
-
- if (hash_log)
- fclose(hash_log);
-
- process_signals ();
- exit (code);
+ if (*head)
+ {
+ hash_t* hash = *head;
+ while (hash)
+ {
+ if (hash->next_hash == NULL)
+ {
+ hash->next_hash = new_hash;
+ break;
+ }
+ hash = hash->next_hash;
+ }
+ }
+ else
+ {
+ *head = new_hash;
+ }
}
-void dc3_exit_msg()
+static void
+start_thread(pthread_t* thread, void*(*thread_func)(void*), void* thread_func_args)
{
- // print hash so far if we were interrupted
- if (dc3_hash && !dc3_mode_verify && interrupt_signal)
- {
- dc3_hash_final();
- }
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+ pthread_create(thread, &attr, thread_func, thread_func_args);
+}
- const char* verb = NULL;
- switch (dc3_exit_reason)
- {
- case DC3_EXIT_ABORTED:
- verb = "aborted";
- break;
- case DC3_EXIT_FAILED:
- verb = "failed";
- break;
- default:
- verb = "completed";
- break;
- }
+static bool
+is_valid_file_ext_fmt(const char* pattern)
+{
+ size_t pos, len = strlen(pattern);
+ char first = tolower(pattern[0]);
- char* dc3_stop_time = dc3_time();
- fprintf(stderr, "dc3dd %s at %s\n", verb, dc3_stop_time);
- if (error_log != NULL)
- fprintf(error_log, "dc3dd %s at %s\n", verb, dc3_stop_time);
+ for (pos = 0; pos < len; ++pos)
+ {
+ if ((tolower(pattern[pos]) != 'a' && tolower(pattern[pos]) != '1' && tolower(pattern[pos]) != '0') ||
+ tolower(pattern[pos]) != first)
+ {
+ return false;
+ }
+ }
- if (error_log != NULL)
- fflush(error_log);
+ return true;
}
-/* An ordinary signal was received; arrange for the program to exit. */
-
-static void
-interrupt_handler (int sig)
+static const char*
+get_file_ext(const char* filename, const char* delim)
{
- if (! SA_RESETHAND)
- signal (sig, SIG_DFL);
- interrupt_signal = sig;
+ const char* next = filename;
+ const char* ext = NULL;
+ while ((next = strstr(next, delim)) != NULL)
+ {
+ next = ext = next + 1;
+ }
+ return ext;
}
-/* An info signal was received; arrange for the program to print status. */
-
-static void
-siginfo_handler (int sig)
+static const char*
+get_file_base_name(const char* filename, const char* delim)
{
- if (! SA_NOCLDSTOP)
- signal (sig, siginfo_handler);
- info_signal_count++;
-}
+ const char* next = filename;
+ const char* ext = NULL;
+ while ((next = strstr(next, delim)) != NULL)
+ {
+ next = ext = next + 1;
+ }
+
+ if (ext == NULL)
+ {
+ return NULL;
+ }
-/* Install the signal handlers. */
+ size_t offset = (ext-1) - filename;
-static void
-install_signal_handlers (void)
-{
- bool catch_siginfo = ! (SIGINFO == SIGUSR1 && getenv ("POSIXLY_CORRECT"));
+ char* base = xstrdup(filename);
+ base[offset] = '\0';
-#if SA_NOCLDSTOP
+ return base;
+}
- struct sigaction act;
- sigemptyset (&caught_signals);
- if (catch_siginfo)
- {
- sigaction (SIGINFO, NULL, &act);
- if (act.sa_handler != SIG_IGN)
- sigaddset (&caught_signals, SIGINFO);
- }
- sigaction (SIGINT, NULL, &act);
- if (act.sa_handler != SIG_IGN)
- sigaddset (&caught_signals, SIGINT);
- act.sa_mask = caught_signals;
+static char*
+generate_file_name(const char* unparsed_name, uint file_number)
+{
+ static char *digits = "0123456789";
+ static char *letters = "abcdefghijklmnopqrstuvwxyz";
- if (sigismember (&caught_signals, SIGINFO))
- {
- act.sa_handler = siginfo_handler;
- act.sa_flags = 0;
- sigaction (SIGINFO, &act, NULL);
- }
+ const char* base_name = get_file_base_name(unparsed_name, ".");
+ if (base_name == NULL)
+ {
+ return NULL;
+ }
- if (sigismember (&caught_signals, SIGINT))
- {
- /* POSIX 1003.1-2001 says SA_RESETHAND implies SA_NODEFER,
- but this is not true on Solaris 8 at least. It doesn't
- hurt to use SA_NODEFER here, so leave it in. */
- act.sa_handler = interrupt_handler;
- act.sa_flags = SA_NODEFER | SA_RESETHAND;
- sigaction (SIGINT, &act, NULL);
- }
+ const char* file_ext_fmt = get_file_ext(unparsed_name, ".");
+ if (strlen(file_ext_fmt) == 0 || !is_valid_file_ext_fmt(file_ext_fmt))
+ {
+ return NULL;
+ }
+
+ size_t fmt_len = strlen(file_ext_fmt);
+ size_t base_len = strlen(base_name);
+ size_t len = base_len + fmt_len + 2;
+ char* file_name = (char*)malloc(len);
+ snprintf(file_name, base_len + 2, "%s.", base_name);
-#else
+ // In case starting with .001
+ uintmax_t num = file_number + (file_ext_fmt[0] == '1' ? 1 : 0);
- if (catch_siginfo && signal (SIGINFO, SIG_IGN) != SIG_IGN)
- {
- signal (SIGINFO, siginfo_handler);
- siginterrupt (SIGINFO, 1);
- }
- if (signal (SIGINT, SIG_IGN) != SIG_IGN)
- {
- signal (SIGINT, interrupt_handler);
- siginterrupt (SIGINT, 1);
- }
-#endif
+ for (int i = fmt_len - 1; i >= 0 ; i--)
+ {
+ uintmax_t x;
+
+ if ('a' == file_ext_fmt[0])
+ {
+ x = num % 26;
+ (file_name)[base_len + 1 + i] = letters[x];
+ num /= 26;
+ }
+ else
+ {
+ x = num % 10;
+ (file_name)[base_len + 1 + i] = digits[x];
+ num /= 10;
+ }
+ }
+
+ if (num > 0)
+ {
+ free(file_name);
+ file_name = NULL;
+ }
+ else
+ {
+ (file_name)[len - 1] = 0;
+ }
+
+ return file_name;
}
-/* Process any pending signals. If signals are caught, this function
- should be called periodically. Ideally there should never be an
- unbounded amount of time when signals are not being processed. */
+static file_t*
+make_file(const char* name, int number, int flags, bool part_of_set, bool verify_requested)
+{
+ file_t* file = NULL;
+ char* file_name = part_of_set ? generate_file_name(name, number) : strdup(name);
+ if (file_name)
+ {
+ file = (file_t*)malloc(sizeof(file_t));
+ file->unparsed_name = strdup(name);
+ file->name = file_name;
+ file->number = number;
+ file->flags = flags;
+ file->descriptor = FILE_DESCRIPTOR_NOT_SET;
+ file->offset = 0;
+ file->is_device = false;
+ file->is_block_device = false;
+ file->size_in_bytes = 0;
+ file->probed = false;
+ file->probed_size_in_bytes = 0;
+ file->probed_size_in_sectors = 0;
+ file->probed_sector_size = 0;
+ file->part_of_set= part_of_set;
+ file->verify_requested= verify_requested;
+ file->next_file = NULL;
+ }
+ return file;
+}
static void
-process_signals (void)
+close_file_output(output_t* output)
{
- while (interrupt_signal | info_signal_count)
- {
- int interrupt;
- int infos;
- sigset_t oldset;
-
- sigprocmask (SIG_BLOCK, &caught_signals, &oldset);
-
- /* Reload interrupt_signal and info_signal_count, in case a new
- signal was handled before sigprocmask took effect. */
- interrupt = interrupt_signal;
- infos = info_signal_count;
+ pthread_mutex_destroy(output->buffer_queue->lock);
- if (infos)
- info_signal_count = infos - 1;
-
- sigprocmask (SIG_SETMASK, &oldset, NULL);
+ if (output->current_file->descriptor >=0)
+ {
+ if (output->append_garbage_bytes)
+ {
+ memset(output->buffer_queue->buffers[0].data, '\0', output->buffer_size);
+ ssize_t bytes_written = write(output->current_file->descriptor,
+ output->buffer_queue->buffers[0].data, output->buffer_size);
+ if (bytes_written <= 0)
+ {
+ report_error(0, errno, _("corrupting %s"), quote(output->current_file->name));
+ }
+ }
- if (interrupt)
- cleanup ();
- print_stats ();
- if (interrupt)
+ if (close(output->current_file->descriptor) == 0)
{
- dc3_exit_reason = DC3_EXIT_ABORTED;
- dc3_exit_msg();
- raise (interrupt);
+ if (output->state != FATAL_ERROR)
+ {
+ // If not already in an error state, the output was completed.
+ output->state = COMPLETE;
+ }
}
- }
+ else
+ {
+ report_error(0, errno, _("closing %s"), quote(output->current_file->name));
+ output->state = FATAL_ERROR;
+ }
+ }
}
-/* Read from FD into the buffer BUF of size SIZE, processing any
- signals that arrive before bytes are read. Return the number of
- bytes read if successful, -1 (setting errno) on failure. */
-
-static ssize_t
-iread (int fd, char *buf, size_t size)
+static void
+open_next_output_file(output_t* output)
{
- for (;;)
- {
- ssize_t nread;
- process_signals ();
- nread = read (fd, buf, size);
- if (! (nread < 0 && errno == EINTR))
- return nread;
- }
+ if (close(output->current_file->descriptor) == 0)
+ {
+ output->current_file->descriptor = FILE_DESCRIPTOR_NOT_SET;
+
+ file_t* next_file = make_file(
+ output->current_file->unparsed_name,
+ output->current_file->number + 1,
+ output->current_file->flags,
+ true,
+ output->current_file->verify_requested);
+ if (next_file)
+ {
+ next_file->descriptor = open(next_file->name, next_file->flags, OUTPUT_FILE_PERMS);
+ if (next_file->descriptor >= 0)
+ {
+ output->current_file = next_file;
+ add_to_file_list(&output->files, next_file);
+ }
+ else
+ {
+ report_error(0, errno, _("opening %s"), quote(next_file->name));
+ output->state = FATAL_ERROR;
+ }
+ }
+ else
+ {
+ report_error(0, 0 , _("file extensions exhausted for %s"), output->current_file->unparsed_name);
+ output->state = FATAL_ERROR;
+ }
+ }
+ else
+ {
+ output->current_file->descriptor = FILE_DESCRIPTOR_NOT_SET;
+ report_error(0, errno, _("closing %s"), quote(output->current_file->name));
+ output->state = FATAL_ERROR;
+ }
}
-/* Write to FD the buffer BUF of size SIZE, processing any signals
- that arrive. Return the number of bytes written, setting errno if
- this is less than SIZE. Keep trying if there are partial
- writes. */
-
static size_t
-dc3_iwrite (int fd, char const *buf, size_t size)
+write_bytes_to_file(output_t* output, char const *buffer, size_t bytes_to_write)
{
- size_t total_written = 0;
-
- while (total_written < size)
- {
- ssize_t nwritten;
- process_signals ();
- nwritten = write (fd, buf + total_written, size - total_written);
- if (nwritten < 0)
- {
- if (errno != EINTR)
- break;
- }
- else if (nwritten == 0)
- {
- /* Some buggy drivers return 0 when one tries to write beyond
- a device's end. (Example: Linux 1.2.13 on /dev/fd0.)
- Set errno to ENOSPC so they get a sensible diagnostic. */
- errno = ENOSPC;
- break;
- }
+ size_t total_bytes_written = 0;
+
+ while (total_bytes_written < bytes_to_write)
+ {
+ ssize_t bytes_written = write(
+ output->current_file->descriptor,
+ buffer + total_bytes_written,
+ bytes_to_write - total_bytes_written);
+
+ if (bytes_written < 0)
+ {
+ if (errno != EINTR)
+ {
+ report_error(0, errno, _("writing to %s"), quote(output->current_file->name));
+ output->state = FATAL_ERROR;
+ break;
+ }
+ }
+ else if (bytes_written == 0)
+ {
+ // Some buggy drivers return 0 when one tries to write beyond
+ // a device's end. (Example: Linux 1.2.13 on /dev/fd0.)
+ // Set errno to ENOSPC for a sensible diagnostic.
+ errno = ENOSPC;
+ report_error(0, errno, _("writing to %s"), quote(output->current_file->name));
+ output->state = FATAL_ERROR;
+ break;
+ }
else
- total_written += nwritten;
- }
+ {
+ total_bytes_written += (size_t)bytes_written;
+ output->current_file->size_in_bytes += (size_t)total_bytes_written;
+ }
+ }
- return total_written;
+ return total_bytes_written;
}
-static char *dc3_split_numbers = "0123456789";
-#define DC3_SPLIT_NUM_NUMBERS 10
-static char *dc3_split_letters = "abcdefghijklmnopqrstuvwxyz";
-#define DC3_SPLIT_NUM_LETTERS 26
-
-static int
-dc3_generate_split_filename(const char* base, const char* fmt, uintmax_t n, char** result)
+static size_t
+write_bytes_to_files(output_t* output, char const *buffer, size_t bytes_to_write)
{
- /* The extra two bytes accounts for the dot between the filename
- and the extension and then for the trailing \0 */
- size_t fmt_len = strlen(fmt);
- size_t base_len = strlen(base);
- size_t len = base_len + fmt_len + 2;
+ size_t bytes_written = 0;
+
+ intmax_t bytes_left_for_file = output->max_file_size - output->current_file->size_in_bytes;
+ if (bytes_to_write <= bytes_left_for_file)
+ {
+ // Write all of the bytes in the buffer to the current file.
+ bytes_written += write_bytes_to_file(output, buffer, bytes_to_write);
+ }
+ else
+ {
+ if (bytes_left_for_file > 0)
+ {
+ // Write the bytes that will fit in the current file.
+ bytes_written += write_bytes_to_file(output, buffer, bytes_left_for_file);
+ }
+
+ // Write the remaining bytes to the next file(s).
+ open_next_output_file(output);
+ if (output->state != FATAL_ERROR)
+ {
+ bytes_written +=
+ write_bytes_to_files(output, buffer + bytes_written, bytes_to_write - bytes_written);
+ }
+ }
- if (NULL == *result)
- {
- *result = (char *)malloc(len);
- if (NULL == *result)
- dc3_error(EXIT_FAILURE, 0, _("Unable to allocate filename"));
- }
+ return bytes_written;
+}
- snprintf(*result, base_len+2, "%s.", base);
+static void
+write_bytes_to_image(output_t* output, buffer_t* buffer)
+{
+ if (output->current_file->part_of_set)
+ {
+ output->bytes_output += write_bytes_to_files(output, buffer->data, buffer->length);
+ }
+ else
+ {
+ output->bytes_output += write_bytes_to_file(output, buffer->data, buffer->length);
+ }
+}
- /* In case we're starting with .001 */
- uintmax_t num = n + (fmt[0] == '1' ? 1 : 0);
-
- int i;
- for (i = fmt_len - 1; i >= 0 ; i--)
- {
- uintmax_t x;
+static ssize_t
+read_bytes(int file_descriptor, char *buffer, size_t bytes_to_read)
+{
+ for (;;)
+ {
+ ssize_t bytes_read;
+ bytes_read = read(file_descriptor, buffer, bytes_to_read);
+ if (!(bytes_read < 0 && errno == EINTR))
+ {
+ return bytes_read;
+ }
+ }
+}
- if ('a' == fmt[0])
- {
- x = num % DC3_SPLIT_NUM_LETTERS;
- (*result)[base_len+1+i] = dc3_split_letters[x];
- num /= DC3_SPLIT_NUM_LETTERS;
- }
+static void
+skip_output_sectors(output_t* output)
+{
+ if (output->sectors_to_skip > 0)
+ {
+ uintmax_t bytes_to_skip = output->sectors_to_skip * output->sector_size;
+ if (bytes_to_skip <= OFF_T_MAX)
+ {
+ if (lseek(output->current_file->descriptor, bytes_to_skip, SEEK_CUR) < 0)
+ {
+ report_error(0, errno, _("lseek() on %s failed while skipping sectors"),
+ quote(output->current_file->name));
+ output->state = FATAL_ERROR;
+ }
+ }
else
- {
- x = num % DC3_SPLIT_NUM_NUMBERS;
- (*result)[base_len+1+i] = dc3_split_numbers[x];
- num /= DC3_SPLIT_NUM_NUMBERS;
- }
- }
-
- (*result)[len-1] = 0;
-
- if (num > 0)
- dc3_error(EXIT_FAILURE,0,_("Split extensions exhausted"));
-
- return false;
+ {
+ // The desired skip is not representable as an off_t, so try
+ // doing the skip using read() calls.
+ char* buffer = (char*)malloc(output->buffer_size);
+ while (bytes_to_skip)
+ {
+ size_t bytes_to_read =
+ bytes_to_skip >= output->buffer_size ? output->buffer_size : bytes_to_skip;
+ ssize_t bytes_read =
+ read_bytes(output->current_file->descriptor, buffer, bytes_to_read);
+ if (bytes_read > 0)
+ {
+ bytes_to_skip -= bytes_read;
+ }
+ else if (bytes_read == 0)
+ {
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, _("encountered end of file reading %s to skip sectors"),
+ quote(output->current_file->name));
+ report_error(0, 0, message);
+ output->state = FATAL_ERROR;
+ break;
+ }
+ else
+ {
+ report_error(0, errno, _("reading %s while skipping sectors"),
+ quote(output->current_file->name));
+ output->state = FATAL_ERROR;
+ break;
+ }
+ }
+ free(buffer);
+ }
+ }
}
-
-static void dc3_open_split(void)
+static void
+open_file_output(output_t* output)
{
- close(STDOUT_FILENO);
-
- dc3_split_number++;
- dc3_generate_split_filename(output_file, dc3_split_format, dc3_split_number, &dc3_split_filename);
-
- mode_t perms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
- int opts
- = (output_flags
- | (conversions_mask & C_NOCREAT ? 0 : O_CREAT)
- | (conversions_mask & C_EXCL ? O_EXCL : 0)
- | (seek_sectors || (conversions_mask & C_NOTRUNC) ? 0 : O_TRUNC));
-
- if (fd_reopen(STDOUT_FILENO, dc3_split_filename, O_WRONLY | opts, perms) < 0)
- dc3_error(EXIT_FAILURE, errno, _("opening %s"), quote(dc3_split_filename));
-
- dc3_split_current = 0;
+ pthread_mutex_init(output->buffer_queue->lock, NULL);
+
+ output->current_file->descriptor =
+ open(output->current_file->name, output->current_file->flags, OUTPUT_FILE_PERMS);
+ if (output->current_file->descriptor >= 0)
+ {
+ output->state = OPEN;
+ skip_output_sectors(output);
+ }
+ else
+ {
+ report_error(0, errno,_("opening %s"), quote(output->current_file->name));
+ output->state = FATAL_ERROR;
+ }
}
-
-static size_t
-dc3_verify (int fd, char const *src_buf, size_t size)
+static void
+disconnect_from_std_out(output_t* output)
{
- char * dest_buf;
-
- dest_buf = (char *)malloc(size);
- if (NULL == dest_buf)
- dc3_error(EXIT_FAILURE,errno,_("Unable to allocate memory"));
+ output->state = COMPLETE;
+ pthread_mutex_destroy(output->buffer_queue->lock);
+}
- ssize_t n = iread(fd,dest_buf,size);
+static void
+connect_to_std_out(output_t* output)
+{
+ pthread_mutex_init(output->buffer_queue->lock, NULL);
+ output->current_file->descriptor = STDOUT_FILENO;
+ output->state = OPEN;
+}
- // TODO: could enable block below to give better reporting of the
- // reason why a verify failed (was it input or output that couldn't be read)
- /*
- if (n < 0)
- fprintf(stderr, "unrecoverable error reading verify file %s\n", output_file);
- else*/ if (dc3_vfjoin && 0 <= n && n < size)
- {
- //fprintf(stderr, "opening next vfjoin piece\n");
- dc3_vfjoin_number++;
- dc3_generate_split_filename(dc3_vfjoin_base, dc3_vfjoin_ext, dc3_vfjoin_number, &output_file);
+static void
+get_hash_result(hash_t* hash)
+{
+ static char hex[] = "0123456789abcdef";
- if (fd_reopen(STDOUT_FILENO, output_file, O_RDONLY, 0) < 0)
- dc3_error(EXIT_FAILURE, 0, _("Verify FAILED"));
- else
- iread(fd, dest_buf+n, size-n);
- }
-
- if (memcmp(dest_buf,src_buf,size))
- dc3_error(EXIT_FAILURE,0,_("Verify FAILED"));
+ for (size_t p = 0; p < hash->algorithm->sum_size ; p++)
+ {
+ hash->result[2 * p] = hex[(hash->sum[p] >> 4) & 0xf];
+ hash->result[2 * p + 1] = hex[hash->sum[p] & 0xf];
+ }
- free(dest_buf);
- return size;
+ hash->result[2 * hash->algorithm->sum_size] = 0;
}
-
-
+static void
+close_hash(output_t* output)
+{
+ output->hash->algorithm->finish(output->hash->context, output->hash->sum);
+ get_hash_result(output->hash);
+ if (output->hash->current_piece != NULL)
+ {
+ output->hash->current_piece->algorithm->finish(output->hash->current_piece->context,
+ output->hash->current_piece->sum);
+ get_hash_result(output->hash->current_piece);
+ }
+
+ pthread_mutex_destroy(output->buffer_queue->lock);
+ output->state = COMPLETE;
+}
-static size_t
-iwrite (int fd, char const *buf, size_t size)
+static hash_t*
+make_hash(hash_algorithm_t* algorithm)
{
- if (dc3_mode_verify)
- return dc3_verify(fd,buf,size);
+ hash_t* hash = (hash_t*)malloc(sizeof(hash_t));
+ hash->algorithm = algorithm;
+ hash->context = malloc(algorithm->context_size);
+ hash->sum = (char*)malloc(algorithm->sum_size);
+ hash->result = (char*)malloc(2 * algorithm->sum_size + 1);
+ hash->result[0] = 0;
+ hash->bytes_hashed = 0;
+ hash->current_piece = NULL;
+ hash->pieces = NULL;
+ hash->piecewise_hash_length = 0;
+ hash->next_hash = NULL;
+ return hash;
+}
- if (! dc3_split )
- return dc3_iwrite(fd,buf,size);
+static void
+piecewise_hash_bytes(output_t* output, const char* buf, size_t buf_length)
+{
+ uintmax_t bytes_left_for_piece =
+ output->hash->piecewise_hash_length - output->hash->current_piece->bytes_hashed;
+
+ if (bytes_left_for_piece == 0)
+ {
+ output->hash->current_piece->algorithm->finish(output->hash->current_piece->context,
+ output->hash->current_piece->sum);
+ get_hash_result(output->hash->current_piece);
+ output->hash->current_piece = make_hash(output->hash->current_piece->algorithm);
+ add_to_hash_list(&output->hash->pieces, output->hash->current_piece);
+ output->hash->current_piece->algorithm->init(output->hash->current_piece->context);
+ bytes_left_for_piece = output->hash->piecewise_hash_length;
+ }
+
+ if (buf_length <= bytes_left_for_piece)
+ {
+ output->hash->current_piece->algorithm->update(buf, buf_length, output->hash->current_piece->context);
+ output->hash->current_piece->bytes_hashed += buf_length;
+ }
+ else
+ {
+ output->hash->current_piece->algorithm->update(buf, bytes_left_for_piece,
+ output->hash->current_piece->context);
+ output->hash->current_piece->bytes_hashed += bytes_left_for_piece;
+ piecewise_hash_bytes(output, buf + bytes_left_for_piece, buf_length - bytes_left_for_piece);
+ }
+}
- uintmax_t left = dc3_split_bytes - dc3_split_current;
- size_t nwritten;
+static void
+hash_bytes(output_t* output, buffer_t* buffer)
+{
+ output->hash->algorithm->update(buffer->data, buffer->length, output->hash->context);
+ if (output->hash->current_piece != NULL)
+ {
+ piecewise_hash_bytes(output, buffer->data, buffer->length);
+ }
+}
- if (0 == left)
- {
- dc3_open_split();
- left = dc3_split_bytes;
- }
+static void
+open_hash(output_t* output)
+{
+ pthread_mutex_init(output->buffer_queue->lock, NULL);
- if (size <= left)
- {
- nwritten = dc3_iwrite(fd,buf,size);
- dc3_split_current += nwritten;
- }
- else
- {
- nwritten = dc3_iwrite(fd,buf,left);
- dc3_split_current += nwritten;
- nwritten = dc3_iwrite(fd,buf+nwritten,size-nwritten);
- dc3_split_current += nwritten;
- }
+ output->hash->algorithm->init(output->hash->context);
+ if (output->hash->current_piece != NULL)
+ {
+ output->hash->current_piece->algorithm->init(output->hash->current_piece->context);
+ }
- return nwritten;
+ output->state = OPEN;
}
-void
-dc3_write_stats(size_t n)
+static bool
+wait_for_buffer(buffer_queue_t* buffer_queue)
{
- if (n <= 0)
- return;
-
- w_bytes += n;
+ // This function is called by an output thread each time it
+ // finishes consuming some input bytes furnished by an input (i.e., task) thread.
+ pthread_mutex_lock(buffer_queue->lock);
+ if (buffer_queue->buffers_used == 0 && !buffer_queue->done_buffering)
+ {
+ pthread_cond_wait(buffer_queue->not_empty, buffer_queue->lock);
+ }
+ pthread_mutex_unlock(buffer_queue->lock);
+ return buffer_queue->buffers_used > 0;
+}
- dc3_sectors_w_full += n / dc3_sectorsize;
+static void*
+produce_output(void* arg)
+{
+ // This is the thread function for output threads.
+ output_t* output = (output_t*)arg;
+
+ size_t next_buffer = 0;
+ while (wait_for_buffer(output->buffer_queue))
+ {
+ if (output->state == OPEN)
+ {
+ // Output the next buffer in the buffer queue.
+ output->consume_bytes(output, &output->buffer_queue->buffers[next_buffer]);
+ }
- if (n % dc3_sectorsize)
- dc3_sectors_w_partial++;
+ // Update the count of buffers in use and notify the task
+ // thread that the buffer queue is not full. This will release
+ // the input (i.e., task) thread if it is blocked waiting to add a
+ // buffer of input bytes to this queue.
+ next_buffer = (next_buffer + 1) % NUM_BUFFERS;
+ pthread_mutex_lock(output->buffer_queue->lock);
+ --output->buffer_queue->buffers_used;
+ pthread_cond_signal(output->buffer_queue->not_full);
+ pthread_mutex_unlock(output->buffer_queue->lock);
+ }
+
+ pthread_exit(NULL);
}
-/* Write, then empty, the output buffer `obuf'. */
-
static void
-write_output (void)
+close_file_input(input_t* input)
{
- size_t nwritten = iwrite (STDOUT_FILENO, obuf, output_blocksize);
- dc3_write_stats(nwritten);
-
- //fprintf(stderr, "write_output: wrote %zd bytes, total %zd\n", nwritten, w_bytes);
- if (nwritten != output_blocksize)
- {
- if (dc3_mode_wipe && errno == ENOSPC)
+ if (input->current_file->descriptor >= 0)
+ {
+ if (close(input->current_file->descriptor) == 0)
{
- quit (EXIT_SUCCESS);
+ if (input->state != FATAL_ERROR)
+ {
+ // If not already in an error state, the input was completed.
+ input->state = COMPLETE;
+ }
}
else
{
- dc3_error (0, errno, _("writing to %s"), quote (output_file));
- quit (EXIT_FAILURE);
+ report_error(0, errno, _("closing %s"), quote(input->current_file->name));
+ input->state = FATAL_ERROR;
}
- }
-
- //fprintf(stderr, "write_output: sector count now %jd + %jd\n", dc3_sectors_w_full, dc3_sectors_w_partial);
- oc = 0;
+ }
}
-/* Return true if STR is of the form "PATTERN" or "PATTERNDELIM...". */
+static void
+advance_input(input_t* input, uintmax_t bytes_read)
+{
+ // Update the input counters.
+ if (input->current_file)
+ {
+ input->current_file->offset += bytes_read;
+ input->current_file->size_in_bytes += bytes_read;
+ input->current_sector += bytes_read / input->sector_size;
+ }
+ input->bytes_input += bytes_read;
+}
static bool
-operand_matches (char const *str, char const *pattern, char delim)
+advance_input_after_sector_read_error(input_t* input)
{
- while (*pattern)
- if (*str++ != *pattern++)
- return false;
- return !*str || *str == delim;
+ advance_input(input, input->sector_size);
+
+ // Get the actual offset of the file pointer.
+ off_t offset = lseek(input->current_file->descriptor, 0, SEEK_CUR);
+
+ if (offset >= 0)
+ {
+ if (offset != input->current_file->offset)
+ {
+ // Advance the actual offset to the desired offset.
+ if (lseek(input->current_file->descriptor, input->current_file->offset - offset, SEEK_CUR) < 0)
+ {
+ report_error(0, errno, _("lseek() on %s failed, cannot advance input past read error"),
+ quote(input->current_file->name));
+ input->state = FATAL_ERROR;
+ }
+ }
+ }
+ else
+ {
+ report_error(0, errno, _("lseek() on %s failed, cannot advance input past read error"),
+ quote(input->current_file->name));
+ input->state = FATAL_ERROR;
+ }
+
+ return input->state != FATAL_ERROR;
}
-/* Interpret one "conv=..." or similar operand STR according to the
- symbols in TABLE, returning the flags specified. If the operand
- cannot be parsed, use ERROR_MSGID to generate a diagnostic. */
-
-static int
-parse_symbols (char const *str, struct symbol_value const *table,
- char const *error_msgid)
+static void
+flush_grouped_read_errors(input_t* input, bool skipping)
{
- int value = 0;
-
- for (;;)
- {
- char const *strcomma = strchr (str, ',');
- struct symbol_value const *entry;
-
- for (entry = table;
- ! (operand_matches (str, entry->symbol, ',') && entry->value);
- entry++)
- {
- if (! entry->symbol[0])
- {
- size_t slen = strcomma ? strcomma - str : strlen (str);
- dc3_error (0, 0, "%s: %s", _(error_msgid),
- quotearg_n_style_mem (0, locale_quoting_style, str, slen));
-
- usage (EXIT_FAILURE);
- }
- }
-
- value |= entry->value;
- if (!strcomma)
- break;
- str = strcomma + 1;
-
- }
-
- return value;
+ if (input->current_errno_count > 1)
+ {
+ report_error(0, input->current_errno,
+ _("%"PRIuMAX" occurences while reading %s from sector %"PRIuMAX" to sector %"PRIuMAX" %s"),
+ input->current_errno_count,
+ quote(input->current_file->name),
+ input->current_errno_start_sector,
+ input->current_errno_start_sector + input->current_errno_count - 1,
+ skipping ? _("while skipping sectors") : "");
+
+ }
+ else if (input->current_errno_count == 1)
+ {
+ report_error(0, input->current_errno, _("reading %s at sector %"PRIuMAX" %s"),
+ quote(input->current_file->name), input->current_errno_start_sector,
+ skipping ? _("while skipping sectors") : "");
+ }
+
+ input->current_errno = 0;
+ input->current_errno_count = 0;
+ input->current_errno_start_sector = 0;
}
-/* Return the value of STR, interpreted as a non-negative decimal integer,
- optionally multiplied by various values.
- Set *INVALID if STR does not represent a number in this format. */
-
-static uintmax_t
-parse_integer (const char *str, bool *invalid)
+static void
+report_grouped_read_error(input_t* input, uintmax_t sector_number, bool skipping)
{
- uintmax_t n;
- char *suffix;
- enum strtol_error e = xstrtoumax (str, &suffix, 10, &n, "bcEGkKMPTwYZ0");
-
- if (e == LONGINT_INVALID_SUFFIX_CHAR && *suffix == 'x')
- {
- uintmax_t multiplier = parse_integer (suffix + 1, invalid);
+ if (input->current_errno_count > 0 && input->current_errno != errno)
+ {
+ flush_grouped_read_errors(input, skipping);
+ }
+
+ if (input->current_errno_count == 0)
+ {
+ input->current_errno_start_sector = sector_number;
+ }
+
+ input->current_errno = errno;
+ ++input->current_errno_count;
+}
- if (multiplier != 0 && n * multiplier / multiplier != n)
- {
- *invalid = true;
- return 0;
- }
+static void
+report_read_error(input_t* input, size_t read_size, bool skipping)
+{
+ if (read_size == input->sector_size)
+ {
+ report_error(0, errno, _("reading %s at sector %"PRIuMAX" %s"),
+ quote(input->current_file->name), input->current_sector,
+ skipping ? _("while skipping sectors") : "");
+ }
+ else
+ {
+ report_error(0, errno, _("reading %s in sector range %"PRIuMAX"-%"PRIuMAX" %s"),
+ quote(input->current_file->name),
+ input->current_sector,
+ input->current_sector + read_size / input->sector_size - 1,
+ skipping ? _("while skipping sectors") : "");
+ }
+}
- n *= multiplier;
- }
- else if (e != LONGINT_OK)
- {
- *invalid = true;
- return 0;
- }
+static void
+recover_sectors(input_t* input, size_t bytes_to_read)
+{
+ pthread_mutex_lock(&reporting_lock);
+
+ // Clear the progress display to report the recovery effort.
+ fprintf(stderr, "%79s", "\r");
+
+ size_t sectors_to_read = bytes_to_read / input->sector_size;
+ size_t sectors_read = 0;
+ while (sectors_to_read > sectors_read)
+ {
+ // This is a slow loop, so let the user know what's going on.
+ fprintf(stderr, "trying to recover sector %"PRIuMAX"", input->current_sector);
+
+ // Obtain a pointer into the buffer corresponding to the position of the
+ // current sector and attempt to read into that location.
+ char* sector_buffer = input->buffer.data + sectors_read * input->sector_size;
+ ssize_t bytes_read =
+ read_bytes(input->current_file->descriptor, sector_buffer, input->sector_size);
+ fprintf(stderr, "%79s", "\r");
+ if (bytes_read > 0)
+ {
+ flush_grouped_read_errors(input, false);
+ if ((size_t)bytes_read == input->sector_size)
+ {
+ // The sector was read.
+ advance_input(input, input->sector_size);
+ ++sectors_read;
+ }
+ else
+ {
+ // Either more or fewer bytes than a sector was read.
+ report_error(0, 0, _("reading %s, unexpected read size of %zd at sector %"PRIuMAX""),
+ quote(input->current_file->name),
+ bytes_read,
+ input->current_sector);
+ input->state = FATAL_ERROR;
+ break;
+ }
+ }
+ else if (bytes_read == 0 || errno == ENOSPC)
+ {
+ // End of device.
+ flush_grouped_read_errors(input, false);
+ input->state = COMPLETE;
+ break;
+ }
+ else
+ {
+ // Cannot read the sector. Write zeros into the buffer in place of the bad sector.
+ memset(sector_buffer, '\0', input->sector_size);
+ ++sectors_read;
+ ++input->bad_sectors;
+ report_grouped_read_error(input, input->current_sector, false);
+ if (!advance_input_after_sector_read_error(input))
+ {
+ flush_grouped_read_errors(input, false);
+ break;
+ }
+ }
+ }
+ input->buffer.length = sectors_read * input->sector_size;
- return n;
+ pthread_mutex_unlock(&reporting_lock);
}
-/* OPERAND is of the form "X=...". Return true if X is NAME. */
-
-static bool
-operand_is (char const *operand, char const *name)
+static size_t
+calculate_bytes_to_read(input_t* input)
{
- return operand_matches (operand, name, '=');
+ uintmax_t bytes_remaining = input->bytes_to_input - input->bytes_input;
+ return bytes_remaining >= input->buffer_size ? input->buffer_size : bytes_remaining;
}
static void
-scanargs (int argc, char *const *argv)
+read_bytes_from_device(input_t* input)
{
- int i;
- size_t blocksize = 0;
-
- for (i = optind; i < argc; i++)
- {
- char const *name = argv[i];
- char const *val = strchr (name, '=');
-
- if (val == NULL)
- {
- dc3_error (0, 0, _("unrecognized operand %s"), quote (name));
- usage (EXIT_FAILURE);
- }
- val++;
-
- if (operand_is (name,"pattern"))
- {
- dc3_use_pattern = true;
- dc3_pattern_value = make_pattern(val);
- if (NULL == dc3_pattern_value)
- dc3_error(EXIT_FAILURE, 0, _("illegal pattern %s"), quote(val));
- }
-
- else if (operand_is (name,"textpattern"))
- {
- dc3_pattern_value = strdup(val);
- if (NULL == dc3_pattern_value)
- dc3_error(EXIT_FAILURE, 0, _("illegal pattern %s"), quote(val));
- dc3_use_pattern = true;
- dc3_pattern_len = strlen(dc3_pattern_value);
- }
+ memset(input->buffer.data, '\0', input->buffer_size);
+ input->buffer.length = 0;
+
+ size_t bytes_to_read = calculate_bytes_to_read(input);
+ if (bytes_to_read > 0)
+ {
+ ssize_t bytes_read = read_bytes(input->current_file->descriptor, input->buffer.data, bytes_to_read);
+ if (bytes_read > 0)
+ {
+ // The read was successful.
+ input->buffer.length = (size_t)bytes_read;
+ flush_grouped_read_errors(input, false);
+ advance_input(input, (size_t)bytes_read);
+ }
+ else if (bytes_read == 0 || (errno == ENOSPC && bytes_to_read == input->sector_size))
+ {
+ // The read was an attempt to read past the end of the device. If
+ // doing sector-size reads, this is not an error, just the end of the device.
+ flush_grouped_read_errors(input, false);
+ input->state = COMPLETE;
+ }
+ else
+ {
+ if (input->recover_errors)
+ {
+ recover_sectors(input, bytes_to_read);
+ }
+ else
+ {
+ report_read_error(input, bytes_to_read, false);
+ input->state = FATAL_ERROR;
+ }
+ }
+ }
+}
- else if (operand_is (name,"errlog"))
- {
- error_log = fopen(val,"a");
- if (NULL == error_log)
- dc3_error (EXIT_FAILURE, errno, _("opening %s"), quote (val));
- }
+static void
+read_bytes_from_file(input_t* input)
+{
+ memset(input->buffer.data, '\0', input->buffer_size);
+ input->buffer.length = 0;
- else if (operand_is (name,"hashlog"))
- {
- hash_log = fopen(val,"a");
- if (NULL == hash_log)
- dc3_error (EXIT_FAILURE, errno, _("opening %s"), quote (val));
- dc3_hash = true;
- }
+ size_t bytes_to_read = calculate_bytes_to_read(input);
+ if (bytes_to_read > 0)
+ {
+ ssize_t bytes_read = read_bytes(input->current_file->descriptor, input->buffer.data, bytes_to_read);
- else if (operand_is (name,"log"))
- {
- hash_log = fopen(val,"a");
- if (NULL == hash_log)
- dc3_error (EXIT_FAILURE, errno, _("opening %s"), quote (val));
- error_log = hash_log;
- dc3_hash = true;
- }
- else if (operand_is (name,"errors"))
- {
- dc3_group_errors = true;
- }
-
+ if (bytes_read > 0)
+ {
+ input->buffer.length = (size_t)bytes_read;
+ advance_input(input, bytes_read);
+ }
+ else if (bytes_read == 0)
+ {
+ input->state = COMPLETE;
+ }
+ else if (bytes_read < 0)
+ {
+ report_read_error(input, bytes_to_read, false);
+ input->state = FATAL_ERROR;
+ }
+ }
+}
- else if (operand_is (name,"hash"))
- {
- dc3_parse_hash(val);
- dc3_hash = true;
- if (NULL == hash_log)
- hash_log = stderr;
- }
+static void
+open_next_input_file(input_t* input)
+{
+ if (close(input->current_file->descriptor) == 0)
+ {
+ input->current_file->descriptor = FILE_DESCRIPTOR_NOT_SET;
+
+ file_t* next_file = make_file(
+ input->current_file->unparsed_name,
+ input->current_file->number + 1,
+ input->current_file->flags,
+ true,
+ false);
+
+ if (next_file)
+ {
+ next_file->descriptor = open(next_file->name, next_file->flags, 0);
+ if (next_file->descriptor >= 0)
+ {
+ // There is another file in the set.
+ input->current_file = next_file;
+ add_to_file_list(&input->files, next_file);
+ input->state = OPEN;
+ }
+ }
+ }
+ else
+ {
+ input->current_file->descriptor = FILE_DESCRIPTOR_NOT_SET;
+ report_error(0, errno, _("closing %s"), quote(input->current_file->name));
+ input->state = FATAL_ERROR;
+ }
+}
- else if (operand_is (name,"hashconv"))
- {
- if (STREQ (val, "before"))
- dc3_hash_before = true;
- else if (STREQ (val, "after"))
- dc3_hash_before = false;
- else
- dc3_error (EXIT_FAILURE, 0, _("unknown hash convention %s"),
- quote(val));
- }
-
- /*
- else if (operand_is (name,"hashformat"))
- dc3_error (EXIT_FAILURE, 0, _("not implemented yet %s"), quote(name));
- else if (operand_is (name,"totalhashformat"))
- dc3_error (EXIT_FAILURE, 0, _("not implemented yet %s"), quote(name));
- else if (operand_is (name,"rate"))
- dc3_error (0, 0, _("%s is not implemented, ignored"), quote(name));
- */
-
-
- else if (operand_is (name,"progress"))
- dc3_progress = true;
-
- else if (operand_is (name,"sizeprobe"))
- dc3_sizeprobe = true;
-
- else if (operand_is (name,"zork"))
- dc3_error (EXIT_FAILURE, 0, _("It is pitch dark here. You are likely to be eaten by a grue."));
-
- else if (operand_is (name,"splitformat"))
- {
- if (!dc3_validate_splitformat(val))
- dc3_error(EXIT_FAILURE, 0, _("Illegal split format %s"), quote(val));
+static void
+read_bytes_from_files(input_t* input)
+{
+ read_bytes_from_file(input);
+ if (input->state == COMPLETE)
+ {
+ open_next_input_file(input);
+ }
+}
- dc3_split_format = val;
- if (!dc3_split)
+static void
+skip_device_input_sectors(input_t* input)
+{
+ pthread_mutex_lock(&reporting_lock);
+
+ // Skip a sector at a time to allow for error recovery.
+ uintmax_t sectors_to_skip = input->sectors_to_skip;
+ do
+ {
+ // This is a slow loop, so let the user know what's going on.
+ fprintf(stderr, "trying to skip sector %"PRIuMAX"", input->current_sector);
+
+ ssize_t bytes_read =
+ read_bytes(input->current_file->descriptor, input->buffer.data, input->sector_size);
+ fprintf(stderr, "%79s", "\r");
+ if (bytes_read > 0)
+ {
+ // Sucessfully skipped the sector.
+ if (input->recover_errors)
+ {
+ flush_grouped_read_errors(input, true);
+ }
+ advance_input(input, bytes_read);
+
+ // Correct bytes input, since bytes skipped, not input
+ input->bytes_input -= input->sector_size;
+ input->current_file->size_in_bytes -= input->sector_size;
+ }
+ else if (bytes_read == 0 || errno == ENOSPC)
+ {
+ // End of device.
+ if (input->recover_errors)
+ {
+ flush_grouped_read_errors(input, true);
+ }
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, _("encountered end of device reading %s to skip sectors"),
+ quote(input->current_file->name));
+ report_error(0, 0, message);
+ input->state = FATAL_ERROR;
+ break;
+ }
+ else
+ {
+ // Hit a bad sector.
+ if (input->recover_errors)
+ {
+ // Try to jump past the bad sector.
+ report_grouped_read_error(input, input->current_sector, true);
+ if (!advance_input_after_sector_read_error(input))
{
- dc3_split = true;
- dc3_split_bytes = blocksize;
- }
- }
-
- else if (operand_is(name, "ifjoin"))
- {
- const char* base = dc3_filebase(val, ".");
-
- if (base == NULL)
- dc3_error(EXIT_FAILURE, 0, _("Illegal ifjoin format %s - missing extension"), quote(val));
-
- const char* ext = dc3_fileext(val, ".");
+ flush_grouped_read_errors(input, true);
+ break;
+ }
+ else
+ {
+ // Correct bytes input, since bytes skipped, not input
+ input->bytes_input -= input->sector_size;
+ input->current_file->size_in_bytes -= input->sector_size;
+ }
+ }
+ else
+ {
+ report_read_error(input, input->sector_size, true);
+ input->state = FATAL_ERROR;
+ break;
+ }
+ }
+ }
+ while (--sectors_to_skip);
- if (strlen(ext) == 0 || !dc3_validate_splitformat(ext))
- dc3_error(EXIT_FAILURE, 0, _("Illegal ifjoin format %s"), quote(ext));
-
- dc3_ifjoin_base = strdup(base);
- dc3_ifjoin_ext = strdup(ext);
- dc3_ifjoin = true;
+ pthread_mutex_unlock(&reporting_lock);
+}
- conversions_mask |= C_TWOBUFS;
- }
+static void
+skip_file_input_sectors(input_t* input)
+{
+ uintmax_t bytes_to_skip = input->sectors_to_skip * input->sector_size;
+ while (bytes_to_skip)
+ {
+ size_t bytes_to_read =
+ bytes_to_skip >= input->buffer_size ? input->buffer_size : bytes_to_skip;
+ ssize_t bytes_read =
+ read_bytes(input->current_file->descriptor, input->buffer.data, bytes_to_read);
+ if (bytes_read > 0)
+ {
+ advance_input(input, bytes_read);
- else if (operand_is (name,"vf"))
- {
- output_file = val;
- dc3_mode_verify = true;
- }
+ // Correct bytes input, since bytes skipped, not input
+ input->bytes_input -= bytes_read;
+ input->current_file->size_in_bytes -= bytes_read;
- else if (operand_is(name, "vfjoin"))
- {
- const char* base = dc3_filebase(val, ".");
+ bytes_to_skip -= bytes_read;
+ }
+ else if (bytes_read == 0)
+ {
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, _("encountered end of file reading %s to skip sectors"),
+ quote(input->current_file->name));
+ report_error(0, 0, message);
+ input->state = FATAL_ERROR;
+ break;
+ }
+ else
+ {
+ report_read_error(input, input->sector_size, true);
+ input->state = FATAL_ERROR;
+ break;
+ }
+ }
+}
- if (base == NULL)
- dc3_error(EXIT_FAILURE, 0, _("Illegal vfjoin format %s - missing extension"), quote(val));
+static void
+skip_input_sectors(input_t* input)
+{
+ if (input->sectors_to_skip > 0)
+ {
+ // Attempt to perform the skip with lseek(). If the skip is
+ // too large or the lseek() call fails, resort to using read()
+ // for the skip.
+ uintmax_t bytes_to_skip = input->sectors_to_skip * input->sector_size;
+ if (bytes_to_skip <= OFF_T_MAX &&
+ lseek(input->current_file->descriptor, bytes_to_skip, SEEK_CUR) >= 0)
+ {
+ advance_input(input, bytes_to_skip);
- const char* ext = dc3_fileext(val, ".");
+ // Correct bytes input, since bytes skipped, not input
+ input->bytes_input -= bytes_to_skip;
+ input->current_file->size_in_bytes -= bytes_to_skip;
+ }
+ else
+ {
+ if (input->current_file->is_device)
+ {
+ skip_device_input_sectors(input);
+ }
+ else
+ {
+ skip_file_input_sectors(input);
+ }
+ }
+ }
+}
- if (strlen(ext) == 0 || !dc3_validate_splitformat(ext))
- dc3_error(EXIT_FAILURE, 0, _("Illegal vfjoin format %s"), quote(ext));
+// Begin code copied (and modified) from md5deep helpers.c
- dc3_vfjoin_base = strdup(base);
- dc3_vfjoin_ext = strdup(ext);
- dc3_vfjoin = true;
- }
+#ifdef __linux__
- else if (operand_is (name,"verifylog"))
- {
- error_log = fopen(val,"a");
- if (NULL == error_log)
- dc3_error (EXIT_FAILURE, errno, _("opening %s"), quote (val));
- }
+static void
+get_file_stats(file_t* file)
+{
+ file->probed = false;
+ file->is_device = false;
+ file->is_block_device = false;
+ file->probed_sector_size = 0;
+ file->probed_size_in_sectors= 0;
+ file->probed_size_in_bytes = 0;
+
+ struct stat file_info;
+ if (fstat(file->descriptor, &file_info) == 0)
+ {
+ if (S_ISCHR(file_info.st_mode) || S_ISBLK(file_info.st_mode))
+ {
+ // The file is a character device or a block device. It is necessary to
+ // use ioctl to query the OS to get the data to compute the size of the
+ // device.
+ file->is_device = true;
+ file->is_block_device = S_ISBLK(file_info.st_mode);
+
+ uintmax_t size_in_sectors = 0;
+ uintmax_t sector_size = 0;
+ if (ioctl(file->descriptor, BLKGETSIZE, &size_in_sectors) == 0 &&
+ ioctl(file->descriptor, BLKSSZGET, §or_size) == 0)
+ {
+ file->probed_sector_size = sector_size;
+ if (sector_size == 512)
+ {
+ file->probed_size_in_sectors = size_in_sectors;
+ }
+ else
+ {
+ // ioctl() reports device size in terms of 512 byte sectors,
+ // regardless of actual sector size.
+ file->probed_size_in_sectors = size_in_sectors * 512 / sector_size;
+ }
+ file->probed_size_in_bytes = file->probed_size_in_sectors * file->probed_sector_size;
+ file->probed = true;
+ }
+ }
+ else if (S_ISREG(file_info.st_mode))
+ {
+ // The file is a file (an image), so fstat returns a valid file size.
+ file->probed_size_in_bytes = file_info.st_size;
+ file->probed = true;
+ }
+ }
+}
- else if (operand_is (name,"verifylog:"))
- dc3_error (EXIT_FAILURE, 0, _("%s not implemented yet"), quote(name));
+#elif defined (__APPLE__)
- else if (operand_is (name,"of:"))
- {
- output_file = val;
- dc3_pipe_output = true;
- }
-
- else if (operand_is (name, "if"))
- {
- /* To save I/O time, we replace if=/dev/zero with pattern=00 */
- if (STREQ (val,"/dev/zero"))
- {
- dc3_use_pattern = true;
- dc3_pattern_value = make_pattern("00");
- if (NULL == dc3_pattern_value)
- dc3_error(EXIT_FAILURE,0, _("illegal pattern %s"), quote(val));
- }
- else
- input_file = val;
- }
- else if (operand_is (name, "of"))
- output_file = val;
- else if (operand_is (name, "wipe"))
- {
- // wipe a device:
- // use pattern=00 [unless overridden]
- // use count=(sizeprobe output_device) [unless overridden]
- // if, for some reason, sizeprobe is unavailable, run until end of device reported (ENOSPC) and report completion
- output_file = val;
- dc3_mode_wipe = true;
+static void
+get_file_stats(file_t* file)
+{
+ file->probed = false;
+ file->is_device = false;
+ file->is_block_device = false;
+ file->probed_sector_size = 0;
+ file->probed_size_in_sectors= 0;
+ file->probed_size_in_bytes = 0;
+
+ struct stat file_info;
+ if (fstat(file->descriptor, &file_info) == 0)
+ {
+ if (file_info.st_mode & S_IFBLK)
+ {
+ // The file is a character device or a block device. It is necessary to
+ // use ioctl to query the OS to get the data to compute the size of the
+ // device.
+ file->is_device = true;
+ file->is_block_device = true;
+
+ uint32_t sector_size = 0;
+ uint64_t size_in_sectors = 0;
+ if (ioctl(file->descriptor, DKIOCGETBLOCKSIZE, §or_size) >= 0 &&
+ ioctl(file->descriptor, DKIOCGETBLOCKCOUNT, &size_in_sectors) >= 0)
+ {
+ file->probed_size_in_sectors = (uintmax_t)size_in_sectors;
+ file->probed_sector_size = (uintmax_t)sector_size;
+ file->probed_size_in_bytes = file->probed_size_in_sectors * file->probed_sector_size;
+ file->probed = true;
+ }
}
- else if (operand_is (name, "conv"))
- conversions_mask |= parse_symbols (val, conversions,
- N_("invalid conversion"));
- else if (operand_is (name, "iflag"))
- input_flags |= parse_symbols (val, flags,
- N_("invalid input flag"));
- else if (operand_is (name, "oflag"))
- output_flags |= parse_symbols (val, flags,
- N_("invalid output flag"));
- else if (operand_is (name, "status"))
- status_flags |= parse_symbols (val, statuses,
- N_("invalid status flag"));
else
- {
- bool invalid = false;
- uintmax_t n = parse_integer (val, &invalid);
+ {
+ // The file is a file (an image).
+ off_t start_of_file = lseek(file->descriptor, 0 , SEEK_CUR);
+ off_t end_of_file = lseek(file->descriptor, 0, SEEK_END);
+ if (lseek(file->descriptor, start_of_file, SEEK_SET) == 0)
+ {
+ file->probed_size_in_bytes = end_of_file - start_of_file;
+ file->probed = true;
+ }
+ }
+ }
+}
- if (operand_is (name,"hashwindow"))
- {
- invalid |= ( 0 == n);
- dc3_hash_window = n;
- dc3_hash = true;
- }
+#elif defined (__CYGWIN__)
- else if (operand_is (name,"progresscount"))
- {
- invalid |= (0 == n);
- dc3_progress_count = n;
- dc3_progress = true;
- }
+static void
+get_file_stats(file_t* file)
+{
+ file->probed = false;
+ file->is_device = false;
+ file->is_block_device = false;
+ file->probed_sector_size = 0;
+ file->probed_size_in_sectors= 0;
+ file->probed_size_in_bytes = 0;
+
+ struct stat file_info;
+ if (fstat(file->descriptor, &file_info) == 0)
+ {
+ if (S_ISCHR(file_info.st_mode) || S_ISBLK(file_info.st_mode))
+ {
+ // The file is a character device or a block device. It is necessary to
+ // use ioctl to query the OS to get the data to compute the size of the
+ // device.
+ file->is_device = true;
+ file->is_block_device = S_ISBLK(file_info.st_mode);
+
+ // Use temp variables to guarantee file->size_in_sectors and file->sector_size
+ // are unchanged if the ioctl calls fail.
+ uintmax_t size_in_sectors = 0;
+ uintmax_t sector_size = 0;
+ if (ioctl(file->descriptor, BLKGETSIZE, &size_in_sectors) == 0 &&
+ ioctl(file->descriptor, BLKSSZGET, §or_size) == 0)
+ {
+ file->probed_size_in_sectors = size_in_sectors;
+ file->probed_sector_size = sector_size;
+ file->probed_size_in_bytes = file->probed_size_in_sectors * file->probed_sector_size;
+ file->probed = true;
+ }
+ }
+ else if (S_ISREG(file_info.st_mode))
+ {
+ // The file is a file (an image), so fstat returns a valid file size.
+ file->probed_size_in_bytes = file_info.st_size;
+ file->probed = true;
+ }
+ }
+}
- else if (operand_is (name,"split"))
- {
- invalid |= ( 0 == n);
- dc3_split_bytes = n;
- dc3_split = true;
- }
+#endif // ifdef __LINUX__
- else if (operand_is (name, "ibs"))
- {
- invalid |= ! (0 < n && n <= MAX_BLOCKSIZE (INPUT_BLOCK_SLOP));
- input_blocksize = n;
- conversions_mask |= C_TWOBUFS;
- }
- else if (operand_is (name, "obs"))
- {
- invalid |= ! (0 < n && n <= MAX_BLOCKSIZE (OUTPUT_BLOCK_SLOP));
- output_blocksize = n;
- conversions_mask |= C_TWOBUFS;
- }
- else if (operand_is (name, "bs"))
- {
- invalid |= ! (0 < n && n <= MAX_BLOCKSIZE (INPUT_BLOCK_SLOP));
- blocksize = n;
- }
- else if (operand_is (name, "cbs"))
+// End code copied (and modified) from md5deep helpers.c
+
+static bool
+probe_file(file_t* file)
+{
+ if (!file->probed)
+ {
+ get_file_stats(file);
+ if (file->probed && file->part_of_set)
+ {
+ // Generate the set of potential file names and attempt to
+ // open the set of files. Stop when file extensions are exhausted
+ // or the next file does not exist. Note that there is an assumption
+ // here that the set of files was generated by this program, so
+ // exhaustion of file extensions should not be an issue.
+ file_t next_file;
+ next_file.number = file->number;
+ next_file.probed = false;
+ next_file.probed_size_in_bytes = 0;
+ next_file.probed_sector_size = 0;
+ next_file.name = generate_file_name(file->unparsed_name, ++next_file.number);
+ while (next_file.name)
+ {
+ next_file.descriptor = open(next_file.name, O_RDONLY, 0);
+ if (next_file.descriptor >= 0)
{
- invalid |= ! (0 < n && n <= SIZE_MAX);
- conversion_blocksize = n;
+ // This is another file in the set, get its size.
+ get_file_stats(&next_file);
+ if (next_file.probed)
+ {
+ file->probed_size_in_bytes += next_file.probed_size_in_bytes;
+ }
+ else
+ {
+ report_error(0, 0, _("probe of %s failed"), quote(next_file.name));
+ file->probed = false;
+ }
+
+ if (close(next_file.descriptor) != 0)
+ {
+ report_error(0, errno, _("closing %s after size probe"), quote(next_file.name));
+ file->probed = false;
+ }
+
+ free(next_file.name);
+ if (!file->probed)
+ {
+ break;
+ }
}
- else if (operand_is (name, "skip"))
- skip_sectors = n;
- else if (operand_is (name, "seek"))
- seek_sectors = n;
- else if (operand_is (name, "count"))
- max_sectors = n;
- else
+ else
{
- dc3_error (0, 0, _("unrecognized operand %s"), quote (name));
- usage (EXIT_FAILURE);
+ // The next file does not exist, which is not an error (see comment above).
+ free(next_file.name);
+ break;
}
- if (invalid)
- dc3_error (EXIT_FAILURE, 0, _("invalid number %s"), quote (val));
- }
- }
-
- if (blocksize)
- input_blocksize = output_blocksize = blocksize;
-
- /* If bs= was given, both `input_blocksize' and `output_blocksize' will
- have been set to positive values. If either has not been set,
- bs= was not given, so make sure two buffers are used. */
- if (input_blocksize == 0 || output_blocksize == 0)
- conversions_mask |= C_TWOBUFS;
- if (input_blocksize == 0)
- input_blocksize = DEFAULT_BLOCKSIZE;
- if (output_blocksize == 0)
- output_blocksize = DEFAULT_BLOCKSIZE;
- if (conversion_blocksize == 0)
- conversions_mask &= ~(C_BLOCK | C_UNBLOCK);
-
- // automatically enable "dynamic" error recovery when conv=noerror,sync specified
- if (conversions_mask & (C_SYNC | C_NOERROR))
- conversions_mask |= C_DYNAMIC;
-
- if (input_flags & (O_DSYNC | O_SYNC))
- input_flags |= O_RSYNC;
-
- if (multiple_bits_set (conversions_mask & (C_ASCII | C_EBCDIC | C_IBM)))
- dc3_error (EXIT_FAILURE, 0, _("cannot combine any two of {ascii,ebcdic,ibm}"));
- if (multiple_bits_set (conversions_mask & (C_BLOCK | C_UNBLOCK)))
- dc3_error (EXIT_FAILURE, 0, _("cannot combine block and unblock"));
- if (multiple_bits_set (conversions_mask & (C_LCASE | C_UCASE)))
- dc3_error (EXIT_FAILURE, 0, _("cannot combine lcase and ucase"));
- if (multiple_bits_set (conversions_mask & (C_EXCL | C_NOCREAT)))
- dc3_error (EXIT_FAILURE, 0, _("cannot combine excl and nocreat"));
-
- if (input_file != NULL && dc3_ifjoin)
- dc3_error (EXIT_FAILURE, 0, _("cannot combine if= and ifjoin="));
-
- if (dc3_mode_verify && dc3_vfjoin)
- dc3_error (EXIT_FAILURE, 0, _("cannot combine vf= and vfjoin="));
-
- if (dc3_split && (dc3_split_bytes % input_blocksize != 0))
- dc3_error (EXIT_FAILURE, 0, _("error: split size must be a multiple of block size (currently %zd)"), input_blocksize);
-
- if (input_file != NULL && dc3_mode_wipe)
- dc3_error (EXIT_FAILURE, 0, _("cannot combine if= and wipe="));
- // TODO: should check for wipe= and of=
- if (dc3_mode_wipe && dc3_ifjoin)
- dc3_error (EXIT_FAILURE, 0, _("cannot combine wipe= and ifjoin="));
- if (dc3_mode_wipe && dc3_vfjoin)
- dc3_error (EXIT_FAILURE, 0, _("cannot combine wipe= and vfjoin="));
-
- if (dc3_mode_wipe && !dc3_use_pattern)
- {
- dc3_use_pattern = true;
- dc3_pattern_value = make_pattern("00");
- if (NULL == dc3_pattern_value)
- dc3_error(EXIT_FAILURE,0, _("illegal pattern %s"), quote("00"));
- }
-
-
- if (dc3_ifjoin)
- dc3_generate_split_filename(dc3_ifjoin_base, dc3_ifjoin_ext, dc3_ifjoin_number, &input_file);
-
- if (dc3_vfjoin)
- {
- dc3_generate_split_filename(dc3_vfjoin_base, dc3_vfjoin_ext, dc3_vfjoin_number, &output_file);
- dc3_mode_verify = true;
- }
-}
-
-/* Convert argv array to a single string
- */
-
-static char*
-dc3_save_cmdline(int argc, char** argv)
-{
- size_t len = 1; // at least 1, for terminating NUL
-
- for (int i=0; i<argc; i++)
- {
- len += strlen(argv[i]);
- if (i<(argc-1))
- len += 1;
- }
-
- char* cmdline = NULL;
- cmdline = xmalloc(len);
-
- char* cmdline_orig = cmdline;
-
- for (int i=0; i<argc; i++)
- {
- for (size_t j=0; j<strlen(argv[i]); j++)
- {
- *cmdline = argv[i][j];
- cmdline++;
- }
- if (i<(argc-1))
- {
- *cmdline = ' ';
- cmdline++;
- }
- }
-
- *cmdline = '\0';
-
- return cmdline_orig;
+ next_file.name = generate_file_name(file->unparsed_name, ++next_file.number);
+ }
+ }
+ }
+ return file->probed;
}
-void dc3_print_flags(FILE* stream, bool newlines)
+static void
+open_file_input(input_t* input)
{
-#ifdef DEFAULT_BLOCKSIZE
- fprintf(stream, " DEFAULT_BLOCKSIZE=%d", DEFAULT_BLOCKSIZE);
- if (newlines) fprintf(stream, "\n");
-#endif
-
-
-#ifdef DEFAULT_HASH_MD5
- fprintf(stream, " DEFAULT_HASH_MD5");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-#ifdef DEFAULT_HASH_SHA1
- fprintf(stream, " DEFAULT_HASH_SHA1");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-#ifdef DEFAULT_HASH_SHA256
- fprintf(stream, " DEFAULT_HASH_SHA256");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-#ifdef DEFAULT_HASH_512
- fprintf(stream, " DEFAULT_HASH_512");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-
-#ifdef DEFAULT_HASHCONV_BEFORE
- fprintf(stream, " DEFAULT_HASHCONV_BEFORE");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-#ifdef DEFAULT_HASHCONV_AFTER
- fprintf(stream, " DEFAULT_HASHCONV_AFTER");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-
-#ifdef DEFAULT_PROGRESS
- fprintf(stream, " DEFAULT_PROGRESS");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-#ifdef DEFAULT_PROGRESSCOUNT
- fprintf(stream, " DEFAULT_PROGRESSCOUNT=%d", DEFAULT_PROGRESSCOUNT);
- if (newlines) fprintf(stream, "\n");
-#endif
-
-#ifdef DEFAULT_IFLAG_DIRECT
- fprintf(stream, " DEFAULT_IFLAG_DIRECT");
- if (newlines) fprintf(stream, "\n");
-#endif
-
-#ifdef DEFAULT_SIZEPROBE
- fprintf(stream, " DEFAULT_SIZEPROBE");
- if (newlines) fprintf(stream, "\n");
-#endif
-
- fprintf(stream, "\n");
+ input->current_file->descriptor = open(input->current_file->name, input->current_file->flags, 0);
+ if (input->current_file->descriptor >= 0)
+ {
+ if (probe_file(input->current_file))
+ {
+ input->state = OPEN;
+ input->bytes_to_input = input->current_file->probed_size_in_bytes;
+ if (input->max_sectors_to_input != INFINITE_SECTORS)
+ {
+ uintmax_t max_bytes_to_input = input->max_sectors_to_input * input->sector_size;
+ if (max_bytes_to_input < input->bytes_to_input)
+ {
+ input->bytes_to_input = max_bytes_to_input;
+ }
+ }
+ skip_input_sectors(input);
+ }
+ else
+ {
+ report_error(0, errno, _("probing %s for bytes to input"), quote(input->current_file->name));
+ input->state = FATAL_ERROR;
+ }
+ }
+ else
+ {
+ report_error(0, errno, _("opening %s"), quote(input->current_file->name));
+ input->state = FATAL_ERROR;
+ }
}
-/* Fix up translation table. */
-
static void
-apply_translations (void)
+disconnect_from_std_in(input_t* input)
{
- int i;
-
- if (conversions_mask & C_ASCII)
- translate_charset (ebcdic_to_ascii);
-
- if (conversions_mask & C_UCASE)
- {
- for (i = 0; i < 256; i++)
- trans_table[i] = toupper (trans_table[i]);
- translation_needed = true;
- }
- else if (conversions_mask & C_LCASE)
- {
- for (i = 0; i < 256; i++)
- trans_table[i] = tolower (trans_table[i]);
- translation_needed = true;
- }
-
- if (conversions_mask & C_EBCDIC)
- {
- translate_charset (ascii_to_ebcdic);
- newline_character = ascii_to_ebcdic['\n'];
- space_character = ascii_to_ebcdic[' '];
- }
- else if (conversions_mask & C_IBM)
- {
- translate_charset (ascii_to_ibm);
- newline_character = ascii_to_ibm['\n'];
- space_character = ascii_to_ibm[' '];
- }
+ input->state = COMPLETE;
+ input->current_file->descriptor = FILE_DESCRIPTOR_NOT_SET;
}
-/* Apply the character-set translations specified by the user
- to the NREAD bytes in BUF. */
-
static void
-translate_buffer (char *buf, size_t nread)
+connect_to_std_in(input_t* input)
{
- char *cp;
- size_t i;
-
- for (i = nread, cp = buf; i; i--, cp++)
- *cp = trans_table[to_uchar (*cp)];
+ input->current_file->descriptor = STDIN_FILENO;
+ input->bytes_to_input = INFINITE_BYTES;
+ input->state = OPEN;
}
-/* If true, the last char from the previous call to `swab_buffer'
- is saved in `saved_char'. */
-static bool char_is_saved = false;
-
-/* Odd char from previous call. */
-static char saved_char;
-
-/* Swap NREAD bytes in BUF, plus possibly an initial char from the
- previous call. If NREAD is odd, save the last char for the
- next call. Return the new start of the BUF buffer. */
-
-static char *
-swab_buffer (char *buf, size_t *nread)
+static void
+close_pattern_input(input_t* input)
{
- char *bufstart = buf;
- char *cp;
- size_t i;
-
- /* Is a char left from last time? */
- if (char_is_saved)
- {
- *--bufstart = saved_char;
- (*nread)++;
- char_is_saved = false;
- }
-
- if (*nread & 1)
- {
- /* An odd number of chars are in the buffer. */
- saved_char = bufstart[--*nread];
- char_is_saved = true;
- }
-
- /* Do the byte-swapping by moving every second character two
- positions toward the end, working from the end of the buffer
- toward the beginning. This way we only move half of the data. */
-
- cp = bufstart + *nread; /* Start one char past the last. */
- for (i = *nread / 2; i; i--, cp -= 2)
- *cp = *(cp - 2);
-
- return ++bufstart;
+ input->state = COMPLETE;
}
-/* Add OFFSET to the input offset, setting the overflow flag if
- necessary. */
-
static void
-advance_input_offset (uintmax_t offset)
+read_bytes_from_pattern(input_t* input)
{
- input_offset += offset;
- if (input_offset < offset)
- input_offset_overflow = true;
+ // The pattern is already loaded into the buffer, so only bookkeeping is required.
+ size_t bytes_read = calculate_bytes_to_read(input);
+ input->buffer.length = bytes_read;
+ advance_input(input, bytes_read);
}
-/*
static void
-dc3_rewind_input_offset (uintmax_t offset)
+open_pattern_input(input_t* input)
{
- //fprintf(stderr, "dc3_rewind_input_offset called with offset=%16jx\n", offset);
- //fprintf(stderr, "dc3_rewind_input_offset input_offset was %16jx\n", input_offset);
- uintmax_t old = input_offset;
- input_offset -= offset;
- //if (input_offset > offset)
- if (input_offset > old)
- input_offset_overflow = true;
- //fprintf(stderr, "dc3_rewind_input_offset input_offset now %16jx\n", input_offset);
+ // Load the pattern into the input buffer.
+ for (uintmax_t i = 0; i < input->buffer_size; ++i)
+ {
+ input->buffer.data[i] = input->pattern[i % input->pattern_length];
+ }
+ input->buffer.length = input->buffer_size;
+
+ input->bytes_to_input = input->sector_size * input->max_sectors_to_input;
+ input->state = OPEN;
}
-*/
-
-/* This is a wrapper for lseek. It detects and warns about a kernel
- bug that makes lseek a no-op for tape devices, even though the kernel
- lseek return value suggests that the function succeeded.
-
- The parameters are the same as those of the lseek function, but
- with the addition of FILENAME, the name of the file associated with
- descriptor FDESC. The file name is used solely in the warning that's
- printed when the bug is detected. Return the same value that lseek
- would have returned, but when the lseek bug is detected, return -1
- to indicate that lseek failed.
-
- The offending behavior has been confirmed with an Exabyte SCSI tape
- drive accessed via /dev/nst0 on both Linux-2.2.17 and Linux-2.4.16. */
-#ifdef __linux__
-
-# include <sys/mtio.h>
-
-# define MT_SAME_POSITION(P, Q) \
- ((P).mt_resid == (Q).mt_resid \
- && (P).mt_fileno == (Q).mt_fileno \
- && (P).mt_blkno == (Q).mt_blkno)
-
-static off_t
-skip_via_lseek (char const *filename, int fdesc, off_t offset, int whence)
+static void
+set_exit_code(task_t* task)
{
- struct mtget s1;
- struct mtget s2;
- bool got_original_tape_position = (ioctl (fdesc, MTIOCGET, &s1) == 0);
- /* known bad device type */
- /* && s.mt_type == MT_ISSCSI2 */
-
- off_t new_position = lseek (fdesc, offset, whence);
- if (0 <= new_position
- && got_original_tape_position
- && ioctl (fdesc, MTIOCGET, &s2) == 0
- && MT_SAME_POSITION (s1, s2))
- {
- dc3_error (0, 0, _("warning: working around lseek kernel bug for file (%s)\n\
- of mt_type=0x%0lx -- see <sys/mtio.h> for the list of types"),
- filename, s2.mt_type);
- errno = 0;
- new_position = -1;
- }
-
- return new_position;
+ pthread_mutex_lock(task->signalling_lock);
+ task->completed = true;
+ if (task->aborted)
+ {
+ task->exit_code = DC3DD_EXIT_ABORTED;
+ }
+
+ if (task->exit_code != DC3DD_EXIT_ABORTED)
+ {
+ task->exit_code = DC3DD_EXIT_COMPLETED;
+
+ if (task->input->state != COMPLETE)
+ {
+ task->exit_code = DC3DD_EXIT_FAILED;
+ }
+ else
+ {
+ output_t* output = task->outputs;
+ while (output)
+ {
+ if (output->state != COMPLETE)
+ {
+ task->exit_code = DC3DD_EXIT_FAILED;
+ break;
+ }
+ output = output->next_output;
+ }
+ }
+ }
+ pthread_mutex_unlock(task->signalling_lock);
}
-#else
-# define skip_via_lseek(Filename, Fd, Offset, Whence) lseek (Fd, Offset, Whence)
-#endif
-/* Throw away RECORDS blocks of BLOCKSIZE bytes on file descriptor FDESC,
- which is open with read permission for FILE. Store up to BLOCKSIZE
- bytes of the data at a time in BUF, if necessary. RECORDS must be
- nonzero. If fdesc is STDIN_FILENO, advance the input offset.
- Return the number of records remaining, i.e., that were not skipped
- because EOF was reached. */
-
-static uintmax_t
-skip (int fdesc, char const *file, uintmax_t records, size_t blocksize,
- char *buf)
+static void
+close_IO(task_t* task)
{
- uintmax_t offset = records * blocksize;
-
- /* Try lseek and if an error indicates it was an inappropriate operation --
- or if the file offset is not representable as an off_t --
- fall back on using read. */
-
- errno = 0;
- if (records <= OFF_T_MAX / blocksize
- && 0 <= skip_via_lseek (file, fdesc, offset, SEEK_CUR))
- {
- if (fdesc == STDIN_FILENO)
- advance_input_offset (offset);
- return 0;
- }
- else
- {
- int lseek_errno = errno;
-
- do
- {
- ssize_t nread = iread (fdesc, buf, blocksize);
- if (nread < 0)
- {
- if (fdesc == STDIN_FILENO)
- {
- dc3_error (0, errno, _("skip: reading %s"), quote (file));
- if (conversions_mask & C_NOERROR)
- {
- print_stats ();
- continue;
- }
- }
- else
- dc3_error (0, lseek_errno, _("%s: cannot seek"), quote (file));
- quit (EXIT_FAILURE);
- }
-
- if (nread == 0)
- break;
- if (fdesc == STDIN_FILENO)
- advance_input_offset (nread);
- }
- while (--records != 0);
-
- return records;
- }
+ task->input->close(task->input);
+
+ output_t* output = task->outputs;
+ while (output)
+ {
+ output->close(output);
+ output = output->next_output;
+ }
}
-/* Advance the input by NBYTES if possible, after a read error.
- The input file offset may or may not have advanced after the failed
- read; adjust it to point just after the bad record regardless.
- Return true if successful, or if the input is already known to not
- be seekable. */
-
-static bool
-advance_input_after_read_error (size_t nbytes)
+static void
+wait_for_output_threads(task_t* task)
{
- if (! input_seekable)
- {
- if (input_seek_errno == ESPIPE)
- return true;
- errno = input_seek_errno;
- }
- else
- {
- off_t offset;
- advance_input_offset (nbytes);
- input_offset_overflow |= (OFF_T_MAX < input_offset);
- if (input_offset_overflow)
- {
- dc3_error (0, 0, _("offset overflow while reading file %s"),
- quote (input_file));
-
- /* Suppress duplicate diagnostics. */
- input_seekable = false;
- input_seek_errno = ESPIPE;
-
- return false;
- }
- offset = lseek (STDIN_FILENO, 0, SEEK_CUR);
- if (0 <= offset)
- {
- off_t diff;
- if (offset == input_offset)
- return true;
- diff = input_offset - offset;
- if (! (0 <= diff && diff <= nbytes))
- {
- dc3_error (0, 0, _("advance: warning: invalid file offset after failed read"));
- }
- if (0 <= skip_via_lseek (input_file, STDIN_FILENO, diff, SEEK_CUR))
- return true;
- if (errno == 0)
- dc3_error (0, 0, _("cannot work around kernel bug after all"));
- }
- }
-
- dc3_error (0, errno, _("%s: cannot seek"), quote (input_file));
-
- /* Suppress duplicate diagnostics. */
- input_seekable = false;
- input_seek_errno = ESPIPE;
+ output_t* output = task->outputs;
+ while (output)
+ {
+ // Set the done buffering flag on the output buffer queue and
+ // signal not empty to release the output thread, since it may be
+ // blocked waiting for the next buffer to be copied into the
+ // output buffer queue.
+ pthread_mutex_lock(output->buffer_queue->lock);
+ output->buffer_queue->done_buffering = true;
+ pthread_cond_signal(output->buffer_queue->not_empty);
+ pthread_mutex_unlock(output->buffer_queue->lock);
+
+ pthread_join(output->thread, NULL);
+ output = output->next_output;
+ }
+}
- return false;
+static void
+produce_bytes(task_t* task)
+{
+ input_t* input = task->input;
+ // Produce an input buffer and copy it to each output buffer queue.
+ input->produce_bytes(input);
+ if (input->buffer.length > 0)
+ {
+ output_t* output = task->outputs;
+ while (output)
+ {
+ // Wait for an empty buffer in the buffer buffer queue for this
+ // output.
+ buffer_queue_t* buffer_queue = output->buffer_queue;
+ pthread_mutex_lock(buffer_queue->lock);
+ if (buffer_queue->buffers_used == buffer_queue->number_of_buffers)
+ {
+ pthread_cond_wait(buffer_queue->not_full, buffer_queue->lock);
+ }
+ pthread_mutex_unlock(buffer_queue->lock);
+
+ // Copy the input buffer into the buffer queue.
+ memcpy(buffer_queue->buffers[buffer_queue->next_available_buffer].data,
+ input->buffer.data, input->buffer.length);
+ buffer_queue->buffers[buffer_queue->next_available_buffer].length = input->buffer.length;
+
+ // Notify the output thread that another buffer is available.
+ // This will release the output thread if it is blocked waiting
+ // for bytes to output.
+ pthread_mutex_lock(buffer_queue->lock);
+ buffer_queue->next_available_buffer =
+ (buffer_queue->next_available_buffer + 1) % buffer_queue->number_of_buffers;
+ ++buffer_queue->buffers_used;
+ pthread_cond_signal(buffer_queue->not_empty);
+ pthread_mutex_unlock(buffer_queue->lock);
+
+ output = output->next_output;
+ }
+ }
}
-/*
static bool
-dc3_rewind_input_after_read_error (size_t nbytes)
+is_task_completed(task_t* task)
{
- if (nbytes == 0) // no-op
- return true;
-
- if (! input_seekable)
- {
- if (input_seek_errno == ESPIPE)
- return true;
- errno = input_seek_errno;
- }
- else
- {
- off_t offset;
- dc3_rewind_input_offset (nbytes);
- input_offset_overflow |= (OFF_T_MAX < input_offset);
- if (input_offset_overflow)
- {
- dc3_error (0, 0, _("offset overflow while reading file %s"),
- quote (input_file));
- return false;
- }
- offset = lseek (STDIN_FILENO, 0, SEEK_CUR);
- if (0 <= offset)
- {
- off_t diff;
- if (offset == input_offset)
- return true;
- diff = input_offset - offset;
- //if (! (0 <= diff && diff <= nbytes))
- if (! (diff <= 0 && (-1*nbytes) <= diff) )
- {
- dc3_error (0, 0, _("rewind: warning: invalid file offset after failed read"));
- }
-
- if (0 <= skip_via_lseek (input_file, STDIN_FILENO, diff, SEEK_CUR))
- return true;
- if (errno == 0)
- dc3_error (0, 0, _("cannot work around kernel bug after all"));
- }
- }
+ pthread_mutex_lock(task->signalling_lock);
+
+ // Check for task killed.
+ task->completed = task->aborted;
+
+ // Check for bytes to input reached.
+ if (!task->completed && task->input->bytes_to_input != INFINITE_BYTES)
+ {
+ task->completed = task->input->bytes_to_input - task->input->bytes_input <= 0;
+ }
+
+ // Check for input completed or in an error state.
+ if (!task->completed)
+ {
+ task->completed = task->input->state == COMPLETE || task->input->state == FATAL_ERROR;
+ }
+
+ // Check for an output in an error state.
+ if (!task->completed)
+ {
+ output_t* output = task->outputs;
+ while (output)
+ {
+ if (output->state == FATAL_ERROR)
+ {
+ task->completed = true;
+ break;
+ }
+ output = output->next_output;
+ }
+ }
- dc3_error (0, errno, _("%s: cannot seek"), quote (input_file));
- return false;
+ pthread_mutex_unlock(task->signalling_lock);
+
+ return task->completed;
}
-*/
-
-/* Copy NREAD bytes of BUF, with no conversions. */
static void
-copy_simple (char const *buf, size_t nread)
+start_output_threads(task_t* task)
{
- const char *start = buf; /* First uncopied char in BUF. */
-
- do
- {
- size_t nfree = MIN (nread, output_blocksize - oc);
-
- memcpy (obuf + oc, start, nfree);
-
- nread -= nfree; /* Update the number of bytes left to copy. */
- start += nfree;
- oc += nfree;
- if (oc >= output_blocksize)
- write_output ();
- }
- while (nread != 0);
+ output_t* output = task->outputs;
+ while (output)
+ {
+ start_thread(&output->thread, produce_output, output);
+ output = output->next_output;
+ }
+
+ usleep(10*1000);
}
-/* Copy NREAD bytes of BUF, doing conv=block
- (pad newline-terminated records to `conversion_blocksize',
- replacing the newline with trailing spaces). */
-
-static void
-copy_with_block (char const *buf, size_t nread)
+static bool
+open_IO(task_t* task)
{
- size_t i;
-
- for (i = nread; i; i--, buf++)
- {
- if (*buf == newline_character)
- {
- if (col < conversion_blocksize)
- {
- size_t j;
- for (j = col; j < conversion_blocksize; j++)
- output_char (space_character);
- }
- col = 0;
- }
- else
- {
- if (col == conversion_blocksize)
- r_truncate++;
- else if (col < conversion_blocksize)
- output_char (*buf);
- col++;
- }
- }
+ task->input->open(task->input);
+ if (task->input->state == OPEN)
+ {
+ output_t* output = task->outputs;
+ while (output)
+ {
+ output->open(output);
+ if (output->state != OPEN)
+ {
+ close_IO(task);
+ return false;
+ }
+ output = output->next_output;
+ }
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
}
-/* Copy NREAD bytes of BUF, doing conv=unblock
- (replace trailing spaces in `conversion_blocksize'-sized records
- with a newline). */
-
-static void
-copy_with_unblock (char const *buf, size_t nread)
+static void*
+execute_task(void* arg)
{
- size_t i;
- char c;
- static size_t pending_spaces = 0;
-
- for (i = 0; i < nread; i++)
- {
- c = buf[i];
-
- if (col++ >= conversion_blocksize)
- {
- col = pending_spaces = 0; /* Wipe out any pending spaces. */
- i--; /* Push the char back; get it later. */
- output_char (newline_character);
- }
- else if (c == space_character)
- pending_spaces++;
- else
- {
- /* `c' is the character after a run of spaces that were not
- at the end of the conversion buffer. Output them. */
- while (pending_spaces)
- {
- output_char (space_character);
- --pending_spaces;
- }
- output_char (c);
- }
- }
+ // This is the thread function for task (i.e., input) threads.
+ task_t* task = (task_t*)arg;
+ if (open_IO(task))
+ {
+ start_output_threads(task);
+ while (!is_task_completed(task))
+ {
+ produce_bytes(task);
+ }
+ wait_for_output_threads(task);
+ close_IO(task);
+ }
+ set_exit_code(task);
+ pthread_exit(NULL);
}
-/* Set the file descriptor flags for FD that correspond to the nonzero bits
- in ADD_FLAGS. The file's name is NAME. */
-
static void
-set_fd_flags (int fd, int add_flags, char const *name)
+abort_job(job_t* job)
{
- /* Ignore file creation flags that are no-ops on file descriptors. */
- add_flags &= ~ (O_NOCTTY | O_NOFOLLOW);
-
- if (add_flags)
- {
- int old_flags = fcntl (fd, F_GETFL);
- int new_flags = old_flags | add_flags;
- bool ok = true;
- if (old_flags < 0)
- ok = false;
- else if (old_flags != new_flags)
- {
- if (new_flags & (O_DIRECTORY | O_NOLINKS))
- {
- /* NEW_FLAGS contains at least one file creation flag that
- requires some checking of the open file descriptor. */
- struct stat st;
- if (fstat (fd, &st) != 0)
- ok = false;
- else if ((new_flags & O_DIRECTORY) && ! S_ISDIR (st.st_mode))
- {
- errno = ENOTDIR;
- ok = false;
- }
- else if ((new_flags & O_NOLINKS) && 1 < st.st_nlink)
- {
- errno = EMLINK;
- ok = false;
- }
- new_flags &= ~ (O_DIRECTORY | O_NOLINKS);
- }
-
- if (ok && old_flags != new_flags
- && fcntl (fd, F_SETFL, new_flags) == -1)
- ok = false;
- }
+ task_t* task = job->tasks;
+ while (task)
+ {
+ pthread_mutex_lock(task->signalling_lock);
+ task->aborted = true;
+ pthread_mutex_unlock(task->signalling_lock);
+ task = task->next_task;
+ }
+}
- if (!ok)
- dc3_error (EXIT_FAILURE, errno, _("setting flags for %s"), quote (name));
- }
+static bool
+job_is_active(job_t* job)
+{
+ bool is_active = false;
+
+ task_t* task = job->tasks;
+ while (task)
+ {
+ pthread_mutex_lock(task->signalling_lock);
+ is_active = !task->completed && !task->aborted;
+ pthread_mutex_unlock(task->signalling_lock);
+
+ if (is_active)
+ {
+ break;
+ }
+
+ task = task->next_task;
+ }
+
+ return is_active;
}
-static void
-dc3_record_previous_errors(void)
+static void*
+monitor_job(void *arg)
{
- uintmax_t start_sec = dc3_sectors_r_full + dc3_sectors_r_partial - dc3_previous_error_count;
- uintmax_t end_sec = dc3_sectors_r_full + dc3_sectors_r_partial - 1;
+ // This is the thread function for a job monitoring thread.
+ // The thread detects when the job is completed and emits progress reports.
+ job_t* job = (job_t*)arg;
+
+ struct timeval time_now;
+ struct timespec next_progress_check_time;
+ while (true)
+ {
+ // Compute the absolute time of next job progress check.
+ gettimeofday(&time_now, NULL);
+ next_progress_check_time.tv_sec = time_now.tv_sec + job->progress_interval_in_ms / 1000;
+ next_progress_check_time.tv_nsec =
+ time_now.tv_usec * 1000 + (job->progress_interval_in_ms % 1000) * 1000000;
+ if (next_progress_check_time.tv_nsec >= 1000000000)
+ {
+ next_progress_check_time.tv_nsec -= 1000000000;
+ ++next_progress_check_time.tv_sec;
+ }
+
+ // Wait until either the signal handling thread receives an interrupt or
+ // it's time for another progress check and report.
+ pthread_mutex_lock(&signalling_lock);
+ if (pthread_cond_timedwait(interrupted, &signalling_lock, &next_progress_check_time) == ETIMEDOUT)
+ {
+ pthread_mutex_unlock(&signalling_lock);
+ job->report_progress(job, false);
+ if (!job_is_active(job))
+ {
+ break;
+ }
+ }
+ else
+ {
+ abort_job(job);
+ break;
+ }
+ }
- dc3_error(0,
- 0,
- _("Recorded %"PRIuMAX" %s from sector %"PRIuMAX" through %"PRIuMAX),
- dc3_previous_error_count,
- quote(strerror(dc3_previous_error_errno)),
- skip_sectors+start_sec, skip_sectors+end_sec);
+ pthread_exit(NULL);
}
-
-void
-dc3_read_error(void)
+static void*
+await_interrupt_signal(void* arg)
{
- if (dc3_group_errors)
- {
- if (!dc3_previous_error)
- {
- dc3_previous_error = true;
- }
- else if (errno != dc3_previous_error_errno)
- {
- /* We have to display the old errors before
- starting to record this new series */
- dc3_record_previous_errors();
- dc3_previous_error_count = 0;
- }
-
- dc3_previous_error_errno = errno;
- dc3_previous_error_count++;
- }
- else
- {
- uintmax_t block = r_full + r_partial;
- uintmax_t start_sec = block * (input_blocksize/dc3_sectorsize);
- uintmax_t end_sec = (block+1) * (input_blocksize/dc3_sectorsize) - 1;
-
- if (start_sec == end_sec)
- dc3_error( 0, errno, _("reading %s at sector %jd"), quote (input_file), skip_sectors+start_sec);
- else
- dc3_error( 0, errno, _("reading %s at sectors %jd-%jd"), quote (input_file), skip_sectors+start_sec, skip_sectors+end_sec );
- }
+ // This is the thread function for a thread that merely waits for an
+ // interrupt signal.
+ arg = arg; // Avoid a warning from the compiler when compiling with -Wextra, -Wall flags.
+
+ // Wait for an interrupt signal.
+ int sig = 0;
+ sigset_t set;
+ sigemptyset(&set);
+ sigaddset(&set, SIGINT);
+ sigwait(&set, &sig);
+
+ pthread_mutex_lock(&signalling_lock);
+ pthread_cond_signal(interrupted);
+ pthread_mutex_unlock(&signalling_lock);
+
+ pthread_exit(NULL);
}
-void
-dc3_do_progress(void)
+static int
+execute_job(job_t* job)
{
- if ( (dc3_progress_count != 0 && dc3_progress_count == dc3_progress_current)
- || 0 == dc3_progress_count )
- {
- dc3_display_progress(false);
- dc3_progress_printed = true;
- dc3_progress_current = 0;
- }
- else
- ++dc3_progress_current;
+ // Start a thread for each task in the job, plus a progress
+ // monitoring thread.
+ task_t* task = job->tasks;
+ while (task)
+ {
+ pthread_mutex_init(task->signalling_lock, NULL);
+ start_thread(&task->thread, execute_task, task);
+ task = task->next_task;
+ }
+ start_thread(&job->monitor_thread, monitor_job, job);
+
+ // Now the main thread blocks until the monitoring and
+ // task threads finish.
+ pthread_join(job->monitor_thread, NULL);
+ task = job->tasks;
+ while (task)
+ {
+ pthread_join(task->thread, NULL);
+ pthread_mutex_destroy(task->signalling_lock);
+ task = task->next_task;
+ }
+
+ // Assign an exit code by rolling up the task results.
+ job->exit_code = DC3DD_EXIT_COMPLETED;
+ task = job->tasks;
+ while (task)
+ {
+ if (task->exit_code != DC3DD_EXIT_COMPLETED)
+ {
+ job->exit_code = task->exit_code;
+ break;
+ }
+ task = task->next_task;
+ }
+ return job->exit_code;
}
-int dc3_recover_block(char* ibuf, ssize_t read_size, bool* eof, ssize_t* bytes_read);
-
-/* The main loop. */
-
static int
-dd_copy (void)
-{
- char *ibuf, *bufstart; /* Input buffer. */
- /* These are declared static so that even though we don't free the
- buffers, valgrind will recognize that there is no "real" leak. */
- static char *real_buf; /* real buffer address before alignment */
- static char *real_obuf;
- ssize_t nread = 0; /* Bytes read in the current block. */
-
- /* If nonzero, then the previously read block was partial and
- PARTREAD was its size. */
- size_t partread = 0;
-
- int exit_status = EXIT_SUCCESS;
- size_t n_bytes_read;
-
- /* Leave at least one extra byte at the beginning and end of `ibuf'
- for conv=swab, but keep the buffer address even. But some peculiar
- device drivers work only with word-aligned buffers, so leave an
- extra two bytes. */
-
- /* Some devices require alignment on a sector or page boundary
- (e.g. character disk devices). Align the input buffer to a
- page boundary to cover all bases. Note that due to the swab
- algorithm, we must have at least one byte in the page before
- the input buffer; thus we allocate 2 pages of slop in the
- real buffer. 8k above the blocksize shouldn't bother anyone.
-
- The page alignment is necessary on any linux system that supports
- either the SGI raw I/O patch or Steven Tweedies raw I/O patch.
- It is necessary when accessing raw (i.e. character special) disk
- devices on Unixware or other SVR4-derived system. */
-
- real_buf = xmalloc (input_blocksize + INPUT_BLOCK_SLOP);
- ibuf = real_buf;
- ibuf += SWAB_ALIGN_OFFSET; /* allow space for swab */
-
- ibuf = ptr_align (ibuf, page_size);
-
- if (conversions_mask & C_TWOBUFS)
- {
- /* Page-align the output buffer, too. */
- real_obuf = xmalloc (output_blocksize + OUTPUT_BLOCK_SLOP);
- obuf = ptr_align (real_obuf, page_size);
- }
- else
- {
- real_obuf = NULL;
- obuf = ibuf;
- }
-
- if (!dc3_use_pattern && skip_sectors != 0)
- {
- skip (STDIN_FILENO, input_file, skip_sectors, dc3_sectorsize, ibuf);
- /* POSIX doesn't say what to do when dd detects it has been
- asked to skip past EOF, so I assume it's non-fatal if the
- call to 'skip' returns nonzero. FIXME: maybe give a warning. */
- }
-
- if (seek_sectors != 0)
- {
- uintmax_t write_records = skip (STDOUT_FILENO, output_file,
- seek_sectors, dc3_sectorsize, obuf);
-
- if (write_records != 0)
- {
- memset (obuf, 0, output_blocksize);
-
- do
- if (iwrite(STDOUT_FILENO, obuf, output_blocksize) != output_blocksize)
- {
- dc3_error (0, errno, _("writing to %s"), quote (output_file));
- quit (EXIT_FAILURE);
- }
- while (--write_records != 0);
- }
- }
-
- if (max_sectors == 0)
- return exit_status;
-
- if (dc3_use_pattern)
- {
- size_t tmp;
- for (tmp = 0 ; tmp < input_blocksize ; ++tmp)
- ibuf[tmp] = dc3_pattern_value[tmp % dc3_pattern_len];
- nread = n_bytes_read = input_blocksize;
- }
-
- size_t read_size = input_blocksize;
+execute_jobs(job_t* jobs)
+{
+ // Block interrupt (SIGINT) signals so that threads created after this point,
+ // INCLUDING the interrupt signal handling thread, will also have interrupt signals blocked.
+ // The signal handling thread will get signals from the sigwait() function,
+ // instead of directly from the operating system.
+ sigset_t set;
+ sigemptyset(&set);
+ sigaddset(&set, SIGINT);
+ pthread_sigmask(SIG_BLOCK, &set, 0);
+
+ // Set up synchronization for signal handling and kick off the signal handling thread.
+ pthread_mutex_init(&signalling_lock, NULL);
+ interrupted = (pthread_cond_t*)malloc(sizeof(pthread_cond_t));
+ pthread_cond_init(interrupted, NULL);
+ pthread_t signal_handling_thread;
+ start_thread(&signal_handling_thread, await_interrupt_signal, NULL);
+
+ int exit_code = DC3DD_EXIT_CODE_NOT_SET;
+ job_t* job = jobs;
+ while (job)
+ {
+ exit_code = execute_job(job);
+ if (exit_code != DC3DD_EXIT_COMPLETED)
+ {
+ break;
+ }
+ job = job->next_job;
+ }
+
+ // Shut down the signal handling thread and tear down synchronization.
+ pthread_cancel(signal_handling_thread);
+ pthread_mutex_destroy(&signalling_lock);
+
+ return exit_code;
+}
- // TODO: this flag is kind of a lame way to keep track
- // of whether the block has been hashed yet or not, but it works.
- // now that proper tests exist, it can be refactored when time permits
- bool block_hashed = true;
+static job_t*
+make_job(task_t* tasks, void (*report_progress)(job_t*, bool))
+{
+ job_t* job = (job_t*)malloc(sizeof(job_t));
+ job->tasks = tasks;
+ job->progress_interval_in_ms = JOB_PROGRESS_INTERVAL_MILLISECS;
+ job->report_progress = report_progress;
+ job->exit_code = DC3DD_EXIT_CODE_NOT_SET;
+ job->next_job = NULL;
+ return job;
+}
- while (1)
- {
- if (dc3_sectors_r_partial + dc3_sectors_r_full >= max_sectors)
- break;
+static task_t*
+make_task(input_t* input, output_t* outputs)
+{
+ task_t* task = (task_t*)malloc(sizeof(task_t));
+ task->signalling_lock = (pthread_mutex_t*)malloc(sizeof(pthread_mutex_t));
+ task->input = input;
+ task->outputs = outputs;
+ task->completed = false;
+ task->aborted = false;
+ task->exit_code = DC3DD_EXIT_CODE_NOT_SET;
+ task->next_task = NULL;
+ return task;
+}
+static buffer_queue_t*
+make_buffer_queue(size_t size_in_bytes, size_t number_of_buffers)
+{
+ buffer_queue_t* buffer_queue = (buffer_queue_t*)malloc(sizeof(buffer_queue_t));
+ buffer_queue->buffers = (buffer_t*)malloc(number_of_buffers * sizeof(buffer_t));
+ for (size_t i = 0; i < number_of_buffers; ++i)
+ {
+ buffer_queue->buffers[i].length = 0;
+ buffer_queue->buffers[i].data = (char*)malloc(size_in_bytes * sizeof(char));
+ }
+ buffer_queue->number_of_buffers = number_of_buffers;
+ buffer_queue->buffers_used = 0;
+ buffer_queue->next_available_buffer = 0;
+ buffer_queue->lock = (pthread_mutex_t*)malloc(sizeof(pthread_mutex_t));
+ buffer_queue->not_empty = (pthread_cond_t*)malloc(sizeof(pthread_cond_t));
+ pthread_cond_init(buffer_queue->not_empty, NULL);
+ buffer_queue->not_full = (pthread_cond_t*)malloc(sizeof(pthread_cond_t));
+ pthread_cond_init(buffer_queue->not_full, NULL);
+ buffer_queue->done_buffering = false;
+ return buffer_queue;
+}
- // if reading a full block would go past EOF, reduce read_size to
- // fit remaining data exactly
- if (dc3_sectors_r_partial + dc3_sectors_r_full + input_blocksize/dc3_sectorsize >= max_sectors)
- read_size = (max_sectors - dc3_sectors_r_partial - dc3_sectors_r_full) * dc3_sectorsize;
+static output_t*
+make_output(settings_t* settings)
+{
+ output_t* output = (output_t*)malloc(sizeof(output_t));
+ output->state = PENDING;
+ output->sector_size = settings->sector_size;
+ output->buffer_size = settings->buffer_size;
+ output->buffer_queue = make_buffer_queue(output->buffer_size, NUM_BUFFERS);
+ output->bytes_output = 0;
+ output->hash = NULL;
+ output->current_file = NULL;
+ output->files = NULL;
+ output->max_file_size = settings->max_output_file_size;
+ output->sectors_to_skip = settings->output_sectors_to_skip;
+ output->append_garbage_bytes = settings->corrupt_output;
+ output->open = NULL;
+ output->consume_bytes = NULL;
+ output->close = NULL;
+ output->expected_hashes = NULL;
+ output->actual_hashes = NULL;
+ output->next_output = NULL;
+ return output;
+}
- /* Zero the buffer before reading, so that if we get a read error,
- whatever data we are able to read is followed by zeros.
- This minimizes data loss. */
- if (!dc3_use_pattern)
- {
- if ((conversions_mask & C_SYNC) && (conversions_mask & C_NOERROR))
- memset (ibuf,
- (conversions_mask & (C_BLOCK | C_UNBLOCK)) ? ' ' : '\0',
- input_blocksize);
-
- //fprintf(stderr, "dd_copy: calling iread(%d, %08x, %zd), input_offset %16jx\n", STDIN_FILENO, ibuf, read_size, input_offset);
- nread = iread (STDIN_FILENO, ibuf, read_size);
-
- //if (nread != read_size)
- // fprintf(stderr, "dd_copy: called iread(%d, %08x, %zd), input_offset %16jx, nread=%d, errno=%d\n", STDIN_FILENO, ibuf, read_size, input_offset, nread, errno);
- }
- else
- {
- nread = n_bytes_read = read_size;
- }
+static output_t*
+make_file_output(settings_t* settings, file_t* file, output_t* expected_hashes)
+{
+ output_t* output = make_output(settings);
+ output->current_file = file;
+ output->files = output->current_file->part_of_set? file : NULL;
+ if (settings->append_output || settings->output_sectors_to_skip)
+ {
+ output->current_file->flags |= O_APPEND;
+ }
+ else
+ {
+ output->current_file->flags |= (O_CREAT | O_TRUNC);
+ }
+ output->consume_bytes = write_bytes_to_image;
+ if (STREQ(output->current_file->name, "stdout"))
+ {
+ output->open = connect_to_std_out;
+ output->close = disconnect_from_std_out;
+ }
+ else
+ {
+ output->open = open_file_output;
+ output->close = close_file_output;
+ }
+ output->expected_hashes = expected_hashes;
+ return output;
+}
- bool eof = false;
+static output_t*
+make_hash_output(settings_t* settings, hash_algorithm_t* algorithm)
+{
+ hash_t* hash = make_hash(algorithm);
+ if (settings->splitting_output && settings->verifying_output)
+ {
+ hash->current_piece = make_hash(algorithm);
+ hash->pieces = hash->current_piece;
+ hash->piecewise_hash_length = settings->max_output_file_size;
+ }
+
+ output_t* output = make_output(settings);
+ output->hash = hash;
+ output->open = open_hash;
+ output->consume_bytes = hash_bytes;
+ output->close = close_hash;
+ return output;
+}
- if (nread == 0)
- eof = true;
+static output_t*
+make_hash_outputs(settings_t* settings)
+{
+ output_t* hash_outputs = NULL;
- if (nread == -1 && errno == ENOSPC)
+ for (uint8_t i = 0 ; i < NUM_HASHES ; ++i)
+ {
+ if (hash_algorithms[i].active)
{
- if ( read_size == dc3_small_read || partread || !(conversions_mask&(C_SYNC|C_NOERROR)) )
- eof = true;
+ add_to_output_list(&hash_outputs, make_hash_output(settings, &hash_algorithms[i]));
}
-
- if (eof)
- {
- if ( dc3_ifjoin )
- {
- dc3_ifjoin_number++;
- dc3_generate_split_filename(dc3_ifjoin_base, dc3_ifjoin_ext, dc3_ifjoin_number, &input_file);
+ }
+
+ return hash_outputs;
+}
- if (fd_reopen (STDIN_FILENO, input_file, O_RDONLY | input_flags, 0) < 0)
- {
- //fprintf(stderr, "join mode: no more input files\n");
- dc3_ifjoin_done = true;
- break;
- }
- else
- {
- //fprintf(stderr, "\njoin: opened next file %s\n", input_file);
- // update status variables & do whatever else is needed
- // TODO: this re-probe is not the most accurate thing
- // (would be better to stat all of the files in advance to get total expected size)
- // this method causes the completion percentage to jump around repeatedly
- dc3_reprobe();
- continue;
- }
- }
- else
- {
- break;
- }
+static input_t*
+make_input(settings_t* settings)
+{
+ input_t* input = (input_t*)malloc(sizeof(input_t));
+ input->state = PENDING;
+ input->sector_size = settings->sector_size;
+ input->max_sectors_to_input = settings->max_sectors_to_input;
+ input->bytes_input = 0;
+ input->current_file = NULL;
+ input->files = NULL;
+ input->sectors_to_skip = settings->input_sectors_to_skip;
+ input->current_sector = 0;
+ input->recover_errors = settings->recover_errors;
+ input->current_errno = 0;
+ input->current_errno_count = 0;
+ input->current_errno_start_sector = 0;
+ input->bad_sectors = 0;
+ input->pattern_string = NULL;
+ input->pattern = NULL;
+ input->pattern_length = 0;
+ input->current_file = NULL;
+ input->files = NULL;
+
+ // The input buffer needs to be aligned if doing direct I/O
+ // There is no harm in aligning it in either case.
+ input->buffer_size = settings->buffer_size;
+ input->buffer.data =
+ (char*)malloc((input->buffer_size) + 2 * getpagesize() - 1);
+ input->buffer.data = (char*)ptr_align(input->buffer.data, getpagesize());
+ input->buffer.length = 0;
+
+ if (settings->input_file)
+ {
+ input->current_file = settings->input_file;
+ if (input->current_file->part_of_set)
+ {
+ input->files = input->current_file;
}
- block_hashed = false;
-
- if (nread < 0)
- {
- if (!(conversions_mask & C_DYNAMIC))
- {
- dc3_read_error();
-
- if (conversions_mask & C_NOERROR)
- {
- if (!dc3_group_errors)
- print_stats ();
-
- /* Seek past the bad block if possible. */
- if (!advance_input_after_read_error(read_size - partread))
- exit_status = EXIT_FAILURE;
-
- if ((conversions_mask & C_SYNC) && !partread)
- /* Replace the missing input with null bytes and
- proceed normally. */
- nread = 0;
- else
- {
- if (dc3_hash && !block_hashed)
- fprintf(stderr, "dd_copy: loop continue()ing without hashing block!\n");
- continue;
- }
- }
- else
- {
- /* Write any partial block. */
- exit_status = EXIT_FAILURE;
- break;
- }
- }
- else
- {
- // handle error reporting when dynamic mode is applicable, but block size == sector size
- if (input_blocksize == dc3_small_read)
- dc3_read_error();
-
- if (!partread) /* conversions_mask && (C_DYNAMIC|C_SYNC|C_NOERROR) can be assumed true */
- nread = 0;
- }
- // else defer error handling to recovery process below
- }
- else if (dc3_group_errors && dc3_previous_error)
- /* If we've made a successful read after several errors,
- print out the errors together now */
- {
- dc3_record_previous_errors();
- dc3_previous_error = false;
- dc3_previous_error_count = 0;
- }
-
- n_bytes_read = nread;
- advance_input_offset (nread);
- if (dc3_hash && dc3_hash_before && !block_hashed)
+ if (STREQ(input->current_file->name, "stdin"))
{
- //fprintf(stderr, "dd_copy() 1: calling dc3_hash_update with len=%zd\n", nread);
- dc3_hash_update(ibuf,nread);
- block_hashed = true;
+ input->open = connect_to_std_in;
+ input->produce_bytes = read_bytes_from_file;
+ input->close = disconnect_from_std_in;
}
-
- //fprintf(stderr, "n_bytes_read %zd vs. read_size %zd\n", n_bytes_read, read_size);
-
- bool rec_eof = false;
-
- if (n_bytes_read < read_size)
- {
- //fprintf(stderr, "n_bytes_read < read_size)\n");
- r_partial++;
- partread = n_bytes_read;
-
- if (conversions_mask & C_SYNC)
- {
- // TODO: kind of a hack here to handle when we aren't really in dynamic mode
- if (input_blocksize == dc3_small_read)
- {
- /* We have to zero out the whole block now. */
- memset (ibuf,
- (conversions_mask & (C_BLOCK | C_UNBLOCK)) ? ' ' : '\0',
- input_blocksize);
-
- /* Seek past the bad block if possible. */
- if (!advance_input_after_read_error(input_blocksize))
- exit_status = EXIT_FAILURE;
-
- n_bytes_read = read_size;
- dc3_sectors_r_partial++;
- }
- else
- {
- // TODO: replace all instances of dc3_small_read with dc3_sectorsize ?
-
- // try to read individual pieces of the block
- if ( (conversions_mask & C_DYNAMIC) && input_blocksize != dc3_small_read && (nread == -1 || nread == 0))
- {
- int ret = dc3_recover_block(ibuf, read_size, &rec_eof, &nread);
- if (ret != EXIT_SUCCESS)
- exit_status = ret;
- n_bytes_read = nread;
- if (nread == 0)
- break;
- }
- else
- {
- dc3_sectors_r_full += nread / dc3_sectorsize;
- if (nread % dc3_sectorsize != 0) dc3_sectors_r_partial++;
- }
- }
- }
- else
- {
- dc3_sectors_r_full += n_bytes_read / dc3_sectorsize;
- if (n_bytes_read % dc3_sectorsize != 0) dc3_sectors_r_partial++;
- }
- }
else
- {
- r_full++;
- // TODO: make dc3_sectors_per_block variable?
- dc3_sectors_r_full += read_size / dc3_sectorsize;
- partread = 0;
- }
-
- if (ibuf == obuf && !(conversions_mask&C_TWOBUFS)) /* If not C_TWOBUFS. */
- {
- size_t nwritten = iwrite (STDOUT_FILENO, obuf, n_bytes_read);
- dc3_write_stats(nwritten);
+ {
+ input->open = open_file_input;
- if (nwritten != n_bytes_read)
+ // This ASSUMES that probe_file() was called on settings->input_file
+ // before calling this function.
+ if (input->current_file->is_device)
+ {
+ if (input->recover_errors)
{
- dc3_error (0, errno, _("error writing %s"), quote (output_file));
- //fprintf(stderr, "dd_copy() loop: nwritten %d, n_bytes_read %d\n", nwritten, n_bytes_read);
- return EXIT_FAILURE;
+ input->current_file->flags |= O_DIRECT;
}
+ input->produce_bytes = read_bytes_from_device;
+ }
+ else if (input->current_file->part_of_set)
+ {
+ input->produce_bytes = read_bytes_from_files;
+ }
+ else
+ {
+ input->produce_bytes = read_bytes_from_file;
+ }
+
+ input->close = close_file_input;
+ }
+ }
+ else
+ {
+ input->pattern_string = strdup(settings->input_pattern_string);
+ input->pattern = strdup(settings->input_pattern);
+ input->pattern_length = settings->input_pattern_length;
+ input->open = open_pattern_input;
+ input->produce_bytes = read_bytes_from_pattern;
+ input->close = close_pattern_input;
+ }
+
+ return input;
+}
- if (dc3_progress)
- dc3_do_progress();
-
- if (dc3_hash && !dc3_hash_before && !block_hashed)
- {
- //fprintf(stderr, "dd_copy() 2: calling dc3_hash_update with len=%zd\n", nwritten);
- dc3_hash_update(obuf,nwritten);
- block_hashed = true;
- }
-
- // TODO: make this an assert
- if (dc3_hash && !block_hashed)
- fprintf(stderr, "dd_copy: loop continue()ing without hashing block!\n");
-
- continue;
- }
-
- /* Do any translations on the whole buffer at once. */
-
- if (translation_needed)
- translate_buffer (ibuf, n_bytes_read);
-
- if (conversions_mask & C_SWAB)
- bufstart = swab_buffer (ibuf, &n_bytes_read);
- else
- bufstart = ibuf;
-
- if (conversions_mask & C_BLOCK)
- copy_with_block (bufstart, n_bytes_read);
- else if (conversions_mask & C_UNBLOCK)
- copy_with_unblock (bufstart, n_bytes_read);
- else
- copy_simple (bufstart, n_bytes_read);
-
- if (dc3_progress)
- dc3_do_progress();
-
-
- // TODO: `n_bytes_read == blocksize' is a hack because write_output
- // can't quite handle the case where the total_bytes % blocksize != 0
- // write_output sets oc != 0 and then the last piece gets hashed twice.
-
- if (dc3_hash && !dc3_hash_before /*&& (n_bytes_read == input_blocksize) */ && !block_hashed)
+static void
+add_verification_job(job_t* job, settings_t* settings)
+{
+ // An imaging job consists of a single task.
+ task_t* imaging_task = job->tasks;
+
+ // Make a verification task for each output to be verified.
+ task_t* verification_tasks = NULL;
+ output_t* output = imaging_task->outputs;
+ while (output)
+ {
+ if (output->current_file && output->current_file->verify_requested)
{
- //fprintf(stderr, "dd_copy() 3: calling dc3_hash_update with len=%zd\n", n_bytes_read);
- dc3_hash_update(bufstart,n_bytes_read);
- block_hashed = true;
+ // Make an input file corresponding to the output file
+ // and swap it into the already initialized and validated settings.
+ // However, make sure to clear max sectors to input, since the size of the
+ // verification target is now the determinant of bytes to input.
+ settings->input_file = make_file(output->current_file->unparsed_name,
+ 0, O_RDONLY, output->current_file->part_of_set, false);
+ settings->max_sectors_to_input = INFINITE_BYTES;
+ input_t* input = make_input(settings);
+
+ // Prepare the output hashes and cache a pointer to the list
+ // for later comparision with the list of input hashes cached
+ // in the output when the imaging job was created.
+ output_t* output_hashes = make_hash_outputs(settings);
+ output->actual_hashes = output_hashes;
+
+ task_t* verification_task = make_task(input, output_hashes);
+ add_to_task_list(&verification_tasks, verification_task);
}
+ output = output->next_output;
+ }
+
+ job->next_job = make_job(verification_tasks, report_verification_progress);
+}
- if (rec_eof)
- break;
-
- // TODO: make this an assert
- if (dc3_hash && !block_hashed)
- fprintf(stderr, "dd_copy: loop bottom reached without hashing block!\n");
- }
-
-
- /* If we have a char left as a result of conv=swab, output it. */
- if (char_is_saved)
- {
- if (conversions_mask & C_BLOCK)
- copy_with_block (&saved_char, 1);
- else if (conversions_mask & C_UNBLOCK)
- copy_with_unblock (&saved_char, 1);
- else
- output_char (saved_char);
- }
-
- if ((conversions_mask & C_BLOCK) && col > 0)
- {
- /* If the final input line didn't end with a '\n', pad
- the output block to `conversion_blocksize' chars. */
- size_t i;
- for (i = col; i < conversion_blocksize; i++)
- output_char (space_character);
- }
-
- if ((conversions_mask & C_UNBLOCK) && col == conversion_blocksize)
- /* Add a final '\n' if there are exactly `conversion_blocksize'
- characters in the final record. */
- output_char (newline_character);
-
- /* Write out the last block. */
- if (oc != 0)
- {
- size_t nwritten = iwrite (STDOUT_FILENO, obuf, oc);
- dc3_write_stats(nwritten);
-
- if (nwritten != oc)
- {
- dc3_error (0, errno, _("dd_copy() cleanup: nwritten mismatch writing %s"), quote (output_file));
- fprintf(stderr, "dd_copy() cleanup: nwritten %zd, n_bytes_read %zd\n", nwritten, n_bytes_read);
- return EXIT_FAILURE;
- }
- }
-
- if (dc3_hash)
- {
- if (oc != 0 && !block_hashed)
+static job_t*
+make_imaging_job(settings_t* settings)
+{
+ input_t* input = make_input(settings);
+ output_t* input_hashes = make_hash_outputs(settings);
+
+ // Make the file outputs.
+ output_t* outputs = NULL;
+ if (settings->wipe_target)
+ {
+ add_to_output_list(&outputs, make_file_output(settings, settings->wipe_target, input_hashes));
+ }
+ else
+ {
+ file_t* file = settings->output_files;
+ while (file)
{
- //fprintf(stderr, "dd_copy() cleanup: calling dc3_hash_update with len=%zd\n", oc);
- //fprintf(stderr, "dd_copy() cleanup: block_hashed %d\n", block_hashed);
- dc3_hash_update(obuf,oc);
- block_hashed = true;
+ output_t* output = make_file_output(settings, file, input_hashes);
+ add_to_output_list(&outputs, output);
+ file = file->next_file;
+
+ // Cache a pointer to the input hashes for verification purposes.
+ output->expected_hashes = input_hashes;
+
+ // Unlink the file for tidiness, and so that the next_file pointer
+ // can be used to make a list of files (if splitting the output).
+ output->current_file->next_file = NULL;
}
- dc3_hash_final();
- }
-
-
- if ((conversions_mask & C_FDATASYNC) && fdatasync (STDOUT_FILENO) != 0)
- {
- if (errno != ENOSYS && errno != EINVAL)
- {
- dc3_error (0, errno, _("fdatasync failed for %s"), quote (output_file));
- exit_status = EXIT_FAILURE;
- }
- conversions_mask |= C_FSYNC;
- }
-
- if (conversions_mask & C_FSYNC)
- while (fsync (STDOUT_FILENO) != 0)
- if (errno != EINTR)
- {
- dc3_error (0, errno, _("fsync failed for %s"), quote (output_file));
- return EXIT_FAILURE;
- }
-
- if (dc3_group_errors && dc3_previous_error)
- dc3_record_previous_errors();
+ }
- // slight hack to make sure progress bar gets updated before we exit
- // because quit() doesn't update the progress bar in verify mode
- if (dc3_progress && dc3_mode_verify)
- dc3_display_progress(true);
+ // Append the hash outputs for the input hashes to the file outputs.
+ add_to_output_list(&outputs, input_hashes);
-
- // TODO: make this an assert
- // TODO: fix this so it doesn't report false positives
- if (dc3_hash && !block_hashed)
- fprintf(stderr, "dd_copy: function returning without hashing block!\n");
-
- return exit_status;
+ task_t* task = make_task(input, outputs);
+ return make_job(task, report_imaging_progress);
}
-int dc3_recover_block(char* ibuf, ssize_t read_size, bool* eof, ssize_t* bytes_read)
+static job_t*
+make_jobs(settings_t* settings)
{
- int exit_status = EXIT_SUCCESS;
-
- // TODO: is this redundant?
- /* We have to zero out the whole block now. */
- memset (ibuf,
- (conversions_mask & (C_BLOCK | C_UNBLOCK)) ? ' ' : '\0',
- input_blocksize);
-
- // should already be rewound to beginning of block
- size_t i = 0;
-
- do
- {
- fprintf(stderr," \r");
-
- char* secbuf = ibuf+i;
+ job_t* job = make_imaging_job(settings);
+ if (settings->verifying_output)
+ {
+ add_verification_job(job, settings);
+ }
+ return job;
+}
+
+#if USE_HDPARM
+#ifdef __linux__
- uintmax_t sector = dc3_sectors_r_full + dc3_sectors_r_partial;
+static void
+check_device_for_hpa_dco(file_t* device)
+{
+ if (device->is_device)
+ {
+ device->descriptor = open(device->name, O_RDONLY, device->perms);
+ if (device->descriptor >= 0)
+ {
+ report_to_log(_("checking for HPA/DCO: "));
+
+ int err = 0;
+ __u16 *id = (void *)-1;
+ __u16 *dci = (void *)-1;
+
+ dci = get_dci_data(fd, dci);
+ __u64 maximum_lba = 0;
+ if (dci)
+ {
+ maximum_lba = get_dci_maximum_lba(dci);
+ }
+
+ __u64 visible, native;
+ id = get_identify_data(fd, id);
+ if (id)
+ {
+ visible = get_lba_capacity(id);
+ native = do_get_native_max_sectors_to_input(fd, id);
+ if (!native)
+ {
+ err = errno;
+ }
+ }
- fprintf(stderr, "trying to recover sector %llu", skip_sectors+sector);
- //fprintf(stderr, "\n");
+ if (!dci || !id || !native)
+ {
+ report_to_log(_("device doesn't support ATA commands\n"));
+ return;
+ }
- //fprintf(stderr, "dd_copy: recovery calling iread(%d, %08x, %zd), input_offset at %16jx\n", STDIN_FILENO, ibuf, dc3_small_read, input_offset);
- ssize_t n = 0;
- n = iread(STDIN_FILENO, secbuf, dc3_small_read);
- //fprintf(stderr, "dd_copy: recovery called iread, nread=%d\n", n);
+ if (id)
+ {
+ bool hpa = false;
+ bool dco = false;
+ if (visible != native)
+ {
+ hpa = true;
+ }
- if (n == 0 || (n==-1 && errno==ENOSPC)) // EOF
- {
- *eof = true;
- //fprintf(stderr, "recovery: EOF\n");
- break;
- }
+ if (maximum_lba != native)
+ {
+ dco = true;
+ }
- if (n != dc3_small_read)
- {
- //fprintf(stderr, "dd_copy recovery: read returned wrong size\n");
- // copied from above
- if (dc3_group_errors)
+ if (hpa && dco)
{
- if (!dc3_previous_error)
- {
- dc3_previous_error = true;
- }
- else if (errno != dc3_previous_error_errno)
- {
- /* We have to display the old errors before
- starting to record this new series */
- fprintf(stderr," \r");
- dc3_record_previous_errors();
- dc3_previous_error_count = 0;
- }
-
- dc3_previous_error_errno = errno;
- dc3_previous_error_count++;
+ report_to_log(_("HPA and DCO found\n"));
}
- else
+ else if (hpa)
{
- fprintf(stderr," \r");
- dc3_error (0, errno, _("reading %s at sector %jd"), quote (input_file), skip_sectors+sector);
+ report_to_log(_("HPA found\n"));
+ }
+ else if (dco)
+ {
+ report_to_log(_("DCO found\n"));
+ }
+ else
+ {
+ report_to_log(_("none\n"));
}
- /* Seek past the bad block if possible. */
- size_t dist = dc3_small_read;
- if (n > 0) dist -= n;
- if (!advance_input_after_read_error(dist))
- exit_status = EXIT_FAILURE;
-
- memset (secbuf,
- (conversions_mask & (C_BLOCK | C_UNBLOCK)) ? ' ' : '\0',
- dc3_small_read);
-
- // TODO: is this reasonable? really the whole sector failed
- // since partial sector reads aren't possible
-
- dc3_sectors_r_partial++;
- }
- else
- {
- //fprintf(stderr, "dd_copy recovery: read returned correct size %zd vs. %zd\n", n, dc3_small_read);
+ char limits[DISPLAY_MESSAGE_LENGTH];
+
+ if (hpa)
+ {
+ sprintf(limits, _("HPA limit: %11llu sectors\n"));
+ report_to_log(limits, true);
+ }
- if (dc3_group_errors && dc3_previous_error)
- /* If we've made a successful read after several errors,
- print out the errors together now */
+ if (dco)
{
- fprintf(stderr," \r");
- dc3_record_previous_errors();
- dc3_previous_error = false;
- dc3_previous_error_count = 0;
+ sprintf(limits, _("DCO limit: %11llu sectors\n"));
+ report_to_log(limits);
}
- advance_input_offset (n);
- dc3_sectors_r_full++;
- }
+ sprintf(limits, _("full size: %11llu sectors\n"), maximum_lba);
+ report_to_log(limits);
+ }
+
+ if (close(device->descriptor) == 0)
+ {
+ device->descriptor = FILE_DESCRIPTOR_NOT_SET;
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, _("closing %s after HPA/DCO check"), quote(device->name));
+ }
+ }
+ }
+}
- i+= dc3_small_read;
- fprintf(stderr," \r");
- } while ( i<read_size );
+#endif // #ifdef __linux__
+#endif // #if USE_HDPARM
- *bytes_read = i;
+static void
+report_device_size(file_t* device)
+{
+ char stats[DISPLAY_MESSAGE_LENGTH];
+ sprintf(stats, _("device size: %"PRIuMAX" sectors (probed)\n"), device->probed_size_in_sectors);
+ report_to_log(stats);
+
+ #if USE_HDPARM
+ #ifdef __linux__
+ if (device->is_block_device)
+ {
+ device->descriptor = open(device->name, O_RDONLY, device->perms);
+ if (device->descriptor >= 0)
+ {
+ check_device_for_hpa_dco(device->descriptor);
+ if (close(device->descriptor) == 0)
+ {
+ device->descriptor = FILE_DESCRIPTOR_NOT_SET;
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, _("closing %s after hpa/dco check"), quote(device->name));
+ }
+ }
+ }
+ #endif
+ #endif
+}
- return exit_status;
+static void
+report_input_size(settings_t* settings)
+{
+ if (settings->wipe_target)
+ {
+ report_device_size(settings->wipe_target);
+ }
+ else if (settings->input_file && settings->input_file->is_device)
+ {
+ report_device_size(settings->input_file);
+ }
+
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, "sector size: %zd bytes (%s)\n", settings->sector_size, settings->sector_size_source);
+ report_to_log(message);
+ flush_logs();
}
-int
-main (int argc, char **argv)
+static void
+activate_hash(const char* algorithm_name)
{
- int i;
- int exit_status;
- off_t offset;
+ uint8_t i = 0;
+
+ // Command line settings override build time settings, so deactivate
+ // all hashing algorithms activated by build settings.
+ static bool predefined_hashes_cleared = false;
+ if (!predefined_hashes_cleared)
+ {
+ for (i = 0; i < NUM_HASHES; ++i)
+ {
+ hash_algorithms[i].active = false;
+ }
+
+ predefined_hashes_cleared = true;
+ }
- initialize_main (&argc, &argv);
- program_name = argv[0];
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
+ for (i = 0; i < NUM_HASHES; ++i)
+ {
+ if (STREQ(hash_algorithms[i].name, algorithm_name))
+ {
+ if (!hash_algorithms[i].active)
+ {
+ hash_algorithms[i].active = true;
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED,0,_("hash=%s specified more than once"), quote(algorithm_name));
+ }
+ break;
+ }
+ }
+
+ // Note the early out for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+ if (i == NUM_HASHES)
+ {
+ report_error(DC3DD_EXIT_ABORTED,0,_("unknown hash algorithm %s"), quote(algorithm_name));
+ }
+}
- /* Save command line string before scanargs mucks with argv. */
- char* dc3_cmdline = dc3_save_cmdline(argc, argv);
+static void
+probe_file_for_validation(file_t* file)
+{
+ file->descriptor = open(file->name, O_RDONLY, 0);
+ if (file->descriptor >= 0)
+ {
+ if (probe_file(file))
+ {
+ if (close(file->descriptor) == 0)
+ {
+ file->descriptor = FILE_DESCRIPTOR_NOT_SET;
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, _("closing %s after validation probe"), quote(file->name));
+ }
+ }
+ else
+ {
+ close(file->descriptor);
+ report_error(DC3DD_EXIT_ABORTED, 0, _("validation probe of %s failed"), quote(file->name));
+ }
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, _("opening %s for validation probe"), quote(file->name));
+ }
+}
- /* Arrange to close stdout if parse_long_options exits. */
- atexit (maybe_close_stdout);
+static void
+add_wipe_target(settings_t* settings, const char* device_name, bool verify_requested)
+{
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+ if (settings->wipe_target)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot specify wipe= or vwipe= more than once"));
+ }
+
+ if (settings->output_files)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and of=, hof=, ofs= or hofs="));
+ }
+
+ settings->wipe_target = make_file(device_name, 0, O_WRONLY, false, verify_requested);
+ DC3DD_ASSERT(settings->wipe_target != NULL);
+
+ // Make sure the wipe target is valid.
+ probe_file_for_validation(settings->wipe_target);
+ if (!settings->wipe_target->is_device)
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, _("%s not recognized as a device, cannot wipe"),
+ quote(settings->wipe_target->name));
+ }
+ if (settings->wipe_target->probed_size_in_bytes <= 0)
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, _("%s size probe failed, cannot wipe"),
+ quote(settings->wipe_target->name));
+ }
+
+ if (verify_requested)
+ {
+ settings->verifying_output = true;
+ }
+}
- page_size = getpagesize ();
+static void
+add_output_file(settings_t* settings, const char* file_name, bool part_of_set, bool verify_requested)
+{
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ if (verify_requested)
+ {
+ if (STREQ(file_name, "/dev/null"))
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot specify hof=/dev/null"));
+ }
+ else
+ {
+ settings->verifying_output = true;
+ }
+ }
+
+ if (part_of_set)
+ {
+ settings->splitting_output = true;
+ }
+
+ file_t* file = make_file(file_name, 0, O_WRONLY, part_of_set, verify_requested);
+ if (file)
+ {
+ add_to_file_list(&settings->output_files, file);
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("%s not valid BASE.FMT specifier for %s"),
+ quote(file_name), verify_requested ? "hofs=" : "ofs=");
+ }
+}
+static void
+add_input_text_pattern(settings_t* settings, const char* pattern)
+{
+ // Note the early out for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ if (settings->input_file || settings->input_pattern)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("use only one of pat=, tpat=, if=, ifs="));
+ }
+
+ settings->input_pattern_string = strdup(pattern);
+ settings->input_pattern = strdup(pattern);
+ settings->input_pattern_length = strlen(pattern);
+}
+static int
+hex_to_char(char *hstr)
+{
+ unsigned int retval;
+
+ if (strlen(hstr) != 2)
+ {
+ return -1;
+ }
+
+ if (EOF == sscanf(hstr, "%x", &retval))
+ {
+ return -1;
+ }
+
+ return retval;
+}
- if (argc == 2 && strcmp(argv[1], "--flags") == 0)
- {
- printf("%s compiled with:\n", PROGRAM_NAME);
- dc3_print_flags(stdout, true);
- exit(0);
- }
+static void
+make_pattern(const char *pattern_template, char** pattern, size_t* pattern_length)
+{
+ *pattern = NULL;
+ *pattern_length = 0;
+ size_t pattern_template_length = strlen(pattern_template);
+ if (pattern_template_length != 0 && pattern_template_length % 2 == 0)
+ {
+ *pattern_length = pattern_template_length / 2;
+ *pattern = (char*)malloc(*pattern_length);
- parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE, VERSION,
- usage, AUTHORS, (char const *) NULL);
- close_stdout_required = false;
+ for (size_t i = 0; i < *pattern_length; i++)
+ {
+ char tmpstring[3];
+ int byte_val;
+ strncpy(tmpstring, &pattern_template[i*2], 2);
+ tmpstring[2] = '\0';
+ byte_val = hex_to_char(tmpstring);
+
+ if (byte_val == -1)
+ {
+ free(*pattern);
+ *pattern = NULL;
+ *pattern_length = 0;
+ }
+
+ (*pattern)[i] = (char)byte_val;
+ }
+ }
+}
- if (getopt_long (argc, argv, "", NULL, NULL) != -1)
- usage (EXIT_FAILURE);
+static void
+add_input_pattern(settings_t* settings, const char* pattern)
+{
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ if (settings->input_file || settings->input_pattern)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("use only one of pat=, tpat=, if=, ifs="));
+ }
+
+ settings->input_pattern_string = strdup(pattern);
+ make_pattern(pattern, &settings->input_pattern, &settings->input_pattern_length);
+ if (!settings->input_pattern)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("illegal pattern %s"), quote(pattern));
+ }
+}
- /* Initialize translation table to identity translation. */
- for (i = 0; i < 256; i++)
- trans_table[i] = i;
+static void
+add_input_file(settings_t* settings, const char* file_name, bool part_of_set)
+{
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ if (settings->input_file || settings->input_pattern)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("use only one of pat=, tpat=, if=, ifs="));
+ }
+
+ if (STREQ(file_name, "/dev/zero"))
+ {
+ add_input_pattern(settings, "00");
+ }
+ else
+ {
+ settings->input_file = make_file(file_name, 0, O_RDONLY, part_of_set, false);
+ if (!settings->input_file)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0 , _("%s not valid BASE.FMT form for ifs="), file_name);
+ }
- /* Decode arguments. */
- scanargs (argc, argv);
+ if (!STREQ(file_name, "stdin"))
+ {
+ probe_file_for_validation(settings->input_file);
+ }
+ }
+}
- apply_translations ();
+static bool
+option_matches(const char* option, const char* option_name, char delim)
+{
+ while (*option_name)
+ {
+ if (*option++ != *option_name++)
+ {
+ return false;
+ }
+ }
- bool input_stdin = false;
+ return !*option || *option == delim;
+}
- if (input_file == NULL)
- {
- if (!dc3_use_pattern)
- {
- conversions_mask |= C_TWOBUFS;
- input_file = _("standard input");
- set_fd_flags (STDIN_FILENO, input_flags, input_file);
- input_stdin = true;
- }
- }
- else
- {
-#ifdef DEFAULT_IFLAG_DIRECT
- input_flags |= O_DIRECT;
-#endif
+static bool
+option_is(const char* option, const char* option_name)
+{
+ return option_matches(option, option_name, '=');
+}
- if (fd_reopen (STDIN_FILENO, input_file, O_RDONLY | input_flags, 0) < 0)
- dc3_error (EXIT_FAILURE, errno, _("opening %s"), quote (input_file));
- }
+static uintmax_t
+parse_integer(const char* str, bool* invalid)
+{
+ uintmax_t n;
+ char *suffix;
+ enum strtol_error e = xstrtoumax (str, &suffix, 10, &n, "bcEGkKMPTwYZ0");
- offset = lseek (STDIN_FILENO, 0, SEEK_CUR);
- input_seekable = (0 <= offset);
- input_offset = offset;
- input_seek_errno = errno;
-
- // probe input device if appropriate
- if (dc3_sizeprobe && !dc3_use_pattern && !(dc3_mode_verify&&input_stdin))
- {
- if (max_sectors == (uintmax_t)-1)
- dc3_probe_file(STDIN_FILENO);
- else
- dc3_probe_sectorsize(STDIN_FILENO);
- }
-
- if (output_file == NULL)
- {
- output_file = _("standard output");
- set_fd_flags (STDOUT_FILENO, output_flags, output_file);
- }
- else
- {
- const char * file_to_open;
+ if (e == LONGINT_INVALID_SUFFIX_CHAR && *suffix == 'x')
+ {
+ uintmax_t multiplier = parse_integer(suffix + 1, invalid);
- mode_t perms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
- int opts
- = (output_flags
- | (conversions_mask & C_NOCREAT ? 0 : O_CREAT)
- | (conversions_mask & C_EXCL ? O_EXCL : 0)
- | (seek_sectors || (conversions_mask & C_NOTRUNC) ? 0 : O_TRUNC));
+ if (multiplier != 0 && n * multiplier / multiplier != n)
+ {
+ *invalid = true;
+ return 0;
+ }
- if (dc3_split)
- {
- /* We have to extend output file to be a new string that can hold
- not only the original file name but the extensions that we're
- adding on */
+ n *= multiplier;
+ }
+ else if (e != LONGINT_OK)
+ {
+ *invalid = true;
+ return 0;
+ }
- dc3_generate_split_filename(output_file, dc3_split_format, dc3_split_number, &dc3_split_filename);
+ return n;
+}
- file_to_open = dc3_split_filename;
- }
- else
- file_to_open = output_file;
+static void
+parse_quantifier(settings_t* settings, const char* name, const char* val)
+{
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+ bool invalid = false;
+ uintmax_t n = 0;
+ if (option_is (name, "ofsz"))
+ {
+ settings->max_output_file_size = n = parse_integer(val, &invalid);
+ }
+ else if (option_is(name, "bufsz"))
+ {
+ settings->buffer_size = n = parse_integer(val, &invalid);
+ }
+ else if (option_is(name, "iskip"))
+ {
+ settings->input_sectors_to_skip = n = parse_integer(val, &invalid);
+ }
+ else if (option_is(name, "oskip"))
+ {
+ settings->output_sectors_to_skip = n = parse_integer(val, &invalid);
+ }
+ else if (option_is(name, "cnt"))
+ {
+ settings->max_sectors_to_input = n = parse_integer(val, &invalid);
+ }
+ else if (option_is(name, "ssz"))
+ {
+ settings->sector_size = n = parse_integer(val, &invalid);
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("unrecognized option %s"), name);
+ }
+
+ invalid |= !(n > 0);
+ if (invalid)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("invalid number %s for %s"), val, name);
+ }
+}
- if (dc3_pipe_output)
- {
- close(STDOUT_FILENO);
- FILE *tmp = popen(output_file,"w");
- if (NULL == tmp)
- dc3_error(EXIT_FAILURE,errno,_("opening %s"), quote(output_file));
- int fd = fileno(tmp);
- if (fd != STDOUT_FILENO && fd >= 0)
- {
- fcntl(fd,F_DUPFD,STDOUT_FILENO);
- int saved_errno = errno;
- close(fd);
- errno = saved_errno;
- }
- }
+static void
+validate_hashing_settings(settings_t* settings)
+{
+ // Note the early out for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ // Determine whether there is an active hash algorithm.
+ bool hash_specified = false;
+ for (uint8_t i = 0; i < NUM_HASHES; ++i)
+ {
+ if (hash_algorithms[i].active)
+ {
+ hash_specified = true;
+ break;
+ }
+ }
+
+ if (settings->verifying_output && !hash_specified)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0,
+ _("hof=, hofs=, or vwipe= specified without hash algorithm(s) selection"));
+ }
+}
+static void
+validate_size_settings(settings_t* settings)
+{
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ // Determine the working sector size.
+ if (settings->wipe_target)
+ {
+ settings->sector_size = settings->wipe_target->probed_sector_size;
+ settings->sector_size_source = _("probed");
+ }
+ else if (settings->sector_size > 0)
+ {
+ settings->sector_size_source = _("set");
+ }
+ else if (settings->input_file && settings->input_file->is_device && settings->input_file->probed_sector_size > 0)
+ {
+ settings->sector_size = settings->input_file->probed_sector_size;
+ settings->sector_size_source = _("probed");
+ }
+ else
+ {
+ // This will be the case for regular files.
+ settings->sector_size = DEFAULT_SECTOR_SIZE;
+ settings->sector_size_source = _("assumed");
+ }
+
+ // Make sure the working sector size is consistent with the buffer size.
+ if (settings->buffer_size < settings->sector_size || settings->buffer_size % settings->sector_size != 0)
+ {
+ // Do not reference bufsz=, since this may be an issue with the default buffer size.
+ report_error(DC3DD_EXIT_ABORTED, 0, _("buffer size (%d) must be a multiple of sector size (%d)"),
+ settings->buffer_size, settings->sector_size);
+ }
+
+ // Make sure the skip sizes will work.
+ if (settings->input_sectors_to_skip &&
+ settings->input_file->probed_size_in_bytes < settings->input_sectors_to_skip)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0,
+ _("if iskip= is specified, if= must specify an input file or device of at least that size"));
+ }
+
+ if (settings->output_sectors_to_skip)
+ {
+ file_t* file = settings->output_files;
+ while (file)
+ {
+ // The output file must already exist if output sectors are to be skipped.
+ probe_file_for_validation(file);
+ if (file->probed_size_in_bytes < settings->output_sectors_to_skip * settings->sector_size)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0,
+ _("if oskip= is specified, of= must specify output files of at least that size"));
+ }
+ file = file->next_file;
+ }
+ }
+}
- else if (dc3_mode_verify)
- {
- if (fd_reopen(STDOUT_FILENO,output_file,O_RDONLY,0) < 0)
- dc3_error(EXIT_FAILURE,errno,_("opening %s"), quote(output_file));
- }
+static void
+validate_IO_options(settings_t* settings)
+{
+ // Make sure that the options specified are valid for the I\O combination.
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ if (settings->input_pattern)
+ {
+ if (settings->input_sectors_to_skip)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine pat=, tpat= or if=/dev/zero and iskip="));
+ }
+ if (settings->max_sectors_to_input == INFINITE_SECTORS && !settings->wipe_target)
+ {
+ // Make sure a stopping condition exists, in the form of either a count of pattern sectors
+ // to produce or the size of the device to be wiped.
+ report_error(DC3DD_EXIT_ABORTED, 0, _("if generating a pattern and not wiping, must specify cnt="));
+ }
+ }
+
+ if (settings->input_file && settings->input_sectors_to_skip)
+ {
+ if (settings->input_file->part_of_set)
+ {
+ // Not currently supporting the ability to skip input sectors if it requires opening
+ // multiple files.
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine cnt= and ifs="));
+ }
- /* Open the output file with *read* access only if we might
- need to read to satisfy a `seek=' request. If we can't read
- the file, go ahead with write-only access; it might work. */
- else if ((! seek_sectors
- || fd_reopen (STDOUT_FILENO, file_to_open, O_RDWR | opts, perms) < 0)
- && (fd_reopen (STDOUT_FILENO, file_to_open, O_WRONLY | opts, perms)
- < 0))
- dc3_error (EXIT_FAILURE, errno, _("opening %s"), quote (file_to_open));
+ if (STREQ(settings->input_file->name, "stdin"))
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot specify cnt= when input is stdin"));
- if (dc3_sizeprobe && (dc3_use_pattern || (dc3_mode_verify&&input_stdin)))
+ }
+ }
+
+ if (settings->output_files && STREQ(settings->output_files->name, "stdout"))
+ {
+ if (settings->output_sectors_to_skip)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot specify oskip= when output is stdout"));
+ }
+
+ if (settings->max_output_file_size != INFINITE_BYTES)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot specify ofsz= when output is stdout"));
+ }
+
+ if (settings->append_output)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot specify app=on when output is stdout"));
+ }
+ }
+
+ if (settings->wipe_target)
+ {
+ if (settings->max_output_file_size != INFINITE_BYTES)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and ofsz="));
+ }
+
+ if (settings->max_sectors_to_input == INFINITE_SECTORS)
{
- if (max_sectors == (uintmax_t)-1)
- dc3_probe_file(STDOUT_FILENO);
- else
- dc3_probe_sectorsize(STDOUT_FILENO);
+ // Throttle the pattern input to the size of the device to be wiped,
+ // which is the sole output file.
+ settings->max_sectors_to_input = settings->wipe_target->probed_size_in_sectors;
+ }
+ else
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and cnt="));
+ }
+
+ if (settings->input_sectors_to_skip)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and iskip="));
+ }
+
+ if (settings->output_sectors_to_skip)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and oskip="));
+ }
+
+ if (settings->append_output)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and app=on"));
+ }
+
+ if (settings->sector_size)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and ssz="));
}
+ }
- size_t seek_sector_size = dc3_sectorsize ? dc3_sectorsize : 512;
+ if (settings->splitting_output)
+ {
+ if (settings->append_output)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine app=on and ofs= or hofs="));
+ }
-#if HAVE_FTRUNCATE
- if (seek_sectors != 0 && !(conversions_mask & C_NOTRUNC))
- {
- uintmax_t size = seek_sectors * seek_sector_size;
- //unsigned long int obs = output_blocksize;
+ if (settings->output_sectors_to_skip)
+ {
+ // Not currently supporting the ability to skip output sectors if it requires opening
+ // multiple files.
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine oskip= and ofs= of hofs="));
+ }
- if (OFF_T_MAX / seek_sector_size < seek_sectors)
- dc3_error (EXIT_FAILURE, 0,
- _("offset too large: "
- "cannot truncate to a length of seek=%"PRIuMAX""
- " (%lu-byte) sectors"),
- seek_sectors, seek_sector_size);
+ if (settings->max_output_file_size == INFINITE_BYTES)
+ {
+ #ifdef DEFAULT_OUTPUT_FILE_SIZE
+ // This is necessary since the preprocessor symbol may have a size suffix.
+ parse_quantifier(settings, "ofsz", AS_STRING(DEFAULT_OUTPUT_FILE_SIZE));
+ #else
+ report_error(DC3DD_EXIT_ABORTED, 0, _("ofs= or hofs= specified, must specify ofsz="));
+ #endif
+ }
+ }
+ else if (settings->max_output_file_size != INFINITE_BYTES)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("ofsz= specified, must specify ofs= or hofs= at least once"));
+ }
+}
- if (ftruncate (STDOUT_FILENO, size) != 0)
- {
- /* Complain only when ftruncate fails on a regular file, a
- directory, or a shared memory object, as POSIX 1003.1-2004
- specifies ftruncate's behavior only for these file types.
- For example, do not complain when Linux 2.4 ftruncate
- fails on /dev/fd0. */
- int ftruncate_errno = errno;
- struct stat stdout_stat;
- if (fstat (STDOUT_FILENO, &stdout_stat) != 0)
- dc3_error (EXIT_FAILURE, errno, _("cannot fstat %s"),
- quote (file_to_open));
- if (S_ISREG (stdout_stat.st_mode)
- || S_ISDIR (stdout_stat.st_mode)
- || S_TYPEISSHM (&stdout_stat))
- dc3_error (EXIT_FAILURE, ftruncate_errno,
- _("truncating at %"PRIuMAX" bytes in output file %s"),
- size, quote (file_to_open));
- }
- }
-#endif
- }
+static void
+validate_IO_combination(settings_t* settings)
+{
+ // Make sure that a valid combination of input and outputs is specified.
+ // Note the early outs for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+
+ if (settings->wipe_target && settings->output_files)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and of=, hof=, ofs= or hofs="));
+ }
+
+ if (settings->wipe_target && settings->input_file)
+ {
+ report_error(DC3DD_EXIT_ABORTED, 0, _("cannot combine wipe= or vwipe= and if= or ifs="));
+ }
+
+ if (settings->wipe_target && !settings->input_pattern)
+ {
+ // Wipe with zeros by default.
+ add_input_pattern(settings, "00");
+ }
+
+ if (!settings->input_pattern && !settings->input_file)
+ {
+ // No inputs specified, default to reading from stdin.
+ add_input_file(settings, "stdin", false);
+ }
+
+ if (!settings->wipe_target && !settings->output_files)
+ {
+ // No outputs specified, default to writing to stdout.
+ add_output_file(settings, "stdout", false, false);
+ }
+
+ DC3DD_ASSERT((settings->wipe_target && settings->input_pattern) ||
+ (!settings->wipe_target && settings->output_files &&
+ (settings->input_file || settings->input_pattern)));
+}
- install_signal_handlers ();
-
- bool dc3_sizeprobe_worked = false;
-
- // TODO: should really specify if non-probing was due to
- // lack of size-probe mode, or probe failure
- if (dc3_sectorsize == 0)
- {
- dc3_sectorsize = 512;
- fprintf(stderr, "warning: sector size not probed, assuming 512\n");
- }
- else
- {
- dc3_sizeprobe_worked = true;
- }
-
- dc3_small_read = dc3_sectorsize;
-
- if (input_blocksize % dc3_sectorsize != 0)
- dc3_error(EXIT_FAILURE, 0, "fatal: input block size (%zd) must be a multiple of sector size (%zd)", input_blocksize, dc3_sectorsize);
-
- if (max_sectors != (uintmax_t)-1)
- input_bytes = dc3_sectorsize * max_sectors;
- // when skip=X given, adjust input_bytes so progress display is accurate
- else if (skip_sectors != 0)
- input_bytes -= skip_sectors * dc3_sectorsize;
-
- if (dc3_mode_wipe && max_sectors == (uintmax_t)-1 && dc3_sizeprobe_worked)
- max_sectors = input_bytes / dc3_sectorsize;
-
- /* We have to check if the installer turned on a hashing algorithm
- using a compiler define (e.g. CFLAGS="-DDEFAULT_HASH_MD5") but
- didn't specify a hash log or hash window. In this case the
- dc3_hash and hash_log variables don't get set. */
- i = 0;
- while (i < DC3_NUM_HASHES && !dc3_hash)
- {
- if (dc3_hashinfo[i].inuse)
- dc3_hash = true;
+static void
+validate_settings(settings_t* settings)
+{
+ // This function is decomposed into a series of shorter functions for
+ // readability and maintainability. The order of calling of these functions
+ // should be maintained.
+ validate_IO_combination(settings);
+ validate_IO_options(settings);
+ validate_size_settings(settings);
+ validate_hashing_settings(settings);
+}
- i++;
- }
+static settings_t*
+make_settings()
+{
+ settings_t* settings = (settings_t*)malloc(sizeof(settings_t));
+ settings->input_pattern_string = NULL;
+ settings->input_pattern = NULL;
+ settings->input_pattern_length = 0;
+ settings->input_file = NULL;
+ settings->output_files = NULL;
+ settings->wipe_target = NULL;
+ settings->sector_size = 0;
+ settings->sector_size_source = NULL;
+ settings->buffer_size = DEFAULT_BUFFER_SIZE;
+ settings->input_sectors_to_skip = 0;
+ settings->output_sectors_to_skip = 0;
+ settings->max_sectors_to_input = INFINITE_SECTORS;
+ settings->max_output_file_size = INFINITE_BYTES;
+ settings->recover_errors = true;
+ settings->splitting_output = false;
+ settings->verifying_output = false;
+ settings->append_output = false;
+ settings->corrupt_output = false;
+ return settings;
+}
+
+static settings_t*
+parse_args(int argc, char* const* argv)
+{
+ settings_t* settings = make_settings();
+
+ for (int i = optind; i < argc; ++i)
+ {
+ // Split the argument into a name/value pair.
+ char const* name = argv[i];
+ char const* val = strchr(name, '=');
+ if (!val)
+ {
+ // Note the early out for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+ report_error(DC3DD_EXIT_ABORTED, 0, _("unrecognized option %s"), quote(name));
+ }
+ ++val;
- if (dc3_hash)
- dc3_hash_init();
+ if (option_is(name, "if"))
+ {
+ add_input_file(settings, val, false);
+ }
+ else if (option_is(name, "ifs"))
+ {
+ add_input_file(settings, val, true);
+ }
+ else if (option_is(name,"pat"))
+ {
+ add_input_pattern(settings, val);
+ }
+ else if (option_is(name,"tpat"))
+ {
+ add_input_text_pattern(settings, val);
+ }
+ else if (option_is(name, "of"))
+ {
+ add_output_file(settings, val, false, false);
+ }
+ else if (option_is(name, "hof"))
+ {
+ add_output_file(settings, val, false, true);
+ }
+ else if (option_is(name, "ofs"))
+ {
+ add_output_file(settings, val, true, false);
+ }
+ else if (option_is(name, "hofs"))
+ {
+ add_output_file(settings, val, true, true);
+ }
+ else if (option_is(name,"hash"))
+ {
+ activate_hash(val);
+ }
+ else if (option_is(name,"log") || option_is(name, "hlog"))
+ {
+ // Arg already parsed in initiate_logging().
+ }
+ else if (option_is(name,"rec"))
+ {
+ // i.e., rec=off
+ settings->recover_errors = false;
+ }
+ else if (option_is(name, "app"))
+ {
+ // i.e., app=on
+ settings->append_output = true;
+ }
+ else if (option_is(name, "wipe"))
+ {
+ add_wipe_target(settings, val, false);
+ }
+ else if (option_is(name, "vwipe"))
+ {
+ add_wipe_target(settings, val, true);
+ }
+ else if (option_is(name, "verb"))
+ {
+ // i.e., verb=on
+ verbose_reporting = true;
+ }
+ else if (option_is(name, "nwspc"))
+ {
+ // i.e., nwspc=on
+ compact_reporting = true;
+ }
+ else if (option_is(name, "b10"))
+ {
+ // i.e., dbr=on
+ progress_bytes_reporting_flag = 0;
+ }
+ else if (option_is(name, "corruptoutput"))
+ {
+ // i.e., corruptoutput=on
+ settings->corrupt_output = true;
+ }
+ else
+ {
+ parse_quantifier(settings, name, val);
+ }
+ }
+
+ return settings;
+}
- start_time = gethrxtime ();
+static settings_t*
+parse_settings(int argc, char* const* argv)
+{
+ settings_t* settings = parse_args(argc, argv);
+ validate_settings(settings);
+ return settings;
+}
+static char*
+make_cmd_line_string(int argc, char* const* argv)
+{
+ size_t len = 1; // At least 1, for terminating NUL.
- char* dc3_start_time = dc3_time();
- fprintf(stderr, "dc3dd %s started at %s\n", VERSION, dc3_start_time);
- if (error_log != NULL)
- fprintf(error_log, "\ndc3dd %s started at %s\n", VERSION, dc3_start_time);
+ for (int i = 0; i < argc; ++i)
+ {
+ len += strlen(argv[i]);
+ if (i < (argc - 1))
+ {
+ len += 1;
+ }
+ }
+
+ char* cmdline = NULL;
+ cmdline = (char*)malloc(len);
+ char* command_line = cmdline;
+ for (int i = 0; i < argc; ++i)
+ {
+ for (size_t j = 0; j < strlen(argv[i]); ++j)
+ {
+ *cmdline = argv[i][j];
+ ++cmdline;
+ }
- fprintf(stderr, "command line: %s\n", dc3_cmdline);
- if (error_log != NULL)
- fprintf(error_log, "command line: %s\n", dc3_cmdline);
+ if (i < (argc - 1))
+ {
+ *cmdline = ' ';
+ ++cmdline;
+ }
+ }
+ *cmdline = '\0';
+
+ return command_line;
+}
- fprintf(stderr, "compiled options:");
- dc3_print_flags(stderr, false);
- if (error_log != NULL)
- {
- fprintf(error_log, "compiled options:");
- dc3_print_flags(error_log, false);
- }
+static void
+report_compile_flags(FILE* file, bool newlines)
+{
+ #ifdef DEFAULT_HASH_MD5
+ fputs(" DEFAULT_HASH_MD5 (hash=md5)", file);
+ if (newlines) fputs("\n", file);
+ #endif
+
+ #ifdef DEFAULT_HASH_SHA1
+ fputs(" DEFAULT_HASH_SHA1 (hash=sha1)", file);
+ if (newlines) fputs("\n", file);
+ #endif
+
+ #ifdef DEFAULT_HASH_SHA256
+ fputs(" DEFAULT_HASH_SHA256 (hash=sha26)", file);
+ if (newlines) fputs("\n", file);
+ #endif
+
+ #ifdef DEFAULT_HASH_SHA512
+ fputs(" DEFAULT_HASH_SHA512 (hash=sha512)", file);
+ if (newlines) fputs("\n", file);
+ #endif
+
+ #ifdef DEFAULT_OUTPUT_FILE_SIZE
+ fprintf(file, " DEFAULT_OUTPUT_FILE_SIZE (ofsz=%s)", AS_STRING(DEFAULT_OUTPUT_FILE_SIZE));
+ if (newlines) fputs("\n", file);
+ #endif
+
+ #ifdef DEFAULT_VERBOSE_REPORTING
+ fputs(" DEFAULT_VERBOSE_REPORTING (verb=on)", file);
+ if (newlines) fputs("\n", file);
+ #endif
+
+ #ifdef DEFAULT_COMPACT_REPORTING
+ fputs(" DEFAULT_COMPACT_REPORTING (nwspc=on)", file);
+ if (newlines) fputs("\n", file);
+ #endif
+
+ #ifdef DEFAULT_BASE_TEN_BYTES_REPORTING
+ fputs(" DEFAULT_BASE_TEN_BYTES_REPORTING (dbr=on)", file);
+ if (newlines) fputs("\n", file);
+ #endif
+
+ if (!newlines) fputs("\n", file);
+}
- fprintf(stderr, "sector size: %zd (%s)\n", dc3_sectorsize, dc3_sizeprobe_worked ? "probed" : "assumed");
- if (error_log != NULL)
- fprintf(error_log, "sector size: %zd (%s)\n", dc3_sectorsize, dc3_sizeprobe_worked ? "probed" : "assumed");
+static void
+report_settings(int argc, char* const* argv)
+{
+ // Report compiled-in options.
+ fputs(_("compiled options:"), stderr);
+ report_compile_flags(stderr, false);
+ if (log != NULL)
+ {
+ fputs(_("compiled options:"), log);
+ report_compile_flags(log, false);
+ }
+ if (hash_log != NULL)
+ {
+ fputs(_("compiled options:"), hash_log);
+ report_compile_flags(hash_log, false);
+ }
+
+ // Report the command line.
+ char* command_line = make_cmd_line_string(argc, argv);
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, _("command line: %s\n"), command_line);
+ report_to_all(message);
+ free(command_line);
+ flush_logs();
+}
+
+static void
+report_start_message()
+{
+ // Save the program start time in a global for later use in
+ // progress messages.
+ start_time = gethrxtime();
+
+ // Write the start message to all logs (i.e., console, log, hash log).
+ // The message acts as a sort of header for the run. The leading newline
+ // character acts to separate the output from multiple runs when
+ // appending to an existing log.
+ char* formatted_start_time = get_formatted_time_string();
+ char message[DISPLAY_MESSAGE_LENGTH];
+ sprintf(message, "\n%s %s started at %s\n", PROGRAM_NAME, VERSION, formatted_start_time);
+ free(formatted_start_time);
+ report_to_all(message);
+ flush_logs();
+}
- if (error_log != NULL)
- fflush(error_log);
+static void
+open_log(const char* arg, const char* arg_name, FILE** log)
+{
+ // Check for duplication of a log argument in the command line.
+ // Note the early out for command line errors since evidence should not
+ // be handled any more than necessary, and glossing over a malformed
+ // command line is therefore undesirable - the user's choices need to be
+ // exactly specified before a run is undertaken.
+ char message[DISPLAY_MESSAGE_LENGTH];
+ if (*log != NULL)
+ {
+ sprintf(message, _("cannot specify %s more than once"), arg_name);
+ report_error(DC3DD_EXIT_ABORTED, 0, message);
+ }
+
+ // Extract the log file name from the command line argument.
+ const char* val = strchr(arg, '=');
+ if (!val)
+ {
+ sprintf(message, _("%s specified with no file name"), arg_name);
+ report_error(DC3DD_EXIT_ABORTED, 0, message);
+ }
+ ++val;
+
+ // Open the log in append mode to support use cases where the
+ // imaging is performed using multiple runs (e.g., using skips
+ // etc., to work around errors) and a "cumulative" record of
+ // the runs is desired.
+ *log = fopen(val, "a");
+ if (*log == NULL)
+ {
+ report_error(DC3DD_EXIT_ABORTED, errno, _("opening log %s"), quote(val));
+ }
+}
- exit_status = dd_copy ();
+static void
+initiate_logging(int argc, char* const* argv)
+{
+ // Use PTHREAD_MUTEX_RECURSIVE to initialize the global mutex for
+ // synchronizing reporting output to the log(s) and console, so that nested
+ // calls to functions like report_to_log() that lock the mutex are safe.
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+ pthread_mutex_init(&reporting_lock, &attr);
+ pthread_mutexattr_destroy(&attr);
+
+ // Look for command line options specifying logs.
+ const char* arg = NULL;
+ for (int i = optind; i < argc; ++i)
+ {
+ arg = argv[i];
+ if (option_is(arg, "log"))
+ {
+ open_log(arg, "log=", &log);
+ }
+ else if (option_is(arg, "hlog"))
+ {
+ open_log(arg, "hlog=", &hash_log);
+ }
+ }
+}
- if (dc3_mode_verify)
- dc3_error(0,0,_("Verify PASSED"));
+void
+usage(int status)
+{
+ if (status != EXIT_SUCCESS)
+ {
+ fprintf (stderr, _("Try `%s --help' for more information.\n"), program_name);
+ }
+ else
+ {
+ fputs(_("------\n"), stderr);
+ fputs(_("usage:\n"), stderr);
+ fputs(_("------\n\n"), stderr);
+ fprintf(stderr, _("\t%s [OPTION 1] [OPTION 2] ... [OPTION N]\n"), program_name);
+ fputs("\n", stderr);
+ fprintf(stderr, _("\t\t*or*\n"), program_name);
+ fputs("\n", stderr);
+ fprintf(stderr, _("\t%s [HELP OPTION]\n"), program_name);
+ fputs("\n", stderr);
+ fprintf(stderr, _("\twhere each OPTION is selected from the basic or advanced\n"), program_name);
+ fprintf(stderr, _("\toptions listed below, or HELP OPTION is selected from the\n"), program_name);
+ fprintf(stderr, _("\thelp options listed below.\n\n"), program_name);
+
+ fputs(_("--------------\n"), stderr);
+ fputs(_("basic options:\n"), stderr);
+ fputs(_("--------------\n\n"), stderr);
+ fprintf(stderr, "\t%-21s%s\n", _("if=FILE"), _("Read input from the device or regular file FILE"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("(see note #1 below). This option can only be used"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("once and cannot be combined with ifs=, pat=,"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("or tpat=."));
+ if (!O_DIRECT)
+ {
+ fprintf(stderr, "\t%-21s%s\n", "", _("If FILE is a device, use rdisk for"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("direct (unbuffered) input to enable read error"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("recovery unless rec=off is specified."));
+ }
+ fprintf(stderr, "\t%-21s%s\n", _("ifs=BASE.FMT"), _("Read input from a set of files with base name"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("BASE and sequential file name extensions"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("conforming to the format specifier FMT (see"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("note #4 below). This option can only be used once"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("and cannot be combined with if=, pat=, or"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("tpat=."));
+ fprintf(stderr, "\t%-21s%s\n", _("of=FILE"), _("Write output to FILE (see note #2 below). This"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("option can be used more than once (see note #3"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("below)."));
+ fprintf(stderr, "\t%-21s%s\n", _("hof=FILE"), _("Write output to FILE and verify FILE after writing"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("it by hashing it and comparing the output hash(es)"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("to the input hash(es). This option can be used more"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("than once (see note #3 below)."));
+ fprintf(stderr, "\t%-21s%s\n", _("ofs=BASE.FMT"), _("Write output to a set of files with base name BASE"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("and sequential file name extensions generated from"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("the format specifier FMT (see note #4 below). This"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("option can be used more than once (see note #3"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("below). Specify the maximum size of each file"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("in the set using ofsz=."));
+ fprintf(stderr, "\t%-21s%s\n", _("hofs=BASE.FMT"), _("Write output to a set of files with base name BASE"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("and sequential file name extensions generated from"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("the format specifier FMT (see note #4 below)."));
+ fprintf(stderr, "\t%-21s%s\n", "", _("Verify the files after writing them by hashing"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("them and comparing the output hash(es) to the input"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("hash(es). This option can be used more than once"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("(see note #3 below). Specify the maximum size of"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("each file in the set using ofsz=."));
+ fprintf(stderr, "\t%-21s%s\n", _("ofsz=BYTES"), _("Set the maximum size of each file in the sets of"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("files specified using ofs= or hofs= to"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("BYTES (see note #5 below). A default value for"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("this option may be set at compile time using"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("-DDEFAULT_OUTPUT_FILE_SIZE followed by the desired"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("value in BYTES."));
+ fprintf(stderr, "\t%-21s%s\n", _("hash=ALGORITHM"), _("Compute an ALGORITHM hash of the input and also"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("of any outputs specified using hof= or hofs=,"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("where ALGORITHM is one of md5, sha1, sha256, or"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("sha512. This option may be used once for each"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("supported ALGORITHM. Alternatively, hashing can"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("be activated at compile time using one or more of"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("-DDEFAULT_HASH_MD5,-DDEFAULT_HASH_SHA1,"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("-DDEFAULT_HASH_SHA256, and -DDEFAULT_HASH_SHA512."));
+ fprintf(stderr, "\t%-21s%s\n", _("log=FILE"), _("Log I/O statistcs, diagnostics, and total hashes"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("of input and output to FILE. If hlog= is not"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("specified, piecewise hashes of multiple file"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("input and output are also logged to FILE."));
+ fprintf(stderr, "\t%-21s%s\n\n", _("hlog=FILE"), _("Log total hashes and piecewise hashes to FILE."));
+
+ fputs(_("-----------------\n"), stderr);
+ fputs(_("advanced options:\n"), stderr);
+ fputs(_("-----------------\n\n"), stderr);
+ fprintf(stderr, "\t%-21s%s\n", _("rec=off"), _("By default, zeros are written to the output(s) in"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("place of bad sectors when the input is a device."));
+ fprintf(stderr, "\t%-21s%s\n", "", _("Use this option to cause the program to instead"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("exit when a bad sector is encountered."));
+ fprintf(stderr, "\t%-21s%s\n", _("wipe=DEVICE"), _("Wipe DEVICE by writing zeros (default) or a"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("pattern specified by pat= or tpat=."));
+ fprintf(stderr, "\t%-21s%s\n", _("vwipe=DEVICE"), _("Wipe DEVICE by writing zeros (default) or a"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("pattern specified by pat= or tpat=."));
+ fprintf(stderr, "\t%-21s%s\n", "", _("Verify DEVICE after writing it by hashing it"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("and comparing the hash(es) to the input hash(es)."));
+ fprintf(stderr, "\t%-21s%s\n", _("pat=HEX"), _("Use pattern as input, writing HEX to every byte"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("of the output. This option can only be used once"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("and cannot be combined with if=, ifs=, or"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("tpat=."));
+ fprintf(stderr, "\t%-21s%s\n", _("tpat=TEXT"), _("Use text pattern as input, writing the string TEXT"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("repeatedly to the output. This option can only be"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("used once and cannot be combined with if=, ifs=,"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("or pat=."));
+ fprintf(stderr, "\t%-21s%s\n", _("cnt=SECTORS"), _("Input only SECTORS input sectors. Must be used with"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("pat= or tpat= if not using the pattern"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("with wipe= or vwipe= to wipe a device."));
+ fprintf(stderr, "\t%-21s%s\n", _("iskip=SECTORS"), _("Skip SECTORS sectors at start of the input device"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("or file."));
+ fprintf(stderr, "\t%-21s%s\n", _("oskip=SECTORS"), _("Skip SECTORS sectors at start of the output"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("file. Specifying oskip= automatically "));
+ fprintf(stderr, "\t%-21s%s\n", "", _("sets app=on."));
+ fprintf(stderr, "\t%-21s%s\n", _("app=on"), _("Do not overwrite an output file specified with"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("of= if it already exists, appending output instead."));
+ fprintf(stderr, "\t%-21s%s\n", _("ssz=BYTES"), _("Unconditionally use BYTES (see note #5 below) bytes"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("for sector size. If ssz= is not specified,"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("sector size is determined by probing the device;"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("if the probe fails or the target is not a device,"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("a sector size of 512 bytes is assumed."));
+ fprintf(stderr, "\t%-21s%s\n", _("bufsz=BYTES"), _("Set the size of the internal byte buffers to BYTES"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("(see note #5 below). This effectively sets the"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("maximum number of bytes that may be read at a time"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("from the input. BYTES must be a multiple of sector"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("size. Use this option to fine-tune performance."));
+ fprintf(stderr, "\t%-21s%s\n", _("verb=on"), _("Activate verbose reporting, where sectors in/out"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("are reported for each file in sets of files"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("specified using ifs=, ofs=, or hofs=."));
+ fprintf(stderr, "\t%-21s%s\n", "", _("Alternatively, verbose reporting may be"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("activated at compile time using"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("-DDEFAULT_VERBOSE_REPORTING."));
+ fprintf(stderr, "\t%-21s%s\n", _("nwspc=on"), _("Activate compact reporting, where the use"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("of white space to divide log output into"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("logical sections is suppressed. Alternatively,"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("compact reporting may be activated at compile"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("time using -DDEFAULT_COMPACT_REPORTING."));
+ fprintf(stderr, "\t%-21s%s\n", _("b10=on"), _("Activate base 10 bytes reporting, where the"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("progress display reports 1000 bytes instead"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("of 1024 bytes as 1 KB. Alternatively, base 10"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("bytes reporting may be activated at compile"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("time using -DDEFAULT_BASE_TEN_BYTES_REPORTING."));
+ fprintf(stderr, "\t%-21s%s\n", _("corruptoutput=on"), _("For verification testing and demonstration"));
+ fprintf(stderr, "\t%-21s%s\n", "", _("purposes, corrupt the output file(s) with extra"));
+ fprintf(stderr, "\t%-21s%s\n\n", "", _("bytes so a hash mismatch is guaranteed."));
+
+ fputs(_("-------------\n"), stderr);
+ fputs(_("help options:\n"), stderr);
+ fputs(_("-------------\n\n"), stderr);
+ fputs (HELP_OPTION_DESCRIPTION, stderr);
+ fputs (VERSION_OPTION_DESCRIPTION, stderr);
+ fputs (" --flags display compile-time flags and exit\n\n", stderr);
+
+ fputs(_("------\n"), stderr);
+ fputs(_("notes:\n"), stderr);
+ fputs(_("------\n\n"), stderr);
+ fputs(_("1. To read from stdin, do not specify if=, ifs=, pat=, or tpat=.\n"), stderr);
+ fputs(_("2. To write to stdout, do not specify of=, hof=, ofs=, hofs=, wipe=,\n"), stderr);
+ fputs(_(" or vwipe=.\n"), stderr);
+ fputs(_("3. To write to multiple outputs specify more than one of of=, hof=, ofs=,\n"), stderr);
+ fputs(_(" or hofs=, in any combination.\n"), stderr);
+ fputs(_("4. FMT is a pattern for a sequence of file extensions that can be numerical\n"), stderr);
+ fputs(_(" starting at zero, numerical starting at one, or alphabetical. Specify FMT\n"), stderr);
+ fputs(_(" by using a series of zeros, ones, or a's, respectively. The number of\n"), stderr);
+ fputs(_(" characters used indicates the desired length of the extensions.\n"), stderr);
+ fputs(_(" For example, a FMT specifier of 1111 indicates four character\n"), stderr);
+ fputs(_(" numerical extensions starting with 0001.\n"), stderr);
+ fputs(_("5. BYTES may be followed by the following multiplicative suffixes:\n"), stderr);
+ fputs(_(" c (1), w (2), b (512), kB (1000), K (1024), MB (1000*1000),\n"), stderr);
+ fputs(_(" M (1024*1024), GB (1000*1000*1000), G (1024*1024*1024), and\n"), stderr);
+ fputs(_(" so on for T, P, E, Z, and Y.\n"), stderr);
+ fputs(_("6. Consider using cnt=, iskip= and oskip= to work around\n"), stderr);
+ fputs(_(" unreadable sectors if error recovery fails.\n"), stderr);
+ fputs(_("7. Sending an interrupt (e.g., CTRL+C) to dc3dd will cause\n"), stderr);
+ fputs(_(" the program to report the work completed at the time\n"), stderr);
+ fputs(_(" the interrupt is received and then exit.\n"), stderr);
+ emit_bug_reporting_address();
+ }
+
+ report_exit_message(status);
+ terminate_logging();
+ exit(status);
+}
- quit (exit_status);
+int
+main (int argc, char **argv)
+{
+ // Set up for localization.
+ initialize_main(&argc, &argv);
+ program_name = argv[0];
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
+ // Handle command line "help options" (i.e., --flags, --help, --version).
+ if (argc == 2 && STREQ(argv[1], "--flags"))
+ {
+ printf("%s compiled with:\n", PROGRAM_NAME);
+ report_compile_flags(stdout, true);
+ exit(DC3DD_EXIT_COMPLETED);
+ }
+ parse_long_options(argc, argv, PROGRAM_NAME, PACKAGE, VERSION, usage, AUTHORS, (char const*)NULL);
+ if (getopt_long(argc, argv, "", NULL, NULL) != -1)
+ {
+ usage(DC3DD_EXIT_FAILED);
+ }
+
+ // Do the requested imaging.
+ initiate_logging(argc, argv);
+ report_start_message();
+ report_settings(argc, argv);
+ settings_t* settings = parse_settings(argc, argv);
+ report_input_size(settings);
+ job_t* jobs = make_jobs(settings);
+ int exit_code = execute_jobs(jobs);
+ report_results(jobs);
+ report_exit_message(exit_code);
+ terminate_logging();
+
+ return exit_code;
}
diff --git a/test-compile.sh b/test-compile.sh
deleted file mode 100755
index e0a1801..0000000
--- a/test-compile.sh
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/bin/bash
-
-# dynamic link, no options
-
-./configure
-if [ $? -ne 0 ]
-then
- echo "Configure failed"
- exit 1
-fi
-
-make
-if [ $? -ne 0 ]
-then
- echo "Make failed"
- exit 2
-fi
-
-MSGCOUNT=`./src/dc3dd --flags | grep -c "\<DEFAULT_BLOCKSIZE=32768\>"`
-if [ $MSGCOUNT -ne 1 ]
-then
- echo "DEFAULT_BLOCKSIZE=32768 flag line missing"
- exit 3
-fi
-
-LINECOUNT=`./src/dc3dd --flags | wc -l`
-if [ $LINECOUNT -ne 3 ]
-then
- echo "Flags line count wrong - should be 3"
- exit 3
-fi
-
-
-# dynamic link, options
-
-make distclean
-if [ $? -ne 0 ]
-then
- echo "Make distclean failed"
- exit 2
-fi
-
-./configure CFLAGS="-O2 -DDEFAULT_HASH_MD5 -DDEFAULT_HASH_SHA1 -DDEFAULT_SIZEPROBE -DDEFAULT_PROGRESS -DDEFAULT_PROGRESSCOUNT=1000 -DDEFAULT_HASHCONV_AFTER"
-if [ $? -ne 0 ]
-then
- echo "Configure failed"
- exit 1
-fi
-
-make
-if [ $? -ne 0 ]
-then
- echo "Make failed"
- exit 2
-fi
-
-for a in DEFAULT_HASH_MD5 DEFAULT_HASH_SHA1 DEFAULT_SIZEPROBE DEFAULT_PROGRESS "DEFAULT_PROGRESSCOUNT=1000" DEFAULT_HASHCONV_AFTER "DEFAULT_BLOCKSIZE=32768"
-do
- MSGCOUNT=`./src/dc3dd --flags | grep -c "\<$a\>"`
- if [ $MSGCOUNT -ne 1 ]
- then
- echo "$a flag line missing"
- exit 3
- fi
-done
-
-LINECOUNT=`./src/dc3dd --flags | wc -l`
-if [ $LINECOUNT -ne 9 ]
-then
- echo "Flags line count wrong - should be 8"
- exit 3
-fi
-
-# static link, options
-make distclean
-if [ $? -ne 0 ]
-then
- echo "Make distclean failed"
- exit 2
-fi
-
-./configure CFLAGS="-O2 -DDEFAULT_HASH_MD5 -DDEFAULT_HASH_SHA1 -DDEFAULT_SIZEPROBE -DDEFAULT_PROGRESS -DDEFAULT_PROGRESSCOUNT=1000 -DDEFAULT_HASHCONV_AFTER -static"
-if [ $? -ne 0 ]
-then
- echo "Configure failed (static)"
- exit 1
-fi
-
-make
-if [ $? -ne 0 ]
-then
- echo "Make failed (static)"
- exit 2
-fi
-
diff --git a/test-nessie.sh b/test-nessie.sh
deleted file mode 100755
index b2e843b..0000000
--- a/test-nessie.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-DC3DD="src/dc3dd"
-
-MD5_DIR="/home/amedico/NESSIE Test Files/MD5_Orig"
-SHA1_DIR="/home/amedico/NESSIE Test Files/SHA1"
-
-find "$MD5_DIR"/* -type f | while read f
-do
- h=`"$DC3DD" if="$f" of=/dev/null hash=md5 hashconv=after 2>&1 | grep md5\ TOTAL | awk '{print $3}'`
- b=`basename "$f"`
- o=`md5sum "$f" | awk '{print $1}'`
- if [ "$h" != "$o" ]
- then
- echo "hash mismatch for $b"
- exit 1
- fi
-done
-
-find "$SHA1_DIR"/* -type f | while read f
-do
- h=`"$DC3DD" if="$f" of=/dev/null hash=sha1 hashconv=after 2>&1 | grep sha1\ TOTAL | awk '{print $3}'`
- b=`basename "$f"`
- o=`sha1sum "$f" | awk '{print $1}'`
- if [ "$h" != "$o" ]
- then
- echo "hash mismatch for $b"
- exit 2
- fi
-done
-
diff --git a/test.sh b/test.sh
deleted file mode 100755
index d939bde..0000000
--- a/test.sh
+++ /dev/null
@@ -1,1184 +0,0 @@
-#!/bin/sh
-
-if [ "$1" == "" -o "$2" == "" ]
-then
- echo "Usage: $0 good_dev bad_dev"
- exit 1
-fi
-
-GOOD="$1"
-BAD="$2"
-
-GOOD_SECTORS=1952767
-GOOD_SECTORSIZE=512
-
-BAD_SECTORS=8015505
-BAD_SECTORSIZE=512
-
-BAD_ERROR_SECTOR=4292779
-
-GOOD_REF="/mnt/scratch/ref-good.img"
-BAD_REF="/mnt/scratch/ref-bad.img"
-PAT_REF="/mnt/scratch/ref-pat.img"
-
-DC3DD="src/dc3dd"
-
-TEST_IMG="/mnt/scratch/test.img"
-TEST_LOG="/mnt/scratch/test.log"
-
-# no config below this line
-#GOOD_SECTORS=`grep sectors /var/log/messages | grep $GOOD_DEV | tail -1 | awk '{print $9}'`
-#GOOD_SECTORSIZE=`grep sectors /var/log/messages | grep $GOOD_DEV | tail -1 | awk '{print $10}' | cut -f1 -d-`
-GOOD_BYTES=`expr $GOOD_SECTORS \* $GOOD_SECTORSIZE`
-
-#BAD_SECTORS=`grep sectors /var/log/messages | grep $BAD_DEV | tail -1 | awk '{print $9}'`
-#BAD_SECTORSIZE=`grep sectors /var/log/messages | grep $BAD_DEV | tail -1 | awk '{print $10}' | cut -f1 -d-`
-BAD_BYTES=`expr $BAD_SECTORS \* $BAD_SECTORSIZE`
-
-umount "$GOOD"
-umount "$BAD"
-
-if [ -L "$GOOD" ]
-then
- GOOD=`readlink -f "$GOOD"`
-fi
-
-if [ -L "$BAD" ]
-then
- BAD=`readlink -f "$BAD"`
-fi
-
-GOOD_DEV=`basename "$GOOD"`
-BAD_DEV=`basename "$BAD"`
-
-# clean up temp files from any previous runs
-function cleanup()
-{
- rm "$TEST_IMG" "$TEST_LOG" "$TEST_IMG".* "$TEST_LOG".*
- if [ -e "$TEST_IMG" -o -e "$TEST_LOG" ]
- then
- echo "Failed to remove test output files"
- exit 2
- fi
-}
-
-function good()
-{
-cleanup
-
-# load reference image into good drive
-dd if="$GOOD_REF" of="$GOOD" bs="$GOOD_SECTORSIZE"
-if [ $? -ne 0 ]
-then
- echo "Failed to load good reference image $GOOD_REF to good device $GOOD"
- exit 1
-fi
-
-# get image from good drive
-"$DC3DD" if="$GOOD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" hash=md5,sha1 hashconv=after sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Run Failed"
- exit 3
-fi
-
-# check the retrieved image
-
-# a. file sizes
-REF_BYTES=`stat -c %s "$GOOD_REF"`
-IMG_BYTES=`stat -c %s "$TEST_IMG"`
-
-if [ $REF_BYTES -ne $IMG_BYTES ]
-then
- echo "Size mismatch"
- exit 3
-fi
-
-# b. checksums
-REF_SUM=`md5sum "$GOOD_REF" | cut -f 1 -d \ `
-IMG_SUM=`md5sum "$TEST_IMG" | cut -f 1 -d \ `
-LOG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
-if [ "$REF_SUM" != "$IMG_SUM" ]
-then
- echo "Ref/Img Checksum mismatch"
- exit 3
-fi
-
-if [ "$REF_SUM" != "$LOG_SUM" ]
-then
- echo "Ref/Log Checksum mismatch"
- exit 3
-fi
-
-# sector probe/count
-
-LOG_SECTORMODE=`grep sector\ size\: "$TEST_LOG" | awk '{print $4}'`
-LOG_SECTORSIZE=`grep sector\ size\: "$TEST_LOG" | awk '{print $3}'`
-LOG_SECTORS_FULL=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
-LOG_SECTORS_PART=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
-LOG_BYTES=`grep bytes "$TEST_LOG" | awk '{print $1}'`
-
-if [ "$LOG_SECTORMODE" != "(probed)" ]
-then
- echo "Failed to probe sector size"
- exit 3
-fi
-
-if [ "$LOG_SECTORSIZE" != "$GOOD_SECTORSIZE" ]
-then
- echo "Wrong sector size detected"
- exit 3
-fi
-
-if [ "$LOG_SECTORS_PART" != "0" ]
-then
- echo "Partial sectors must be zero"
- exit 3
-fi
-
-if [ "$LOG_SECTORS_FULL" != "$GOOD_SECTORS" ]
-then
- echo "Wrong sector count"
- exit 3
-fi
-
-if [ "$LOG_BYTES" != "$GOOD_BYTES" ]
-then
- echo "Wrong byte count - log doesn't match size calculated from kernel sectors and sectorsize"
- exit 3
-fi
-
-if [ "$LOG_BYTES" != "$IMG_BYTES" ]
-then
- echo "Log file bytes doesn't match output file size"
- exit 3
-fi
-
-if [ "$LOG_BYTES" != "$REF_BYTES" ]
-then
- echo "Log file bytes doesn't match reference file size"
- exit 3
-fi
-
-MSGCOUNT=`egrep -c bytes.+copied "$TEST_LOG"`
-if [ $MSGCOUNT -ne 1 ]
-then
- echo "Log is missing 'bytes copied' message"
- exit 3
-fi
-
-# test verify mode
-
-# a. drive to reference file
-"$DC3DD" if="$GOOD" vf="$GOOD_REF" conv=noerror,sync iflag=direct log="$TEST_LOG" sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Verify to Reference Image Failed"
- exit 3
-fi
-
-MSGCOUNT=`egrep -c bytes.+compared "$TEST_LOG"`
-if [ $MSGCOUNT -ne 1 ]
-then
- echo "Log is missing 'bytes compared' message"
- exit 3
-fi
-
-MSGCOUNT=`grep -c Verify\ PASSED "$TEST_LOG"`
-if [ $MSGCOUNT -ne 1 ]
-then
- echo "Log is missing 'Verify PASSED' message"
- exit 3
-fi
-
-
-# b. drive to produced image file
-"$DC3DD" if="$GOOD" vf="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Verify to Created Image Failed"
- exit 3
-fi
-
-MSGCOUNT=`egrep -c bytes.+compared "$TEST_LOG"`
-if [ $MSGCOUNT -ne 2 ]
-then
- echo "Log is missing 'bytes compared' message"
- exit 3
-fi
-
-MSGCOUNT=`grep -c Verify\ PASSED "$TEST_LOG"`
-if [ $MSGCOUNT -ne 2 ]
-then
- echo "Log is missing 'Verify PASSED' message"
- exit 3
-fi
-
-
-# test splitting
-cleanup
-
-"$DC3DD" if="$GOOD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" splitformat=000 split=128M hash=md5,sha1 hashconv=after sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Image to split output failed"
- exit 3
-fi
-
-IMG_SUM=`cat "$TEST_IMG".* | md5sum | cut -f 1 -d \ `
-LOG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
-if [ "$REF_SUM" != "$LOG_SUM" ]
-then
- echo "Split: Ref/Log Checksum mismatch"
- exit 3
-fi
-
-if [ "$IMG_SUM" != "$REF_SUM" ]
-then
- echo "Split: Img/Ref Checksum mismatch"
- exit 3
-fi
-
-LOG_SECTORMODE=`grep sector\ size\: "$TEST_LOG" | awk '{print $4}'`
-LOG_SECTORSIZE=`grep sector\ size\: "$TEST_LOG" | awk '{print $3}'`
-LOG_SECTORS_FULL=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
-LOG_SECTORS_PART=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
-LOG_BYTES=`grep bytes "$TEST_LOG" | awk '{print $1}'`
-
-if [ "$LOG_SECTORMODE" != "(probed)" ]
-then
- echo "Split: Failed to probe sector size"
- exit 3
-fi
-
-if [ "$LOG_SECTORSIZE" != "$GOOD_SECTORSIZE" ]
-then
- echo "Split: Wrong sector size detected"
- exit 3
-fi
-
-if [ "$LOG_SECTORS_PART" != "0" ]
-then
- echo "Split: Partial sectors must be zero"
- exit 3
-fi
-
-if [ "$LOG_SECTORS_FULL" != "$GOOD_SECTORS" ]
-then
- echo "Split: Wrong sector count"
- exit 3
-fi
-
-if [ "$LOG_BYTES" != "$GOOD_BYTES" ]
-then
- echo "Split: Wrong byte count - log doesn't match size calculated from kernel sectors and sectorsize"
- exit 3
-fi
-
-IMG_BYTES=0
-for a in "$TEST_IMG".*
-do
- SPLIT_BYTES=`stat -c %s "$a"`
- IMG_BYTES=`expr $IMG_BYTES + $SPLIT_BYTES`
-done
-
-if [ "$IMG_BYTES" != "$REF_BYTES" ]
-then
- echo "Split: image bytes doesn't match reference file size"
- exit 3
-fi
-
-if [ "$LOG_BYTES" != "$IMG_BYTES" ]
-then
- echo "Split: Log file bytes doesn't match output file size"
- exit 3
-fi
-
-# test joining
-"$DC3DD" if="$GOOD" vfjoin="$TEST_IMG.000" conv=noerror,sync iflag=direct sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "vfjoin failed"
- exit 3
-fi
-
-"$DC3DD" ifjoin="$TEST_IMG.000" vf="$GOOD_REF" conv=noerror,sync iflag=direct sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "ifjoin failed"
- exit 3
-fi
-
-# test interrupting
-
-cleanup
-
-set -m
-"$DC3DD" if="$GOOD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" hash=md5,sha1 hashconv=after sizeprobe=on progress=on& pid=$!;
-sleep 5; kill -s 2 %1
-wait %1
-set +m
-
-#if [ $? -ne 0 ]
-#then
-# echo "Run Failed"
-# exit 3
-#fi
-
-IMG_BYTES=`stat -c %s "$TEST_IMG"`
-LOG_BYTES=`grep bytes "$TEST_LOG" | awk '{print $1}'`
-
-if [ "$LOG_BYTES" != "$IMG_BYTES" ]
-then
- echo "Interrupt: Log file bytes doesn't match output file size"
- exit 3
-fi
-
-IMG_SUM=`md5sum "$TEST_IMG" | cut -f 1 -d \ `
-LOG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
-if [ "$IMG_SUM" != "$LOG_SUM" ]
-then
- echo "Interrupt: Img/Log Checksum mismatch"
- exit 3
-fi
-
-}
-
-
-#############################################################
-# test bad drive
-
-function bad()
-{
-
-ERRS=21
-
-cleanup
-
-# get image from bad drive
-"$DC3DD" if="$BAD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" hash=md5,sha1 hashconv=after sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Run Failed"
- exit 4
-fi
-
-# check the retrieved image
-
-# a. file sizes
-REF_BYTES=`stat -c %s "$BAD_REF"`
-IMG_BYTES=`stat -c %s "$TEST_IMG"`
-
-if [ $REF_BYTES -ne $IMG_BYTES ]
-then
- echo "Size mismatch"
- exit 4
-fi
-
-# b. checksums
-REF_SUM=`md5sum "$BAD_REF" | cut -f 1 -d \ `
-IMG_SUM=`md5sum "$TEST_IMG" | cut -f 1 -d \ `
-LOG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
-if [ "$REF_SUM" != "$IMG_SUM" ]
-then
- echo "Ref/Img Checksum mismatch"
- exit 4
-fi
-
-if [ "$REF_SUM" != "$LOG_SUM" ]
-then
- echo "Ref/Log Checksum mismatch"
- exit 4
-fi
-
-# sector probe/count
-LOG_SECTORMODE=`grep sector\ size\: "$TEST_LOG" | awk '{print $4}'`
-LOG_SECTORSIZE=`grep sector\ size\: "$TEST_LOG" | awk '{print $3}'`
-LOG_SECTORS_FULL=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
-LOG_SECTORS_PART=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
-LOG_SECTORS_OUT_FULL=`grep sectors\ out "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
-LOG_SECTORS_OUT_PART=`grep sectors\ out "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
-LOG_BYTES=`grep bytes "$TEST_LOG" | awk '{print $1}'`
-
-if [ "$LOG_SECTORMODE" != "(probed)" ]
-then
- echo "Failed to probe sector size"
- exit 4
-fi
-
-if [ "$LOG_SECTORSIZE" != "$BAD_SECTORSIZE" ]
-then
- echo "Wrong sector size detected"
- exit 4
-fi
-
-if [ "$LOG_SECTORS_PART" != "21" ]
-then
- echo "Partial (error) sectors in must be 21"
- exit 4
-fi
-
-if [ `expr $LOG_SECTORS_FULL + $LOG_SECTORS_PART` != "$BAD_SECTORS" ]
-then
- echo "Wrong sectors in total count"
- exit 4
-fi
-
-if [ "$LOG_SECTORS_OUT_PART" != "0" ]
-then
- echo "Partial (error) sectors out must be 0"
- exit 4
-fi
-
-if [ "$LOG_SECTORS_OUT_FULL" != "$BAD_SECTORS" ]
-then
- echo "Wrong sectors out total count"
- exit 4
-fi
-
-if [ "$LOG_BYTES" != "$BAD_BYTES" ]
-then
- echo "Wrong byte count - log doesn't match size calculated from kernel sectors and sectorsize"
- exit 4
-fi
-
-if [ "$LOG_BYTES" != "$IMG_BYTES" ]
-then
- echo "Log file bytes doesn't match output file size"
- exit 4
-fi
-
-if [ "$LOG_BYTES" != "$REF_BYTES" ]
-then
- echo "Log file bytes doesn't match reference file size"
- exit 4
-fi
-
-MSGCOUNT=`egrep -c bytes.+copied "$TEST_LOG"`
-if [ $MSGCOUNT -ne 1 ]
-then
- echo "Log is missing 'bytes copied' message"
- exit 4
-fi
-
-for ((i=4292779; i<=4292799; i+=1))
-do
- MSGCOUNT=`grep -c "at sector $i" "$TEST_LOG"`
- if [ $MSGCOUNT -ne 1 ]
- then
- echo "Log is missing error message for sector $i"
- exit 4
- fi
-done
-
-# test verify mode
-
-# a. drive to reference file
-"$DC3DD" if="$BAD" vf="$BAD_REF" conv=noerror,sync iflag=direct log="$TEST_LOG" sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Verify to Reference Image Failed"
- exit 4
-fi
-
-MSGCOUNT=`egrep -c bytes.+compared "$TEST_LOG"`
-if [ $MSGCOUNT -ne 1 ]
-then
- echo "Log is missing 'bytes compared' message"
- exit 4
-fi
-
-MSGCOUNT=`grep -c Verify\ PASSED "$TEST_LOG"`
-if [ $MSGCOUNT -ne 1 ]
-then
- echo "Log is missing 'Verify PASSED' message"
- exit 4
-fi
-
-
-# b. drive to produced image file
-"$DC3DD" if="$BAD" vf="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Verify to Created Image Failed"
- exit 4
-fi
-
-MSGCOUNT=`egrep -c bytes.+compared "$TEST_LOG"`
-if [ $MSGCOUNT -ne 2 ]
-then
- echo "Log is missing 'bytes compared' message"
- exit 4
-fi
-
-MSGCOUNT=`grep -c Verify\ PASSED "$TEST_LOG"`
-if [ $MSGCOUNT -ne 2 ]
-then
- echo "Log is missing 'Verify PASSED' message"
- exit 4
-fi
-
-
-# test splitting
-cleanup
-
-"$DC3DD" if="$BAD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" splitformat=000 split=128M hash=md5,sha1 hashconv=after sizeprobe=on progress=on
-if [ $? -ne 0 ]
-then
- echo "Image to split output failed"
- exit 4
-fi
-
-IMG_SUM=`cat "$TEST_IMG".* | md5sum | cut -f 1 -d \ `
-LOG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
-if [ "$REF_SUM" != "$LOG_SUM" ]
-then
- echo "Split: Ref/Log Checksum mismatch"
- exit 4
-fi
-
-if [ "$IMG_SUM" != "$REF_SUM" ]
-then
- echo "Split: Img/Ref Checksum mismatch"
- exit 4
-fi
-
-LOG_SECTORMODE=`grep sector\ size\: "$TEST_LOG" | awk '{print $4}'`
-LOG_SECTORSIZE=`grep sector\ size\: "$TEST_LOG" | awk '{print $3}'`
-LOG_SECTORS_FULL=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
-LOG_SECTORS_PART=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
-LOG_SECTORS_OUT_FULL=`grep sectors\ out "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
-LOG_SECTORS_OUT_PART=`grep sectors\ out "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
-LOG_BYTES=`grep bytes "$TEST_LOG" | awk '{print $1}'`
-
-if [ "$LOG_SECTORMODE" != "(probed)" ]
-then
- echo "Split: Failed to probe sector size"
- exit 4
-fi
-
-if [ "$LOG_SECTORSIZE" != "$BAD_SECTORSIZE" ]
-then
- echo "Split: Wrong sector size detected"
- exit 4
-fi
-
-if [ "$LOG_SECTORS_PART" != "21" ]
-then
- echo "Split: Partial (error) sectors in must be 21"
- exit 4
-fi
-
-if [ `expr $LOG_SECTORS_FULL + $LOG_SECTORS_PART` != "$BAD_SECTORS" ]
-then
- echo "Split: Wrong sectors in total count"
- exit 4
-fi
-
-if [ "$LOG_SECTORS_OUT_PART" != "0" ]
-then
- echo "Split: Partial (error) sectors out must be 0"
- exit 4
-fi
-
-if [ "$LOG_BYTES" != "$BAD_BYTES" ]
-then
- echo "Split: Wrong byte count - log doesn't match size calculated from kernel sectors and sectorsize"
- exit 4
-fi
-
-IMG_BYTES=0
-for a in "$TEST_IMG".*
-do
- SPLIT_BYTES=`stat -c %s "$a"`
- IMG_BYTES=`expr $IMG_BYTES + $SPLIT_BYTES`
-done
-
-if [ "$IMG_BYTES" != "$REF_BYTES" ]
-then
- echo "Split: image bytes doesn't match reference file size"
- exit 4
-fi
-
-if [ "$LOG_BYTES" != "$IMG_BYTES" ]
-then
- echo "Split: Log file bytes doesn't match output file size"
- exit 4
-fi
-
-}
-
-function bad2()
-{
- cleanup
-
- # TODO: should make sure drive actually produces read errors, otherwise we aren't testing anything useful
-
- # get image from bad drive - dd
- "dd" if="$BAD" of="$TEST_IMG.ddslow" conv=noerror,sync iflag=direct bs=512 skip=4292778 count=40
- if [ $? -ne 0 ]
- then
- echo "Run Failed"
- exit 7
- fi
-
- DDSLOW_SUM=`md5sum "$TEST_IMG.ddslow" | cut -f 1 -d \ `
-
-
- # get image from bad drive - dc3dd slow mode
- "$DC3DD" if="$BAD" of="$TEST_IMG.slow" conv=noerror,sync iflag=direct bs=512 skip=4292778 count=40 hash=md5,sha1 hashconv=after
- if [ $? -ne 0 ]
- then
- echo "Run Failed"
- exit 7
- fi
-
- SLOW_SUM=`md5sum "$TEST_IMG.slow" | cut -f 1 -d \ `
-
- # get image from bad drive - dc3dd fast (dynamic) mode
- "$DC3DD" if="$BAD" of="$TEST_IMG.fast" conv=noerror,sync iflag=direct skip=4292778 count=40 hash=md5,sha1 hashconv=after
- if [ $? -ne 0 ]
- then
- echo "Run Failed"
- exit 7
- fi
-
- FAST_SUM=`md5sum "$TEST_IMG.fast" | cut -f 1 -d \ `
-
- if [ "$DDSLOW_SUM" != "$SLOW_SUM" ]
- then
- echo "bad2: dc3dd slow mode checksum doesn't match dd checksum"
- exit 7
- fi
-
- if [ "$DDSLOW_SUM" != "$FAST_SUM" ]
- then
- echo "bad2: dc3dd fast mode checksum doesn't match dd checksum"
- exit 7
- fi
-
- rm "$TEST_IMG.ddslow"
- rm "$TEST_IMG.slow"
- rm "$TEST_IMG.fast"
-}
-
-
-
-function zero
-{
- cleanup
-
- ZERO_COUNT=$1
- DEF_SECTORSIZE=512
-
- "$DC3DD" if="/dev/zero" of="/dev/null" log="$TEST_LOG" count="$ZERO_COUNT" sizeprobe=on progress=on
- if [ $? -ne 0 ]
- then
- echo "Imaging from /dev/zero"
- exit 5
- fi
-
- LOG_SECTORMODE=`grep sector\ size\: "$TEST_LOG" | awk '{print $4}'`
- LOG_SECTORSIZE=`grep sector\ size\: "$TEST_LOG" | awk '{print $3}'`
- LOG_SECTORS_FULL=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
- LOG_SECTORS_PART=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
- LOG_SECTORS_OUT_FULL=`grep sectors\ out "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
- LOG_SECTORS_OUT_PART=`grep sectors\ out "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
- LOG_BYTES=`grep bytes "$TEST_LOG" | awk '{print $1}'`
-
- if [ "$LOG_SECTORMODE" != "(assumed)" ]
- then
- echo "Split: should be assuming sector size for zero/pattern fill"
- exit 5
- fi
-
- if [ "$LOG_SECTORSIZE" != "$DEF_SECTORSIZE" ]
- then
- echo "Split: Wrong sector size assumed"
- exit 5
- fi
-
- if [ "$LOG_SECTORS_PART" != "0" ]
- then
- echo "Split: Partial (error) sectors in must be 0"
- exit 5
- fi
-
- if [ "$LOG_SECTORS_FULL" != "$ZERO_COUNT" ]
- then
- echo "Split: Wrong sectors in full count"
- exit 5
- fi
-
- if [ "$LOG_SECTORS_OUT_PART" != "0" ]
- then
- echo "Split: Partial (error) sectors out must be 0"
- exit 5
- fi
-
- if [ "$LOG_SECTORS_OUT_FULL" != "$ZERO_COUNT" ]
- then
- echo "Split: Full sectors out count wrong"
- exit 5
- fi
-
- if [ "$LOG_BYTES" != `expr $ZERO_COUNT \* $DEF_SECTORSIZE` ]
- then
- echo "Split: Wrong byte count - log doesn't match size calculated from kernel sectors and sectorsize"
- exit 5
- fi
-}
-
-function zeros
-{
- zero 1
- zero 10
- zero 500
- zero 512
- zero 1000
- zero 1024
- zero 1000000
- zero 1048576
-}
-
-function pattern
-{
- cleanup
-
- PAT="AABBCCDD"
- PAT_COUNT=12345
-
- # write pattern to test image file
- "$DC3DD" textpattern="$PAT" of="$TEST_IMG" log="$TEST_LOG" count="$PAT_COUNT" hash=md5,sha1 hashconv=after sizeprobe=on progress=on
- if [ $? -ne 0 ]
- then
- echo "Pattern: Run Failed"
- exit 3
- fi
-
- # check the retrieved image
-
- # a. file sizes
- REF_BYTES=`stat -c %s "$PAT_REF"`
- IMG_BYTES=`stat -c %s "$TEST_IMG"`
-
- if [ $REF_BYTES -ne $IMG_BYTES ]
- then
- echo "Pattern: Size mismatch"
- exit 3
- fi
-
- # b. checksums
- REF_SUM=`md5sum "$PAT_REF" | cut -f 1 -d \ `
- IMG_SUM=`md5sum "$TEST_IMG" | cut -f 1 -d \ `
- LOG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
- if [ "$REF_SUM" != "$IMG_SUM" ]
- then
- echo "Pattern: Ref/Img Checksum mismatch"
- exit 3
- fi
-
- if [ "$REF_SUM" != "$LOG_SUM" ]
- then
- echo "Pattern: Ref/Log Checksum mismatch"
- exit 3
- fi
-
- # sector probe/count
- PAT_SECTORS="$PAT_COUNT"
- PAT_SECTORSIZE=512
- PAT_BYTES=`expr $PAT_SECTORS \* $PAT_SECTORSIZE`
-
- LOG_SECTORMODE=`grep sector\ size\: "$TEST_LOG" | awk '{print $4}'`
- LOG_SECTORSIZE=`grep sector\ size\: "$TEST_LOG" | awk '{print $3}'`
- LOG_SECTORS_FULL=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
- LOG_SECTORS_PART=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f2 -d+`
- LOG_BYTES=`grep bytes "$TEST_LOG" | awk '{print $1}'`
-
- if [ "$LOG_SECTORMODE" != "(assumed)" ]
- then
- echo "Pattern: should be assuming sector size"
- exit 3
- fi
-
- if [ "$LOG_SECTORSIZE" != "$PAT_SECTORSIZE" ]
- then
- echo "Pattern: Wrong sector size assumed"
- exit 3
- fi
-
- if [ "$LOG_SECTORS_PART" != "0" ]
- then
- echo "Pattern: Partial sectors must be zero"
- exit 3
- fi
-
- if [ "$LOG_SECTORS_FULL" != "$PAT_SECTORS" ]
- then
- echo "Pattern: Wrong sector count"
- exit 3
- fi
-
- if [ "$LOG_BYTES" != "$PAT_BYTES" ]
- then
- echo "Pattern: Wrong byte count - log doesn't match size calculated from known sectors and sectorsize"
- exit 3
- fi
-
- if [ "$LOG_BYTES" != "$IMG_BYTES" ]
- then
- echo "Pattern: Log file bytes doesn't match output file size"
- exit 3
- fi
-
- if [ "$LOG_BYTES" != "$REF_BYTES" ]
- then
- echo "Pattern: Log file bytes doesn't match reference file size"
- exit 3
- fi
-
- MSGCOUNT=`egrep -c bytes.+copied "$TEST_LOG"`
- if [ $MSGCOUNT -ne 1 ]
- then
- echo "Pattern: Log is missing 'bytes copied' message"
- exit 3
- fi
-}
-
-function messages
-{
- cleanup
-
- "$DC3DD" if="/dev/zero" of="/dev/null" log="$TEST_LOG" count="1000" progress=on
- if [ $? -ne 0 ]
- then
- echo "Imaging to /dev/zero test exit message failed"
- exit 6
- fi
-
- LOG_VERB=`egrep "dc3dd.+?at" "$TEST_LOG" | tail -1 | awk '{print $2}'`
-
- if [ "$LOG_VERB" != "completed" ]
- then
- echo "Exit message verb on imaging /dev/zero success should be 'completed'"
- exit 6
- fi
-
- cleanup
-
- "$DC3DD" if="/dev/zero" of="$TEST_IMG" log="$TEST_LOG" count="1000" progress=on
- if [ $? -ne 0 ]
- then
- echo "Imaging to /dev/zero test exit message failed"
- exit 6
- fi
-
- LOG_VERB=`egrep "dc3dd.+?at" "$TEST_LOG" | tail -1 | awk '{print $2}'`
-
- if [ "$LOG_VERB" != "completed" ]
- then
- echo "Exit message verb on imaging /dev/zero success should be 'completed'"
- exit 6
- fi
-
- cleanup
-
- "$DC3DD" if="$GOOD" of="$TEST_IMG" log="$TEST_LOG" progress=on
- if [ $? -ne 0 ]
- then
- echo "Imaging good drive to test exit message failed"
- exit 6
- fi
-
- LOG_VERB=`egrep "dc3dd.+?at" "$TEST_LOG" | tail -1 | awk '{print $2}'`
-
- if [ "$LOG_VERB" != "completed" ]
- then
- echo "Exit message verb on imaging good drive success should be 'completed'"
- exit 6
- fi
-
- cleanup
-
- "$DC3DD" if="$BAD" of="$TEST_IMG" log="$TEST_LOG" progress=on
- if [ $? -ne 1 ]
- then
- echo "Imaging bad drive to test exit message did not terminate with error condition"
- exit 6
- fi
-
- LOG_VERB=`egrep "dc3dd.+?at" "$TEST_LOG" | tail -1 | awk '{print $2}'`
-
- if [ "$LOG_VERB" != "failed" ]
- then
- echo "Exit message verb on imaging bad drive failure should be 'failed'"
- exit 6
- fi
-
- cleanup
-
- "$DC3DD" if="$BAD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" progress=on
- if [ $? -ne 0 ]
- then
- echo "Imaging bad drive to test exit message failed"
- exit 6
- fi
-
- LOG_VERB=`egrep "dc3dd.+?at" "$TEST_LOG" | tail -1 | awk '{print $2}'`
-
- if [ "$LOG_VERB" != "completed" ]
- then
- echo "Exit message verb on imaging bad drive success should be 'completed'"
- exit 6
- fi
-
- cleanup
-
- set -m
- "$DC3DD" if="$GOOD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" progress=on& pid=$!;
- sleep 5; kill -s 2 %1
- wait %1
- set +m
-
- LOG_VERB=`egrep "dc3dd.+?at" "$TEST_LOG" | tail -1 | awk '{print $2}'`
-
- if [ "$LOG_VERB" != "aborted" ]
- then
- echo "Exit message verb on imaging good drive interrupt should be 'aborted'"
- exit 6
- fi
-}
-
-function rj_cat
-{
- HASHCONV="$1"
- BS="$2"
-
- rm "$TEST_LOG"
- cat "$TEST_IMG".* | "$DC3DD" of="$TEST_IMG" log="$TEST_LOG" progress=on progresscount=1000 hash=md5 "$HASHCONV" hashwindow=700M $BS
- JOIN_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
- if [ "$ORIG_SUM" != "$JOIN_SUM" ]
- then
- echo "join regression: joining with cat & $HASHCONV $BS, final hash mismatch"
- exit 9
- fi
-
- egrep "(^md5|TOTAL)" "$TEST_LOG" > "${TEST_LOG}.join_hashes"
- diff -q "${TEST_LOG}.acquire_hashes" "${TEST_LOG}.join_hashes"
- if [ $? -ne 0 ]
- then
- echo "join regression: joining with cat & $HASHCONV $BS, piecewise hash mismatch"
- exit 9
- fi
-
- IMG_SUM=`md5sum "$TEST_IMG" | cut -f 1 -d \ `
- if [ "$JOIN_SUM" != "$IMG_SUM" ]
- then
- echo "join regression: joining with cat & $HASHCONV $BS, log total hash != output file hash"
- exit 9
- fi
-}
-
-function rj_ifjoin
-{
- HASHCONV="$1"
- BS="$2"
-
- rm "$TEST_LOG"
- "$DC3DD" ifjoin="${TEST_IMG}.000" of="$TEST_IMG" log="$TEST_LOG" sizeprobe=on progress=on progresscount=1000 hash=md5 "$HASHCONV" hashwindow=700M $BS
- JOIN_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
- if [ "$ORIG_SUM" != "$JOIN_SUM" ]
- then
- echo "join regression: joining with ifjoin & $HASHCONV $BS, final hash mismatch"
- exit 9
- fi
-
- egrep "(^md5|TOTAL)" "$TEST_LOG" > "${TEST_LOG}.join_hashes"
- diff -q "${TEST_LOG}.acquire_hashes" "${TEST_LOG}.join_hashes"
- if [ $? -ne 0 ]
- then
- echo "join regression: joining with ifjoin & $HASHCONV $BS, piecewise hash mismatch"
- exit 9
- fi
-
- IMG_SUM=`md5sum "$TEST_IMG" | cut -f 1 -d \ `
- if [ "$JOIN_SUM" != "$IMG_SUM" ]
- then
- echo "join regression: joining with ifjoin & $HASHCONV $BS, log total hash != output file hash"
- exit 9
- fi
-}
-
-function regressions_join
-{
- cleanup
-
- # get reference image
- "$DC3DD" if="$BAD" of="$TEST_IMG" conv=noerror,sync iflag=direct log="$TEST_LOG" splitformat=000 split=700M hash=md5 hashconv=after hashwindow=700M sizeprobe=on progress=on progresscount=1000
- if [ $? -ne 0 ]
- then
- echo "join regression: split run failed"
- exit 9
- fi
-
- egrep "(^md5|TOTAL)" "$TEST_LOG" > "${TEST_LOG}.acquire_hashes"
-
- ORIG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
- rj_cat "hashconv=before" ""
- rj_cat "hashconv=before" "bs=512"
- rj_cat "hashconv=after" ""
- rj_cat "hashconv=after" "bs=512"
-
- rj_ifjoin "hashconv=before" ""
- rj_ifjoin "hashconv=before" "bs=512"
- rj_ifjoin "hashconv=after" ""
- rj_ifjoin "hashconv=after" "bs=512"
-}
-
-function regressions
-{
- cleanup
-
- # seek crash
- "$DC3DD" if=/dev/zero of=/dev/null seek=10 count=10
- if [ $? -ne 0 ]
- then
- echo "seek operator causes failure"
- exit 7
- fi
-
- # ifjoin/vfjoin crash
- "$DC3DD" ifjoin=bar
- if [ $? -ne 1 ]
- then
- echo "Invalid ifjoin format not detected properly"
- exit 7
- fi
-
- "$DC3DD" vfjoin=bar
- if [ $? -ne 1 ]
- then
- echo "Invalid vfjoin format not detected properly"
- exit 7
- fi
-
- "$DC3DD" if=foo ifjoin=bar.000
- if [ $? -ne 1 ]
- then
- echo "Invalid combination of if/ifjoin not detected properly"
- exit 7
- fi
-
- "$DC3DD" vf=foo vfjoin=bar.000
- if [ $? -ne 1 ]
- then
- echo "Invalid combination of vf/vfjoin not detected properly"
- exit 7
- fi
-
- # ensure proper skip= offset is accounted for in error messages
- # when conv=sync,noerror not used
-
- rem=`expr $BAD_ERROR_SECTOR % 10000`
- skip=`expr $BAD_ERROR_SECTOR - $rem`
-
- "$DC3DD" if="$BAD" of=/dev/null skip=$skip count=5000 iflag=direct bs=512 log="$TEST_LOG.good" conv=sync,noerror
- if [ $? -ne 0 ]
- then
- echo "checking skip: reference run failed"
- exit 7
- fi
-
- "$DC3DD" if="$BAD" of=/dev/null skip=$skip count=5000 iflag=direct bs=512 log="$TEST_LOG.test"
- if [ $? -ne 1 ]
- then
- echo "checking skip: test run failed"
- exit 7
- fi
-
- RIGHT_SECTOR=`grep reading "$TEST_LOG.good" | head -1 | perl -ne '/sectors?\s+(\d+)/; print $1 . "\n"'`
- CHECK_SECTOR=`grep reading "$TEST_LOG.test" | head -1 | perl -ne '/sectors?\s+(\d+)/; print $1 . "\n"'`
-
- if [ "$RIGHT_SECTOR" != "$CHECK_SECTOR" ]
- then
- echo "When conv=sync,noerror not used, error message fails to account for skip= offset"
- exit 7
- fi
-}
-
-function driveend
-{
- NUM=500
- skip=`expr $BAD_SECTORS - $NUM`
-
- for b in "bs=512" "bs=32768" ""
- do
- for c in "conv=sync,noerror" ""
- do
- for i in "iflag=direct" ""
- do
- rm -f "$TEST_LOG"
-
- "$DC3DD" if="$BAD" of=/dev/null hash=md5 hashconv=after skip=$skip $c $i $b log="$TEST_LOG"
- if [ $? -ne 0 ]
- then
- echo "acquiring end of drive failed, options used: $c $i $b"
- exit 8
- fi
-
- LOG_SECTORS_IN=`grep sectors\ in "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
- LOG_SECTORS_OUT=`grep sectors\ out "$TEST_LOG" | awk '{print $1}' | cut -f1 -d+`
- LOG_SUM=`grep "md5 TOTAL" "$TEST_LOG" | cut -f 3 -d \ `
-
- if [ "$b" == "" -a "$c" == "" -a "$i" == "iflag=direct" ]
- then
- # don't care what happens
- echo -n '' # TODO: better no-op
- elif [ "$b" == "bs=32768" -a "$c" == "" -a "$i" == "iflag=direct" ]
- then
- # don't care what happens
- echo -n '' # TODO: better no-op
- else
- # better get $NUM sectors!
- if [ "$LOG_SECTORS_IN" != "$NUM" ]
- then
- echo "acquiring end of drive, got wrong number of sectors in"
- exit 8
- fi
-
- if [ "$LOG_SECTORS_OUT" != "$NUM" ]
- then
- echo "acquiring end of drive, got wrong number of sectors out"
- exit 8
- fi
-
- if [ "$LOG_SUM" != "93a6f3f06d6c7f2f5de363e9136140cd" ]
- then
- echo "acquiring end of drive, got wrong hash"
- exit 8
- fi
- fi
-
- done
- done
- done
-}
-
-good
-bad
-bad2
-zeros
-pattern
-messages
-regressions
-regressions_join
-driveend
-cleanup
-
--
debian-forensics/dc3dd
More information about the forensics-changes
mailing list