1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-20 02:36:16 +02:00

Don't modify argv in dd.

* src/dd.c (operand_is): New function.
(scanargs): Use it so that we don't need to modify argv, as a nicety.
Problem reported by Adam Goode in
<http://lists.gnu.org/archive/html/bug-coreutils/2008-01/msg00264.html>.
This commit is contained in:
Paul Eggert
2008-01-30 07:33:01 +01:00
committed by Jim Meyering
parent b0d3d97a0f
commit 194ca7b3f9
2 changed files with 34 additions and 16 deletions

View File

@@ -1,3 +1,11 @@
2008-01-29 Paul Eggert <eggert@cs.ucla.edu>
Don't modify argv in dd.
* src/dd.c (operand_is): New function.
(scanargs): Use it so that we don't need to modify argv, as a nicety.
Problem reported by Adam Goode in
<http://lists.gnu.org/archive/html/bug-coreutils/2008-01/msg00264.html>.
2008-01-29 Jim Meyering <meyering@redhat.com>
* Makefile.am (BUILT_SOURCES): Ensure that .version exists.

View File

@@ -867,6 +867,17 @@ parse_integer (const char *str, bool *invalid)
return n;
}
/* Return true if OPERAND is of the form "NAME=...". */
static bool
operand_is (char const *operand, char const *name)
{
while (*name)
if (*name++ != *operand++)
return false;
return *operand == '=';
}
static void
scanargs (int argc, char **argv)
{
@@ -884,22 +895,22 @@ scanargs (int argc, char **argv)
error (0, 0, _("unrecognized operand %s"), quote (name));
usage (EXIT_FAILURE);
}
*val++ = '\0';
val++;
if (STREQ (name, "if"))
if (operand_is (name, "if"))
input_file = val;
else if (STREQ (name, "of"))
else if (operand_is (name, "of"))
output_file = val;
else if (STREQ (name, "conv"))
else if (operand_is (name, "conv"))
conversions_mask |= parse_symbols (val, conversions,
N_("invalid conversion: %s"));
else if (STREQ (name, "iflag"))
else if (operand_is (name, "iflag"))
input_flags |= parse_symbols (val, flags,
N_("invalid input flag: %s"));
else if (STREQ (name, "oflag"))
else if (operand_is (name, "oflag"))
output_flags |= parse_symbols (val, flags,
N_("invalid output flag: %s"));
else if (STREQ (name, "status"))
else if (operand_is (name, "status"))
status_flags |= parse_symbols (val, statuses,
N_("invalid status flag: %s"));
else
@@ -907,38 +918,37 @@ scanargs (int argc, char **argv)
bool invalid = false;
uintmax_t n = parse_integer (val, &invalid);
if (STREQ (name, "ibs"))
if (operand_is (name, "ibs"))
{
invalid |= ! (0 < n && n <= MAX_BLOCKSIZE (INPUT_BLOCK_SLOP));
input_blocksize = n;
conversions_mask |= C_TWOBUFS;
}
else if (STREQ (name, "obs"))
else if (operand_is (name, "obs"))
{
invalid |= ! (0 < n && n <= MAX_BLOCKSIZE (OUTPUT_BLOCK_SLOP));
output_blocksize = n;
conversions_mask |= C_TWOBUFS;
}
else if (STREQ (name, "bs"))
else if (operand_is (name, "bs"))
{
invalid |= ! (0 < n && n <= MAX_BLOCKSIZE (INPUT_BLOCK_SLOP));
blocksize = n;
}
else if (STREQ (name, "cbs"))
else if (operand_is (name, "cbs"))
{
invalid |= ! (0 < n && n <= SIZE_MAX);
conversion_blocksize = n;
}
else if (STREQ (name, "skip"))
else if (operand_is (name, "skip"))
skip_records = n;
else if (STREQ (name, "seek"))
else if (operand_is (name, "seek"))
seek_records = n;
else if (STREQ (name, "count"))
else if (operand_is (name, "count"))
max_records = n;
else
{
error (0, 0, _("unrecognized operand %s=%s"),
quote_n (0, name), quote_n (1, val));
error (0, 0, _("unrecognized operand %s"), quote (name));
usage (EXIT_FAILURE);
}