Commit 7360122b by Vicent Marti

Fix file renaming in MinGW

We now use MoveFileEx, which is not assured to be atomic but works for
always (both if the destination exists, or if it doesn't) and is
available in MinGW.

Since this is a Win32 API call, complaint about lost or overwritten files
should be forwarded at Steve Ballmer.

Signed-off-by: Vicent Marti <tanoku@gmail.com>
parent 3eb47c9f
......@@ -150,21 +150,19 @@ int gitfo_move_file(char *from, char *to)
* 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;
return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING) ? 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;
return GIT_EOSERR;
#endif
}
int gitfo_map_ro(git_map *out, git_file fd, git_off_t begin, size_t len)
......
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