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:
parent
157030271f
commit
4252cd7b18
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user