mirror of
git://git.gnupg.org/gnupg.git
synced 2025-02-02 16:43:03 +01:00
* 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.
This commit is contained in:
parent
1aec20776c
commit
036fbb22a7
@ -1,3 +1,10 @@
|
||||
2002-12-05 Werner Koch <wk@gnupg.org>
|
||||
|
||||
* 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 <dshaw@jabberwocky.com>
|
||||
|
||||
* main.h, keyedit.c, keygen.c: Back out previous (2002-12-01)
|
||||
|
10
g10/g10.c
10
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;
|
||||
}
|
||||
}
|
||||
|
149
g10/openfile.c
149
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;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
|
@ -179,6 +179,7 @@ struct {
|
||||
int show_keyring;
|
||||
struct groupitem *grouplist;
|
||||
int strict;
|
||||
int mangle_dos_names;
|
||||
} opt;
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user