diff options
author | Werner Koch <[email protected]> | 2000-07-14 17:34:53 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2000-07-14 17:34:53 +0000 |
commit | 92cd25550836198cf1e3a6aac239eef98364359d (patch) | |
tree | 4fad355126fae79c93535e0e7c6afd91e384552a /g10/openfile.c | |
parent | See ChangeLog: Thu May 25 18:39:11 CEST 2000 Werner Koch (diff) | |
download | gnupg-92cd25550836198cf1e3a6aac239eef98364359d.tar.gz gnupg-92cd25550836198cf1e3a6aac239eef98364359d.zip |
See ChangeLog: Fri Jul 14 19:38:23 CEST 2000 Werner Koch
Diffstat (limited to 'g10/openfile.c')
-rw-r--r-- | g10/openfile.c | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/g10/openfile.c b/g10/openfile.c index 0b768fe5e..47dca0e76 100644 --- a/g10/openfile.c +++ b/g10/openfile.c @@ -1,5 +1,5 @@ /* openfile.c - * Copyright (C) 1998 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,6 +24,9 @@ #include <string.h> #include <assert.h> #include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> #include <unistd.h> #include "util.h" #include <gcrypt.h> @@ -39,13 +42,16 @@ #define SKELEXT ".skel" #endif - #ifdef HAVE_DRIVE_LETTERS #define CMP_FILENAME(a,b) stricmp( (a), (b) ) #else #define CMP_FILENAME(a,b) strcmp( (a), (b) ) #endif +#ifdef MKDIR_TAKES_ONE_ARG +# undef mkdir +# define mkdir(a,b) mkdir(a) +#endif /* FIXME: Implement opt.interactive. */ @@ -78,7 +84,6 @@ overwrite_filep( const char *fname ) } - /**************** * Strip know extensions from iname and return a newly allocated * filename. Return NULL if we can't do that. @@ -176,7 +181,7 @@ open_outfile( const char *iname, int mode, IOBUF *a ) name = opt.outfile; else { #ifdef USE_ONLY_8DOT3 - /* It is quite common for DOS system to have only one dot in a + /* 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. @@ -195,7 +200,7 @@ open_outfile( const char *iname, int mode, IOBUF *a ) strcpy(dot, newsfx ); } else if( dot && !dot[1] ) /* don't duplicate a dot */ - strcat( dot, newsfx+1 ); + strcpy( dot, newsfx+1 ); else strcat( buf, newsfx ); #else @@ -253,7 +258,7 @@ open_sigfile( const char *iname ) /**************** * Copy the option file skeleton to the given directory. */ -void +static void copy_options_file( const char *destdir ) { const char *datadir = GNUPG_DATADIR; @@ -296,3 +301,23 @@ copy_options_file( const char *destdir ) gcry_free(fname); } + +void +try_make_homedir( const char *fname ) +{ + if( opt.dry_run ) + return; + if( strlen(fname) >= 7 + && !strcmp(fname+strlen(fname)-7, "/.gnupg" ) ) { + if( mkdir( fname, S_IRUSR|S_IWUSR|S_IXUSR ) ) + log_fatal( _("%s: can't create directory: %s\n"), + fname, strerror(errno) ); + else if( !opt.quiet ) + log_info( _("%s: directory created\n"), fname ); + copy_options_file( fname ); + log_info(_("you have to start GnuPG again, " + "so it can read the new options file\n") ); + gpg_exit(1); + } +} + |