diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c index 3b73c8506..728737d78 100644 --- a/tools/gpgtar-extract.c +++ b/tools/gpgtar-extract.c @@ -53,7 +53,10 @@ extract_regular (estream_t stream, const char *dirname, else err = 0; - outfp = es_fopen (fname, "wb"); + if (opt.dry_run) + outfp = es_fopenmem (0, "wb"); + else + outfp = es_fopen (fname, "wb"); if (!outfp) { err = gpg_error_from_syserror (); @@ -120,7 +123,7 @@ extract_directory (const char *dirname, tar_header_t hdr) /* Note that we don't need to care about EEXIST because we always extract into a new hierarchy. */ - if (gnupg_mkdir (fname, "-rwx------")) + if (! opt.dry_run && gnupg_mkdir (fname, "-rwx------")) { err = gpg_error_from_syserror (); if (gpg_err_code (err) == GPG_ERR_ENOENT) diff --git a/tools/gpgtar.c b/tools/gpgtar.c index 90fee054e..a46a3398c 100644 --- a/tools/gpgtar.c +++ b/tools/gpgtar.c @@ -77,6 +77,9 @@ enum cmd_and_opt_values /* Compatibility with gpg-zip. */ oGpgArgs, oTarArgs, + + /* Debugging. */ + oDryRun, }; @@ -100,6 +103,7 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_s_n (oQuiet, "quiet", N_("be somewhat more quiet")), ARGPARSE_s_s (oGpgProgram, "gpg", "@"), ARGPARSE_s_n (oSkipCrypto, "skip-crypto", N_("skip the crypto processing")), + ARGPARSE_s_n (oDryRun, "dry-run", N_("do not make any changes")), ARGPARSE_s_s (oSetFilename, "set-filename", "@"), ARGPARSE_s_n (oOpenPGP, "openpgp", "@"), ARGPARSE_s_n (oCMS, "cms", "@"), @@ -377,6 +381,10 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts) } break; + case oDryRun: + opt.dry_run = 1; + break; + default: pargs->err = 2; break; } } diff --git a/tools/gpgtar.h b/tools/gpgtar.h index f130c94ee..eadbcac2a 100644 --- a/tools/gpgtar.h +++ b/tools/gpgtar.h @@ -29,6 +29,7 @@ struct int verbose; unsigned int debug_level; int quiet; + int dry_run; const char *gpg_program; strlist_t gpg_arguments; const char *outfile;