diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c index 92346b0e0..fa2f3626a 100644 --- a/tools/gpgtar-extract.c +++ b/tools/gpgtar-extract.c @@ -312,31 +312,36 @@ gpgtar_extract (const char *filename, int decrypt) goto leave; } - if (filename) + if (opt.directory) + dirname = xtrystrdup (opt.directory); + else { - dirprefix = strrchr (filename, '/'); - if (dirprefix) - dirprefix++; - else - dirprefix = filename; - } - else if (opt.filename) - { - dirprefix = strrchr (opt.filename, '/'); - if (dirprefix) - dirprefix++; - else - dirprefix = opt.filename; - } + if (filename) + { + dirprefix = strrchr (filename, '/'); + if (dirprefix) + dirprefix++; + else + dirprefix = filename; + } + else if (opt.filename) + { + dirprefix = strrchr (opt.filename, '/'); + if (dirprefix) + dirprefix++; + else + dirprefix = opt.filename; + } - if (!dirprefix || !*dirprefix) - dirprefix = "GPGARCH"; + if (!dirprefix || !*dirprefix) + dirprefix = "GPGARCH"; - dirname = create_directory (dirprefix); - if (!dirname) - { - err = gpg_error (GPG_ERR_GENERAL); - goto leave; + dirname = create_directory (dirprefix); + if (!dirname) + { + err = gpg_error (GPG_ERR_GENERAL); + goto leave; + } } if (opt.verbose) diff --git a/tools/gpgtar.c b/tools/gpgtar.c index c4bf855cd..991fbedf6 100644 --- a/tools/gpgtar.c +++ b/tools/gpgtar.c @@ -58,6 +58,7 @@ enum cmd_and_opt_values oRecipient = 'r', oUser = 'u', oOutput = 'o', + oDirectory = 'C', oQuiet = 'q', oVerbose = 'v', oFilesFrom = 'T', @@ -89,6 +90,8 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_s_s (oUser, "local-user", N_("|USER-ID|use USER-ID to sign or decrypt")), ARGPARSE_s_s (oOutput, "output", N_("|FILE|write output to FILE")), + ARGPARSE_s_s (oDirectory, "directory", + N_("|DIRECTORY|extract files into DIRECTORY")), ARGPARSE_s_n (oVerbose, "verbose", N_("verbose")), ARGPARSE_s_n (oQuiet, "quiet", N_("be somewhat more quiet")), ARGPARSE_s_s (oGpgProgram, "gpg", "@"), @@ -194,6 +197,7 @@ main (int argc, char **argv) switch (pargs.r_opt) { case oOutput: opt.outfile = pargs.r.ret_str; break; + case oDirectory: opt.directory = pargs.r.ret_str; break; case oSetFilename: opt.filename = pargs.r.ret_str; break; case oQuiet: opt.quiet = 1; break; case oVerbose: opt.verbose++; break; diff --git a/tools/gpgtar.h b/tools/gpgtar.h index 98fd51c01..66a8ae17a 100644 --- a/tools/gpgtar.h +++ b/tools/gpgtar.h @@ -35,6 +35,7 @@ struct const char *user; int symmetric; const char *filename; + const char *directory; } opt;