mirror of https://github.com/mgba-emu/mgba.git
Updater: Fix rewriting folders and files on Windows (fixes #3384)
This commit is contained in:
parent
d82fc3dec1
commit
ad0d3972a6
1
CHANGES
1
CHANGES
|
@ -48,6 +48,7 @@ Misc:
|
|||
- Qt: Show a dummy shader settings tab if shaders aren't supported
|
||||
- Res: Port NSO-gba-colors shader (closes mgba.io/i/2834)
|
||||
- Scripting: Add `callbacks:oneshot` for single-call callbacks
|
||||
- Updater: Fix rewriting folders and files on Windows (fixes mgba.io/i/3384)
|
||||
|
||||
0.10.4: (2024-12-07)
|
||||
Emulation fixes:
|
||||
|
|
|
@ -133,14 +133,11 @@ bool extractArchive(struct VDir* archive, const char* root, bool prefix) {
|
|||
errno = 0;
|
||||
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
|
||||
if (!vfOut) {
|
||||
if (errno == EACCES) {
|
||||
#ifdef _WIN32
|
||||
Sleep(1000);
|
||||
#else
|
||||
sleep(1);
|
||||
#endif
|
||||
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
|
||||
} else if (errno == EISDIR) {
|
||||
int error = errno;
|
||||
struct stat st;
|
||||
if (error == EISDIR || (stat(path, &st) >= 0 && S_ISDIR(st.st_mode))) {
|
||||
// Windows maps STATUS_FILE_IS_A_DIRECTORY to ERROR_ACCESS_DENIED,
|
||||
// which then gets mapped to EACCESS, because everything is awful
|
||||
fprintf(logfile, "rm -r %s\n", path);
|
||||
if (!rmdirRecursive(VDirOpen(path))) {
|
||||
return false;
|
||||
|
@ -151,6 +148,13 @@ bool extractArchive(struct VDir* archive, const char* root, bool prefix) {
|
|||
RemoveDirectoryW(wpath);
|
||||
#else
|
||||
rmdir(path);
|
||||
#endif
|
||||
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
|
||||
} else if (error == EACCES || error == ETXTBSY) {
|
||||
#ifdef _WIN32
|
||||
Sleep(1000);
|
||||
#else
|
||||
sleep(1);
|
||||
#endif
|
||||
vfOut = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue