X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=2cc37b4f34e7fe39f752d40e9a9f7d2a70504f24;hb=be2c991f7ba04ec7b5306b7fa8ee5bfe6c6ee4ea;hp=7f0c5743f70621a9c9a254780e01681b4b66c630;hpb=09f55426640cfbfff46d41aa9530d132fc15e4c9;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index 7f0c574..2cc37b4 100644 --- a/src/tar.c +++ b/src/tar.c @@ -137,7 +137,6 @@ struct option long_options[] = {"to-stdout", 0, &f_exstdout, 1}, {"ignore-zeros", 0, &f_ignorez, 1}, {"keep-old-files", 0, 0, 'k'}, - {"uncompress", 0, &f_compress, 1}, {"same-permissions", 0, &f_use_protection, 1}, {"preserve-permissions", 0, &f_use_protection, 1}, {"modification-time", 0, &f_modified, 1}, @@ -163,8 +162,15 @@ struct option long_options[] = {"one-file-system", 0, &f_local_filesys, 1}, {"old-archive", 0, 0, 'o'}, {"portability", 0, 0, 'o'}, - {"compress", 0, &f_compress, 1}, - {"compress-block", 0, &f_compress, 2}, + {"compress", 0, 0, 'Z'}, + {"uncompress", 0, 0, 'Z'}, + {"block-compress", 0, &f_compress_block, 1}, + {"gzip", 0, 0, 'z'}, + {"ungzip", 0, 0, 'z'}, + {"use-compress-program", 1, 0, 18}, + + + {"same-permissions", 0, &f_use_protection, 1}, {"sparse", 0, &f_sparse_files, 1}, {"tape-length", 1, 0, 'L'}, {"remove-files", 0, &f_remove_files, 1}, @@ -289,7 +295,7 @@ options (argc, argv) /* Set default option values */ blocking = DEFBLOCKING; /* From Makefile */ - ar_files = (char **) malloc (sizeof (char *) * 10); + ar_files = (char **) ck_malloc (sizeof (char *) * 10); ar_files_len = 10; n_ar_files = 0; cur_ar_file = 0; @@ -346,6 +352,15 @@ options (argc, argv) f_volno_file = optarg; break; + case 18: + if (f_compressprog) + { + msg ("Only one compression option permitted\n"); + exit (EX_ARGSBAD); + } + f_compressprog = optarg; + break; + case 'g': /* We are making a GNU dump; save directories at the beginning of the archive, and include in each @@ -602,9 +617,22 @@ options (argc, argv) add_exclude_file (optarg); break; - case 'z': /* Easy to type */ - case 'Z': /* Like the filename extension .Z */ - f_compress++; + case 'z': + if (f_compressprog) + { + msg ("Only one compression option permitted\n"); + exit (EX_ARGSBAD); + } + f_compressprog = "gzip"; + break; + + case 'Z': + if (f_compressprog) + { + msg ("Only one compression option permitted\n"); + exit (EX_ARGSBAD); + } + f_compressprog = "compress"; break; case '?': @@ -628,6 +656,12 @@ options (argc, argv) msg ("Multiple archive files requires --multi-volume\n"); exit (EX_ARGSBAD); } + if (f_compress_block && !f_compressprog) + { + msg ("You must use a compression option (--gzip, --compress\n\ +or --use-compress-program) with --block-compress.\n"); + exit (EX_ARGSBAD); + } } @@ -715,8 +749,13 @@ Other options:\n\ -W, --verify attempt to verify the archive after writing it\n\ --exclude FILE exclude file FILE\n\ -X, --exclude-from FILE exclude files listed in FILE\n\ --z, -Z, --compress,\n\ +-Z, --compress,\n\ --uncompress filter the archive through compress\n\ +-z, --gzip,\n\ + --ungzip filter the archive through gzip\n\ +--use-compress-program PROG\n\ + filter the archive through PROG (which must accept -d)\n\ +--block-compress block the output of compression program for tapes\n\ -[0-7][lmh] specify drive and density\n\ ", stdout); }