diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2004-09-03 08:11:34 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2004-09-03 08:11:34 +0000 |
commit | 54f4b3ce740928e08beb86e8f578600292dc765d (patch) | |
tree | 16f90916c444a343b98c26e532574b2bd233a179 | |
parent | 0501474249e2d1f1986019570ef58bc1c98d9a89 (diff) | |
download | coreutils-54f4b3ce740928e08beb86e8f578600292dc765d.tar.xz |
(usage): "alternated EBCDIC" -> "alternate EBCDIC".
(bit_count): Remove. All uses changed to....
(multiple_bits_set): New function.
(scanargs): Use it, and check separately for each set of
incompatible options, to improve diagnostics.
(MX): Remove.
(apply_translations): Move checks for incompatible options
to scanargs, so that they're done consistently.
-rw-r--r-- | src/dd.c | 32 |
1 files changed, 12 insertions, 20 deletions
@@ -365,7 +365,7 @@ Each CONV symbol may be:\n\ fputs (_("\ ascii from EBCDIC to ASCII\n\ ebcdic from ASCII to EBCDIC\n\ - ibm from ASCII to alternated 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\ @@ -424,16 +424,12 @@ translate_charset (char const *new_trans) translation_needed = true; } -/* Return the number of 1 bits in `i'. */ +/* Return true if I has more than one bit set. I must be nonnegative. */ -static int -bit_count (register int i) +static inline bool +multiple_bits_set (int i) { - register int set_bits; - - for (set_bits = 0; i != 0; set_bits++) - i &= i - 1; - return set_bits; + return (i & (i - 1)) != 0; } static void @@ -725,7 +721,13 @@ scanargs (int argc, char **argv) if (input_flags & (O_DSYNC | O_SYNC)) input_flags |= O_RSYNC; - if ((conversions_mask & (C_EXCL | C_NOCREAT)) == (C_EXCL | C_NOCREAT)) + if (multiple_bits_set (conversions_mask & (C_ASCII | C_EBCDIC | C_IBM))) + error (EXIT_FAILURE, 0, _("cannot combine any two of {ascii,ebcdic,ibm}")); + if (multiple_bits_set (conversions_mask & (C_BLOCK | C_UNBLOCK))) + error (EXIT_FAILURE, 0, _("cannot combine block and unblock")); + if (multiple_bits_set (conversions_mask & (C_LCASE | C_UCASE))) + error (EXIT_FAILURE, 0, _("cannot combine lcase and ucase")); + if (multiple_bits_set (conversions_mask & (C_EXCL | C_NOCREAT))) error (EXIT_FAILURE, 0, _("cannot combine excl and nocreat")); } @@ -736,16 +738,6 @@ apply_translations (void) { int i; -#define MX(a) (bit_count (conversions_mask & (a))) - if ((MX (C_ASCII | C_EBCDIC | C_IBM) > 1) - || (MX (C_BLOCK | C_UNBLOCK) > 1) - || (MX (C_LCASE | C_UCASE) > 1)) - { - error (EXIT_FAILURE, 0, _("\ - only one conv in {ascii,ebcdic,ibm}, {lcase,ucase}, {block,unblock}")); - } -#undef MX - if (conversions_mask & C_ASCII) translate_charset (ebcdic_to_ascii); |