Commit 3eb47c9f by Vicent Marti

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>
parent c3be1468
......@@ -144,10 +144,22 @@ void gitfo_free_buf(gitfo_buf *obj)
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)) {
gitfo_unlink(from);
return GIT_SUCCESS;
}
#endif
if (!rename(from, to))
return GIT_SUCCESS;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment