1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

w32: Make gnupg_remove and gnupg_rename_file Unicode aware

* common/sysutils.c (w32_rename): New.
(gnupg_rename_file) [W32]: Support Unicode.
(gnupg_remove) [W32]: Support Unicode.  Drop Windows-CE support.
--

GnuPG-bug-id: 5098
(cherry picked from commit 9a0197b6fe412cfc66b0cece521267180e454416)
This commit is contained in:
Werner Koch 2020-10-21 16:53:41 +02:00
parent 157030271f
commit 4252cd7b18
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B

View File

@ -641,7 +641,7 @@ gnupg_allow_set_foregound_window (pid_t pid)
int
gnupg_remove (const char *fname)
{
#ifdef HAVE_W32CE_SYSTEM
#ifdef HAVE_W32_SYSTEM
int rc;
wchar_t *wfname;
@ -650,7 +650,7 @@ gnupg_remove (const char *fname)
rc = 0;
else
{
rc = DeleteFile (wfname);
rc = DeleteFileW (wfname);
xfree (wfname);
}
if (!rc)
@ -662,6 +662,36 @@ gnupg_remove (const char *fname)
}
/* Helper for gnupg_rename_file. */
#ifdef HAVE_W32_SYSTEM
static int
w32_rename (const char *oldname, const char *newname)
{
if (any8bitchar (oldname) || any8bitchar (newname))
{
wchar_t *woldname, *wnewname;
int ret;
woldname = utf8_to_wchar (oldname);
if (!woldname)
return -1;
wnewname = utf8_to_wchar (newname);
if (!wnewname)
{
xfree (wnewname);
return -1;
}
ret = _wrename (woldname, wnewname);
xfree (wnewname);
xfree (woldname);
return ret;
}
else
return rename (oldname, newname);
}
#endif /*HAVE_W32_SYSTEM*/
/* Wrapper for rename(2) to handle Windows peculiarities. If
* BLOCK_SIGNALS is not NULL and points to a variable set to true, all
* signals will be blocked by calling gnupg_block_all_signals; the
@ -681,7 +711,7 @@ gnupg_rename_file (const char *oldname, const char *newname, int *block_signals)
gnupg_remove (newname);
again:
if (rename (oldname, newname))
if (w32_rename (oldname, newname))
{
if (GetLastError () == ERROR_SHARING_VIOLATION)
{