dd: move suffix struct to xatonum.c

This way it can be used by other applets without duplication.

Signed-off-by: Ari Sundholm <ari@tuxera.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ari Sundholm 2015-03-04 18:46:48 +02:00 committed by Denys Vlasenko
parent 92edab1aa6
commit 8893023ba2
3 changed files with 26 additions and 25 deletions

View File

@ -99,25 +99,6 @@ enum {
ofd = STDOUT_FILENO, ofd = STDOUT_FILENO,
}; };
static const struct suffix_mult dd_suffixes[] = {
{ "c", 1 },
{ "w", 2 },
{ "b", 512 },
{ "kB", 1000 },
{ "kD", 1000 },
{ "k", 1024 },
{ "K", 1024 }, /* compat with coreutils dd (it also accepts KB and KD, TODO?) */
{ "MB", 1000000 },
{ "MD", 1000000 },
{ "M", 1024*1024 },
{ "GB", 1000000000 },
{ "GD", 1000000000 },
{ "G", 1024*1024*1024 },
/* "D" suffix for decimal is not in coreutils manpage, looks like it's deprecated */
/* coreutils also understands TPEZY suffixes for tera- and so on, with B suffix for decimal */
{ "", 0 }
};
struct globals { struct globals {
off_t out_full, out_part, in_full, in_part; off_t out_full, out_part, in_full, in_part;
#if ENABLE_FEATURE_DD_THIRD_STATUS_LINE #if ENABLE_FEATURE_DD_THIRD_STATUS_LINE
@ -326,11 +307,11 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
#if ENABLE_FEATURE_DD_IBS_OBS #if ENABLE_FEATURE_DD_IBS_OBS
if (what == OP_ibs) { if (what == OP_ibs) {
/* Must fit into positive ssize_t */ /* Must fit into positive ssize_t */
ibs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, dd_suffixes); ibs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, cwbkMG_suffixes);
/*continue;*/ /*continue;*/
} }
if (what == OP_obs) { if (what == OP_obs) {
obs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, dd_suffixes); obs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, cwbkMG_suffixes);
/*continue;*/ /*continue;*/
} }
if (what == OP_conv) { if (what == OP_conv) {
@ -356,22 +337,22 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
} }
#endif #endif
if (what == OP_bs) { if (what == OP_bs) {
ibs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, dd_suffixes); ibs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, cwbkMG_suffixes);
obs = ibs; obs = ibs;
/*continue;*/ /*continue;*/
} }
/* These can be large: */ /* These can be large: */
if (what == OP_count) { if (what == OP_count) {
G.flags |= FLAG_COUNT; G.flags |= FLAG_COUNT;
count = XATOU_SFX(val, dd_suffixes); count = XATOU_SFX(val, cwbkMG_suffixes);
/*continue;*/ /*continue;*/
} }
if (what == OP_seek) { if (what == OP_seek) {
seek = XATOU_SFX(val, dd_suffixes); seek = XATOU_SFX(val, cwbkMG_suffixes);
/*continue;*/ /*continue;*/
} }
if (what == OP_skip) { if (what == OP_skip) {
skip = XATOU_SFX(val, dd_suffixes); skip = XATOU_SFX(val, cwbkMG_suffixes);
/*continue;*/ /*continue;*/
} }
if (what == OP_if) { if (what == OP_if) {

View File

@ -862,6 +862,7 @@ struct suffix_mult {
}; };
extern const struct suffix_mult bkm_suffixes[]; extern const struct suffix_mult bkm_suffixes[];
#define km_suffixes (bkm_suffixes + 1) #define km_suffixes (bkm_suffixes + 1)
extern const struct suffix_mult cwbkMG_suffixes[];
#include "xatonum.h" #include "xatonum.h"
/* Specialized: */ /* Specialized: */

View File

@ -75,3 +75,22 @@ const struct suffix_mult bkm_suffixes[] = {
{ "m", 1024*1024 }, { "m", 1024*1024 },
{ "", 0 } { "", 0 }
}; };
const struct suffix_mult cwbkMG_suffixes[] = {
{ "c", 1 },
{ "w", 2 },
{ "b", 512 },
{ "kB", 1000 },
{ "kD", 1000 },
{ "k", 1024 },
{ "K", 1024 }, /* compat with coreutils dd (it also accepts KB and KD, TODO?) */
{ "MB", 1000000 },
{ "MD", 1000000 },
{ "M", 1024*1024 },
{ "GB", 1000000000 },
{ "GD", 1000000000 },
{ "G", 1024*1024*1024 },
/* "D" suffix for decimal is not in coreutils manpage, looks like it's deprecated */
/* coreutils also understands TPEZY suffixes for tera- and so on, with B suffix for decimal */
{ "", 0 }
};