mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-21 22:21:37 +00:00
Fix renaming of files in Win32
The `rename` call doesn't quite work on Win32: expects the destination file to not exist. We're using a native Win32 call in those cases -- that should do the trick. Signed-off-by: Vicent Marti <tanoku@gmail.com>
This commit is contained in:
parent
c3be146840
commit
3eb47c9f67
@ -144,10 +144,22 @@ void gitfo_free_buf(gitfo_buf *obj)
|
|||||||
|
|
||||||
int gitfo_move_file(char *from, char *to)
|
int gitfo_move_file(char *from, char *to)
|
||||||
{
|
{
|
||||||
|
#ifdef GIT_WIN32
|
||||||
|
/*
|
||||||
|
* Win32 POSIX compilance my ass. If the destination
|
||||||
|
* file exists, the `rename` call fails. This is as
|
||||||
|
* close as it gets with the Win32 API.
|
||||||
|
*/
|
||||||
|
if (gitfo_exists(to) == GIT_SUCCESS)
|
||||||
|
return ReplaceFile(to, from, NULL, 0, NULL, NULL) ?
|
||||||
|
GIT_SUCCESS : GIT_EOSERR;
|
||||||
|
#else
|
||||||
|
/* Don't even try this on Win32 */
|
||||||
if (!link(from, to)) {
|
if (!link(from, to)) {
|
||||||
gitfo_unlink(from);
|
gitfo_unlink(from);
|
||||||
return GIT_SUCCESS;
|
return GIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!rename(from, to))
|
if (!rename(from, to))
|
||||||
return GIT_SUCCESS;
|
return GIT_SUCCESS;
|
||||||
|
Loading…
Reference in New Issue
Block a user