X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=04ad22a2cb0a22260d5f388bf876c82c25cfb3ab;hb=be4c265a8d26361c843c46ace0e88c14062a4213;hp=4d3ec0e26f937d23084dc2ae0957a2901a628f70;hpb=a8c32ecff2f8f8adb2186852e02e29f74f7850f7;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index 4d3ec0e..04ad22a 100644 --- a/src/tar.c +++ b/src/tar.c @@ -400,7 +400,7 @@ or a device. *This* `tar' defaults to `-f%s -b%d'.\n"), DEFAULT_ARCHIVE, DEFAULT_BLOCKING); fputs (_("\ \n\ -Report bugs to .\n"), +Report bugs to .\n"), stdout); } exit (status); @@ -452,6 +452,8 @@ decode_options (int argc, char *const *argv) archive_format = DEFAULT_FORMAT; blocking_factor = DEFAULT_BLOCKING; record_size = DEFAULT_BLOCKING * BLOCKSIZE; + excluded = new_exclude (); + newer_mtime_option = TYPE_MINIMUM (time_t); owner_option = -1; group_option = -1; @@ -549,11 +551,11 @@ decode_options (int argc, char *const *argv) case 'b': { - long l; - if (! (xstrtol (optarg, (char **) 0, 10, &l, "") == LONGINT_OK - && l == (blocking_factor = l) + uintmax_t u; + if (! (xstrtoumax (optarg, (char **) 0, 10, &u, "") == LONGINT_OK + && u == (blocking_factor = u) && 0 < blocking_factor - && l == (record_size = l * (size_t) BLOCKSIZE) / BLOCKSIZE)) + && u == (record_size = u * (size_t) BLOCKSIZE) / BLOCKSIZE)) USAGE_ERROR ((0, 0, _("Invalid blocking factor"))); } break; @@ -652,12 +654,10 @@ decode_options (int argc, char *const *argv) case 'L': { - unsigned long u; - if (xstrtoul (optarg, (char **) 0, 10, &u, "") != LONG_MAX) + uintmax_t u; + if (xstrtoumax (optarg, (char **) 0, 10, &u, "") != LONG_MAX) USAGE_ERROR ((0, 0, _("Invalid tape length"))); - clear_tarlong (tape_length_option); - add_to_tarlong (tape_length_option, u); - mult_tarlong (tape_length_option, 1024); + tape_length_option = 1024 * (tarlong) u; multi_volume_option = 1; } break; @@ -783,8 +783,8 @@ decode_options (int argc, char *const *argv) break; case 'X': - exclude_option = 1; - add_exclude_file (optarg); + if (add_exclude_file (excluded, optarg, '\n') != 0) + FATAL_ERROR ((0, errno, "%s", optarg)); break; case 'z': @@ -810,8 +810,7 @@ decode_options (int argc, char *const *argv) break; case EXCLUDE_OPTION: - exclude_option = 1; - add_exclude (optarg); + add_exclude (excluded, optarg); break; case GROUP_OPTION: @@ -1155,9 +1154,6 @@ main (int argc, char *const *argv) break; case CREATE_SUBCOMMAND: - if (totals_option) - init_total_written (); - create_archive (); name_close ();