aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--agent/gpg-agent.c4
-rw-r--r--agent/protect-tool.c2
-rw-r--r--common/sysutils.c49
-rw-r--r--common/util.h4
-rw-r--r--dirmngr/dirmngr-client.c4
-rw-r--r--dirmngr/dirmngr.c4
-rw-r--r--g10/exec.c2
-rw-r--r--g10/gpg.c2
-rw-r--r--g10/keydb.c2
-rw-r--r--g10/plaintext.c2
-rw-r--r--g13/g13-syshelp.c2
-rw-r--r--g13/g13.c2
-rw-r--r--kbx/kbxutil.c2
-rw-r--r--scd/scdaemon.c2
-rw-r--r--sm/gpgsm.c2
-rw-r--r--sm/minip12.c2
-rw-r--r--tools/gpg-connect-agent.c2
-rw-r--r--tools/gpgparsemail.c2
-rw-r--r--tools/gpgsplit.c4
-rw-r--r--tools/symcryptrun.c6
20 files changed, 76 insertions, 25 deletions
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index 22f8b9439..795f28206 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -1154,7 +1154,7 @@ main (int argc, char **argv )
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
@@ -2026,7 +2026,7 @@ reread_configuration (void)
if (!config_filename)
return; /* No config file. */
- fp = fopen (config_filename, "r");
+ fp = gnupg_fopen (config_filename, "r");
if (!fp)
{
log_info (_("option file '%s': %s\n"),
diff --git a/agent/protect-tool.c b/agent/protect-tool.c
index 0ba31c1a0..f55a7354d 100644
--- a/agent/protect-tool.c
+++ b/agent/protect-tool.c
@@ -275,7 +275,7 @@ read_file (const char *fname, size_t *r_length)
{
struct stat st;
- fp = fopen (fname, "rb");
+ fp = gnupg_fopen (fname, "rb");
if (!fp)
{
log_error ("can't open '%s': %s\n", fname, strerror (errno));
diff --git a/common/sysutils.c b/common/sysutils.c
index df62aa254..520aa56e4 100644
--- a/common/sysutils.c
+++ b/common/sysutils.c
@@ -1219,6 +1219,55 @@ gnupg_stat (const char *name, struct stat *statbuf)
#endif /*HAVE_STAT*/
+/* Wrapper around fopen for the cases where we have not yet switched
+ * to es_fopen. Note that for convenience the prototype is in util.h */
+FILE *
+gnupg_fopen (const char *fname, const char *mode)
+{
+#ifdef HAVE_W32_SYSTEM
+ if (any8bitchar (fname))
+ {
+ wchar_t *wfname;
+ const wchar_t *wmode;
+ wchar_t *wmodebuf = NULL;
+ FILE *ret;
+
+ wfname = utf8_to_wchar (fname);
+ if (!wfname)
+ return NULL;
+ if (!strcmp (mode, "r"))
+ wmode = L"r";
+ else if (!strcmp (mode, "rb"))
+ wmode = L"rb";
+ else if (!strcmp (mode, "w"))
+ wmode = L"w";
+ else if (!strcmp (mode, "wb"))
+ wmode = L"wb";
+ else
+ {
+ wmodebuf = utf8_to_wchar (mode);
+ if (!wmodebuf)
+ {
+ xfree (wfname);
+ return NULL;
+ }
+ wmode = wmodebuf;
+ }
+ ret = _wfopen (wfname, wmode);
+ xfree (wfname);
+ xfree (wmodebuf);
+ return ret;
+ }
+ else
+ return fopen (fname, mode);
+
+#else /*Unix*/
+ return fopen (fname, mode);
+#endif /*Unix*/
+}
+
+
+
/* A wrapper around open to handle Unicode file names under Windows. */
int
gnupg_open (const char *name, int flags, unsigned int mode)
diff --git a/common/util.h b/common/util.h
index 4d61bc0ea..75cdee0b4 100644
--- a/common/util.h
+++ b/common/util.h
@@ -142,7 +142,6 @@ ssize_t read_line (FILE *fp,
char **addr_of_buffer, size_t *length_of_buffer,
size_t *max_length);
-
/*-- b64enc.c and b64dec.c --*/
struct b64state
{
@@ -287,6 +286,9 @@ char *gnupg_get_help_string (const char *key, int only_current_locale);
/*-- localename.c --*/
const char *gnupg_messages_locale_name (void);
+/*-- sysutils.c --*/
+FILE *gnupg_fopen (const char *fname, const char *mode);
+
/*-- miscellaneous.c --*/
/* This function is called at startup to tell libgcrypt to use our own
diff --git a/dirmngr/dirmngr-client.c b/dirmngr/dirmngr-client.c
index 53b405ea2..0d714d485 100644
--- a/dirmngr/dirmngr-client.c
+++ b/dirmngr/dirmngr-client.c
@@ -468,7 +468,7 @@ read_pem_certificate (const char *fname, unsigned char **rbuf, size_t *rbuflen)
init_asctobin ();
- fp = fname? fopen (fname, "r") : stdin;
+ fp = fname? gnupg_fopen (fname, "r") : stdin;
if (!fp)
return gpg_error_from_errno (errno);
@@ -629,7 +629,7 @@ read_certificate (const char *fname, unsigned char **rbuf, size_t *rbuflen)
return 0;
}
- fp = fname? fopen (fname, "rb") : stdin;
+ fp = fname? gnupg_fopen (fname, "rb") : stdin;
if (!fp)
return gpg_error_from_errno (errno);
diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c
index 3500e7eea..e497183c1 100644
--- a/dirmngr/dirmngr.c
+++ b/dirmngr/dirmngr.c
@@ -947,7 +947,7 @@ main (int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
@@ -1840,7 +1840,7 @@ reread_configuration (void)
if (!opt.config_filename)
return; /* No config file. */
- fp = fopen (opt.config_filename, "r");
+ fp = gnupg_fopen (opt.config_filename, "r");
if (!fp)
{
log_error (_("option file '%s': %s\n"),
diff --git a/g10/exec.c b/g10/exec.c
index 3e5dc278b..1baa49f02 100644
--- a/g10/exec.c
+++ b/g10/exec.c
@@ -539,7 +539,7 @@ exec_write(struct exec_info **info,const char *program,
gpg_err_set_errno (EPERM);
}
else
- (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
+ (*info)->tochild = gnupg_fopen ((*info)->tempfile_in,binary?"wb":"w");
if((*info)->tochild==NULL)
{
ret = gpg_error_from_syserror ();
diff --git a/g10/gpg.c b/g10/gpg.c
index bb72b8122..a3ada64c8 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -2536,7 +2536,7 @@ main (int argc, char **argv)
}
configlineno = 0;
- configfp = fopen( configname, "r" );
+ configfp = gnupg_fopen( configname, "r" );
if (configfp && is_secured_file (fileno (configfp)))
{
fclose (configfp);
diff --git a/g10/keydb.c b/g10/keydb.c
index 9798b5cde..e538fe458 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -504,7 +504,7 @@ rt_from_file (const char *filename, int *r_found, int *r_openpgp)
KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE;
*r_found = *r_openpgp = 0;
- fp = fopen (filename, "rb");
+ fp = gnupg_fopen (filename, "rb");
if (fp)
{
*r_found = 1;
diff --git a/g10/plaintext.c b/g10/plaintext.c
index f9e0a4296..3bc86968b 100644
--- a/g10/plaintext.c
+++ b/g10/plaintext.c
@@ -185,7 +185,7 @@ get_output_file (const byte *embedded_name, int embedded_namelen,
want to port it again to riscos we should do most of the suff
in estream. FIXME: Consider to remove all riscos special
cases. */
- fp = fopen (fname, "wb");
+ fp = gnupg_fopen (fname, "wb");
if (!fp)
{
log_error (_("error creating '%s': %s\n"), fname, gpg_strerror (err));
diff --git a/g13/g13-syshelp.c b/g13/g13-syshelp.c
index ae603e1d2..e6755d575 100644
--- a/g13/g13-syshelp.c
+++ b/g13/g13-syshelp.c
@@ -325,7 +325,7 @@ main ( int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
diff --git a/g13/g13.c b/g13/g13.c
index 6265b9f24..c4cd34b2a 100644
--- a/g13/g13.c
+++ b/g13/g13.c
@@ -454,7 +454,7 @@ main ( int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
diff --git a/kbx/kbxutil.c b/kbx/kbxutil.c
index 6fb05ff6c..ec5a43b5d 100644
--- a/kbx/kbxutil.c
+++ b/kbx/kbxutil.c
@@ -272,7 +272,7 @@ read_file (const char *fname, size_t *r_length)
{
struct stat st;
- fp = fopen (fname, "rb");
+ fp = gnupg_fopen (fname, "rb");
if (!fp)
{
log_error ("can't open '%s': %s\n", fname, strerror (errno));
diff --git a/scd/scdaemon.c b/scd/scdaemon.c
index ab3e1d94a..c1a3f438b 100644
--- a/scd/scdaemon.c
+++ b/scd/scdaemon.c
@@ -524,7 +524,7 @@ main (int argc, char **argv )
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index eca266c8e..321826145 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -1037,7 +1037,7 @@ main ( int argc, char **argv)
next_pass:
if (configname) {
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
diff --git a/sm/minip12.c b/sm/minip12.c
index f066892a0..7087e444c 100644
--- a/sm/minip12.c
+++ b/sm/minip12.c
@@ -2565,7 +2565,7 @@ main (int argc, char **argv)
gcry_control (GCRYCTL_DISABLE_SECMEM, NULL);
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL);
- fp = fopen (argv[1], "rb");
+ fp = gnupg_fopen (argv[1], "rb");
if (!fp)
{
fprintf (stderr, "can't open '%s': %s\n", argv[1], strerror (errno));
diff --git a/tools/gpg-connect-agent.c b/tools/gpg-connect-agent.c
index a06d6fd2c..0dabdad16 100644
--- a/tools/gpg-connect-agent.c
+++ b/tools/gpg-connect-agent.c
@@ -1967,7 +1967,7 @@ handle_inquire (assuan_context_t ctx, char *line)
}
else
{
- fp = fopen (d->file, "rb");
+ fp = gnupg_fopen (d->file, "rb");
if (!fp)
log_error ("error opening '%s': %s\n", d->file, strerror (errno));
else if (opt.verbose)
diff --git a/tools/gpgparsemail.c b/tools/gpgparsemail.c
index b12209755..f54f1d46a 100644
--- a/tools/gpgparsemail.c
+++ b/tools/gpgparsemail.c
@@ -796,7 +796,7 @@ main (int argc, char **argv)
if (argc && strcmp (*argv, "-"))
{
- FILE *fp = fopen (*argv, "rb");
+ FILE *fp = gnupg_fopen (*argv, "rb");
if (!fp)
die ("can't open '%s': %s", *argv, strerror (errno));
parse_message (fp);
diff --git a/tools/gpgsplit.c b/tools/gpgsplit.c
index 674be6271..e84400854 100644
--- a/tools/gpgsplit.c
+++ b/tools/gpgsplit.c
@@ -552,7 +552,7 @@ write_part (FILE *fpin, unsigned long pktlen,
{
if (opt_verbose)
log_info ("writing '%s'\n", outname);
- fpout = fopen (outname, "wb");
+ fpout = gnupg_fopen (outname, "wb");
if (!fpout)
{
log_error ("error creating '%s': %s\n", outname, strerror(errno));
@@ -873,7 +873,7 @@ split_packets (const char *fname)
fp = stdin;
fname = "-";
}
- else if ( !(fp = fopen (fname,"rb")) )
+ else if ( !(fp = gnupg_fopen (fname,"rb")) )
{
log_error ("can't open '%s': %s\n", fname, strerror (errno));
return;
diff --git a/tools/symcryptrun.c b/tools/symcryptrun.c
index c5780fdf5..d1f953c9c 100644
--- a/tools/symcryptrun.c
+++ b/tools/symcryptrun.c
@@ -363,7 +363,7 @@ confucius_copy_file (char *infile, char *outfile, int plain)
}
else
{
- in = fopen (infile, "rb");
+ in = gnupg_fopen (infile, "rb");
if (!in)
{
log_error (_("could not open %s for writing: %s\n"),
@@ -380,7 +380,7 @@ confucius_copy_file (char *infile, char *outfile, int plain)
}
else
{
- out = fopen (outfile, "wb");
+ out = gnupg_fopen (outfile, "wb");
if (!out)
{
log_error (_("could not open %s for writing: %s\n"),
@@ -936,7 +936,7 @@ main (int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (!default_config)