aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-12-05 15:25:16 +0000
committerWerner Koch <[email protected]>2002-12-05 15:25:16 +0000
commit036fbb22a768b55195ba4ebfe8b0fb503e816fa8 (patch)
tree64f86b3323b18488b1c759757ea2e70b637b994f
parent* main.h, keyedit.c, keygen.c: Back out previous (2002-12-01) change. (diff)
downloadgnupg-036fbb22a768b55195ba4ebfe8b0fb503e816fa8.tar.gz
gnupg-036fbb22a768b55195ba4ebfe8b0fb503e816fa8.zip
* g10.c: New options --[no-]mangle-dos-filenames.
* options.h (opt): Added mangle-dos-filenames. * openfile.c (open_outfile) [USE_ONLY_8DOT3]: Truncate the filename only when this option is set; this is the default.
-rw-r--r--g10/ChangeLog7
-rw-r--r--g10/g10.c10
-rw-r--r--g10/openfile.c149
-rw-r--r--g10/options.h1
4 files changed, 97 insertions, 70 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index f80dc6b7e..07b2b3b63 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,10 @@
+2002-12-05 Werner Koch <[email protected]>
+
+ * g10.c: New options --[no-]mangle-dos-filenames.
+ * options.h (opt): Added mangle-dos-filenames.
+ * openfile.c (open_outfile) [USE_ONLY_8DOT3]: Truncate the
+ filename only when this option is set; this is the default.
+
2002-12-04 David Shaw <[email protected]>
* main.h, keyedit.c, keygen.c: Back out previous (2002-12-01)
diff --git a/g10/g10.c b/g10/g10.c
index 0b699c5a1..fb4b81018 100644
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -310,6 +310,8 @@ enum cmd_and_opt_values { aNull = 0,
oGroup,
oStrict,
oNoStrict,
+ oMangleDosFilenames,
+ oNoMangleDosFilenames,
aTest };
@@ -608,6 +610,8 @@ static ARGPARSE_OPTS opts[] = {
{ oGroup, "group", 2, "@" },
{ oStrict, "strict", 0, "@" },
{ oNoStrict, "no-strict", 0, "@" },
+ { oMangleDosFilenames, "mangle-dos-filenames", 0, "@" },
+ { oNoMangleDosFilenames, "no-mangle-dos-filenames", 0, "@" },
{0} };
@@ -1154,6 +1158,8 @@ main( int argc, char **argv )
opt.keyserver_options.include_subkeys=1;
opt.keyserver_options.include_revoked=1;
opt.trust_model=TM_OPENPGP;
+ opt.mangle_dos_filenames = 1;
+
#if defined (__MINGW32__)
set_homedir ( read_w32_registry_string( NULL,
"Software\\GNU\\GnuPG", "HomeDir" ));
@@ -1788,6 +1794,10 @@ main( int argc, char **argv )
case oGroup: add_group(pargs.r.ret_str); break;
case oStrict: opt.strict=1; log_set_strict(1); break;
case oNoStrict: opt.strict=0; log_set_strict(0); break;
+
+ case oMangleDosFilenames: opt.mangle_dos_filenames = 1; break;
+ case oNoMangleDosFilenames: opt.mangle_dos_filenames = 0; break;
+
default : pargs.err = configfp? 1:2; break;
}
}
diff --git a/g10/openfile.c b/g10/openfile.c
index 83c734dfd..7ccd43a45 100644
--- a/g10/openfile.c
+++ b/g10/openfile.c
@@ -161,7 +161,6 @@ ask_outfile_name( const char *name, size_t namelen )
}
-
/****************
* Make an output filename for the inputfile INAME.
* Returns an IOBUF and an errorcode
@@ -172,82 +171,92 @@ ask_outfile_name( const char *name, size_t namelen )
int
open_outfile( const char *iname, int mode, IOBUF *a )
{
- int rc = 0;
+ int rc = 0;
- *a = NULL;
- if( (!iname || (*iname=='-' && !iname[1])) && !opt.outfile ) {
- if( !(*a = iobuf_create(NULL)) ) {
- log_error(_("%s: can't open: %s\n"), "[stdout]", strerror(errno) );
- rc = G10ERR_CREATE_FILE;
- }
- else if( opt.verbose )
- log_info(_("writing to stdout\n"));
+ *a = NULL;
+ if( (!iname || (*iname=='-' && !iname[1])) && !opt.outfile ) {
+ if( !(*a = iobuf_create(NULL)) ) {
+ log_error(_("%s: can't open: %s\n"), "[stdout]", strerror(errno) );
+ rc = G10ERR_CREATE_FILE;
}
+ else if( opt.verbose )
+ log_info(_("writing to stdout\n"));
+ }
+ else {
+ char *buf = NULL;
+ const char *name;
+
+ if( opt.dry_run )
+ name = "/dev/null";
+ else if( opt.outfile )
+ name = opt.outfile;
else {
- char *buf=NULL;
- const char *name;
-
- if( opt.dry_run )
- name = "/dev/null";
- else if( opt.outfile )
- name = opt.outfile;
- else {
- #ifdef USE_ONLY_8DOT3
- /* It is quite common DOS system to have only one dot in a
- * a filename So if we have something like this, we simple
- * replace the suffix execpt in cases where the suffix is
- * larger than 3 characters and not the same as.
- * We should really map the filenames to 8.3 but this tends to
- * be more complicated and is probaly a duty of the filesystem
- */
- char *dot;
- const char *newsfx = mode==1 ? ".asc" :
- mode==2 ? ".sig" : ".gpg";
-
- buf = m_alloc(strlen(iname)+4+1);
- strcpy(buf,iname);
- dot = strchr(buf, '.' );
- if( dot && dot > buf && dot[1] && strlen(dot) <= 4
- && CMP_FILENAME(newsfx, dot) ) {
- strcpy(dot, newsfx );
- }
- else if( dot && !dot[1] ) /* don't duplicate a dot */
- strcpy( dot, newsfx+1 );
- else
- strcat( buf, newsfx );
- #else
- buf = m_alloc(strlen(iname)+4+1);
- strcpy(stpcpy(buf,iname), mode==1 ? EXTSEP_S "asc" :
- mode==2 ? EXTSEP_S "sig" : EXTSEP_S "gpg");
- #endif
- name = buf;
- }
-
- rc = 0;
- while( !overwrite_filep (name) ) {
- char *tmp = ask_outfile_name (NULL, 0);
- if ( !tmp || !*tmp ) {
- m_free (tmp);
- rc = G10ERR_FILE_EXISTS;
- break;
+#ifdef USE_ONLY_8DOT3
+ if (opt.mangle_dos_filenames)
+ {
+ /* It is quite common DOS system to have only one dot in a
+ * a filename So if we have something like this, we simple
+ * replace the suffix execpt in cases where the suffix is
+ * larger than 3 characters and not the same as.
+ * We should really map the filenames to 8.3 but this tends to
+ * be more complicated and is probaly a duty of the filesystem
+ */
+ char *dot;
+ const char *newsfx = mode==1 ? ".asc" :
+ mode==2 ? ".sig" : ".gpg";
+
+ buf = m_alloc(strlen(iname)+4+1);
+ strcpy(buf,iname);
+ dot = strchr(buf, '.' );
+ if ( dot && dot > buf && dot[1] && strlen(dot) <= 4
+ && CMP_FILENAME(newsfx, dot) )
+ {
+ strcpy(dot, newsfx );
}
- m_free (buf);
- name = buf = tmp;
+ else if ( dot && !dot[1] ) /* don't duplicate a dot */
+ strcpy( dot, newsfx+1 );
+ else
+ strcat ( buf, newsfx );
}
-
- if( !rc ) {
- if( !(*a = iobuf_create( name )) ) {
- log_error(_("%s: can't create: %s\n"), name, strerror(errno) );
- rc = G10ERR_CREATE_FILE;
- }
- else if( opt.verbose )
- log_info(_("writing to `%s'\n"), name );
- }
- m_free(buf);
+ if (!buf)
+#endif /* USE_ONLY_8DOT3 */
+ {
+ buf = m_alloc(strlen(iname)+4+1);
+ strcpy(stpcpy(buf,iname), mode==1 ? EXTSEP_S "asc" :
+ mode==2 ? EXTSEP_S "sig" : EXTSEP_S "gpg");
+ }
+ name = buf;
}
- return rc;
-}
+ rc = 0;
+ while( !overwrite_filep (name) )
+ {
+ char *tmp = ask_outfile_name (NULL, 0);
+ if ( !tmp || !*tmp )
+ {
+ m_free (tmp);
+ rc = G10ERR_FILE_EXISTS;
+ break;
+ }
+ m_free (buf);
+ name = buf = tmp;
+ }
+
+ if( !rc )
+ {
+ if( !(*a = iobuf_create( name )) )
+ {
+ log_error(_("%s: can't create: %s\n"), name, strerror(errno) );
+ rc = G10ERR_CREATE_FILE;
+ }
+ else if( opt.verbose )
+ log_info(_("writing to `%s'\n"), name );
+ }
+ m_free(buf);
+ }
+
+ return rc;
+}
/****************
diff --git a/g10/options.h b/g10/options.h
index d8857be2e..d82b30125 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -179,6 +179,7 @@ struct {
int show_keyring;
struct groupitem *grouplist;
int strict;
+ int mangle_dos_names;
} opt;