static const char *stdin_used_by;
/* Doesn't return if stdin already requested. */
-void
+static void
request_stdin (const char *option)
{
if (stdin_used_by)
}
\f
+#define TAR_SIZE_SUFFIXES "bBcGgkKMmPTtw"
+
static error_t
parse_opt (int key, char *arg, struct argp_state *state)
{
case 'L':
{
uintmax_t u;
- if (xstrtoumax (arg, 0, 10, &u, "") != LONGINT_OK)
+ char *p;
+
+ if (xstrtoumax (arg, &p, 10, &u, TAR_SIZE_SUFFIXES) != LONGINT_OK)
USAGE_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
_("Invalid tape length")));
- tape_length_option = 1024 * (tarlong) u;
+ if (p > arg && !strchr (TAR_SIZE_SUFFIXES, p[-1]))
+ tape_length_option = 1024 * (tarlong) u;
+ else
+ tape_length_option = (tarlong) u;
multi_volume_option = true;
}
break;
case RECORD_SIZE_OPTION:
{
uintmax_t u;
- if (! (xstrtoumax (arg, 0, 10, &u, "") == LONGINT_OK
+
+ if (! (xstrtoumax (arg, NULL, 10, &u, TAR_SIZE_SUFFIXES) == LONGINT_OK
&& u == (size_t) u))
USAGE_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
_("Invalid record size")));
_("Cowardly refusing to create an empty archive")));
if (args.compress_autodetect && archive_names
&& strcmp (archive_name_array[0], "-"))
- set_comression_program_by_suffix (archive_name_array[0],
- use_compress_program_option);
+ set_compression_program_by_suffix (archive_name_array[0],
+ use_compress_program_option);
break;
case EXTRACT_SUBCOMMAND: