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 int
gnupg_remove (const char *fname) gnupg_remove (const char *fname)
{ {
#ifdef HAVE_W32CE_SYSTEM #ifdef HAVE_W32_SYSTEM
int rc; int rc;
wchar_t *wfname; wchar_t *wfname;
@ -650,7 +650,7 @@ gnupg_remove (const char *fname)
rc = 0; rc = 0;
else else
{ {
rc = DeleteFile (wfname); rc = DeleteFileW (wfname);
xfree (wfname); xfree (wfname);
} }
if (!rc) 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 /* Wrapper for rename(2) to handle Windows peculiarities. If
* BLOCK_SIGNALS is not NULL and points to a variable set to true, all * 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 * 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); gnupg_remove (newname);
again: again:
if (rename (oldname, newname)) if (w32_rename (oldname, newname))
{ {
if (GetLastError () == ERROR_SHARING_VIOLATION) if (GetLastError () == ERROR_SHARING_VIOLATION)
{ {