1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

Replace most calls to open by a new wrapper.

* common/sysutils.c (any8bitchar) [W32]: New.
(gnupg_open): New.  Replace most calls to open by this.
* common/iobuf.c (any8bitchar) [W32]: New.
(direct_open) [W32]: Use CreateFileW if needed.
--

This is yet another step for full Unicode support on Windows.

GnuPG-bug-id: 5098
(cherry picked from commit 4dcef0e178)
This commit is contained in:
Werner Koch 2020-10-20 14:08:35 +02:00
parent d65ea29683
commit 86e52e3c33
No known key found for this signature in database
GPG key ID: E3FDFF218E45B72B
8 changed files with 79 additions and 26 deletions

View file

@ -171,6 +171,18 @@ enable_core_dumps (void)
#endif
}
#ifdef HAVE_W32_SYSTEM
static int
any8bitchar (const char *string)
{
if (string)
for ( ; *string; string++)
if ((*string & 0x80))
return 1;
return 0;
}
#endif /*HAVE_W32_SYSTEM*/
/* Allow the use of special "-&nnn" style file names. */
void
@ -1095,6 +1107,30 @@ gnupg_access (const char *name, int mode)
#endif
}
/* A wrapper around open to handle Unicode file names under Windows. */
int
gnupg_open (const char *name, int flags, unsigned int mode)
{
#ifdef HAVE_W32_SYSTEM
if (any8bitchar (name))
{
wchar_t *wname;
int ret;
wname = utf8_to_wchar (name);
if (!wname)
return -1;
ret = _wopen (wname, flags, mode);
xfree (wname);
return ret;
}
else
return open (name, flags, mode);
#else
return open (name, flags, mode);
#endif
}
#ifdef HAVE_W32CE_SYSTEM