diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index e50389c7..859c7b30 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -388,11 +388,11 @@ static int NSISCALL ExecuteEntry(entry *entry_) } overwriteflag=!(cmp & (0x80000000 | (overwriteflag - 3))); } + // remove read only flag if overwrite mode is on if (!overwriteflag) { int attr=GetFileAttributes(buf0); - if (attr & FILE_ATTRIBUTE_READONLY) - SetFileAttributes(buf0,attr^FILE_ATTRIBUTE_READONLY); + SetFileAttributes(buf0,attr&(~FILE_ATTRIBUTE_READONLY)); } hOut=myOpenFile(buf0,GENERIC_WRITE,(overwriteflag==1)?CREATE_NEW:CREATE_ALWAYS); if (hOut == INVALID_HANDLE_VALUE) @@ -430,9 +430,9 @@ static int NSISCALL ExecuteEntry(entry *entry_) update_status_text(LANG_EXTRACT,buf3); { - ui_st_updateflag ^= 1; + ui_st_updateflag++; ret=GetCompressedDataFromDataBlock(parm2,hOut); - ui_st_updateflag ^= 1; + ui_st_updateflag--; } log_printf3("File: wrote %d to \"%s\"",ret,buf0); diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 89554a8d..f3e082c9 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -223,7 +223,16 @@ void * NSISCALL mini_memcpy(void *out, const void *in, int len) HANDLE NSISCALL myOpenFile(const char *fn, DWORD da, DWORD cd) { - return CreateFile(fn,da,FILE_SHARE_READ,NULL,cd,0,NULL); + int attr = GetFileAttributes(fn); + return CreateFile( + fn, + da, + FILE_SHARE_READ, + NULL, + cd, + attr == INVALID_FILE_ATTRIBUTES ? 0 : attr, + NULL + ); } char * NSISCALL my_GetTempFileName(char *buf, const char *dir) @@ -241,7 +250,7 @@ char * NSISCALL my_GetTempFileName(char *buf, const char *dir) } #ifdef NSIS_SUPPORT_MOVEONREBOOT -BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew) +void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew) { BOOL fOk = 0; HMODULE hLib=GetModuleHandle("kernel32.dll"); @@ -319,12 +328,12 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew) else dwRenameLinePos = dwFileSize; } - mini_memcpy(&pszWinInit[dwRenameLinePos], szRenameLine,cchRenameLine); + mini_memcpy(&pszWinInit[dwRenameLinePos], szRenameLine, cchRenameLine); dwFileSize += cchRenameLine; UnmapViewOfFile(pszWinInit); - fOk++; + //fOk++; } CloseHandle(hfilemap); } @@ -333,7 +342,7 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew) CloseHandle(hfile); } } - return fOk; + //return fOk; } #endif diff --git a/Source/exehead/util.h b/Source/exehead/util.h index b04d4991..31253d76 100644 --- a/Source/exehead/util.h +++ b/Source/exehead/util.h @@ -59,7 +59,7 @@ void NSISCALL trimslashtoend(char *buf); char * NSISCALL scanendslash(const char *str); int NSISCALL is_valid_instpath(char *s); char * NSISCALL validate_filename(char *fn); -BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew); +void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew); void * NSISCALL mini_memcpy(void *out, const void *in, int len); // Turn a pair of chars into a word