diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index c1f59265..459cf354 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -1367,7 +1367,6 @@ static int NSISCALL ExecuteEntry(entry *entry_) // Jim Park/Wizou: in Unicode version of NSIS, EW_FPUTS still deals with ANSI files (conversion is done). We add EW_FPUTWS to deal with Unicode files. #endif { - DWORD dw; int l; // number of bytes to write TCHAR *t=var0; const int writeCodPt = parm2, ansi = EW_FPUTS == which; @@ -1395,7 +1394,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) #ifdef _UNICODE if ((ansi | writeCodPt) || !parm3 || SUCCEEDED(UTF16LEBOM(hFile,(INT_PTR)hFile))) #endif - if (WriteFile(hFile,buf1,l,&dw,NULL)) + if (myWriteFile(hFile,buf1,l)) break; // Success } exec_error++; @@ -1549,7 +1548,6 @@ static int NSISCALL ExecuteEntry(entry *entry_) filebuf=(unsigned char *)GlobalAlloc(GPTR,filehdrsize); if (filebuf) { - DWORD lout; SetSelfFilePointer(0); ReadSelfFile((char*)filebuf,filehdrsize); { @@ -1571,7 +1569,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) GlobalFree(unicon_data); } } - WriteFile(hFile,(char*)filebuf,filehdrsize,&lout,NULL); + myWriteFile(hFile,(char*)filebuf,filehdrsize); GlobalFree(filebuf); ret=GetCompressedDataFromDataBlock(-1,hFile); } diff --git a/Source/exehead/fileform.c b/Source/exehead/fileform.c index d77252b1..2f3b0bc6 100644 --- a/Source/exehead/fileform.c +++ b/Source/exehead/fileform.c @@ -430,8 +430,7 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, unsigned char *outbuf, int o if (!outbuf) { - DWORD r; - if (!WriteFile(hFileOut,outbuffer,u,&r,NULL) || (int)r != u) return -2; + if (!myWriteFile(hFileOut,outbuffer,u)) return -2; retval+=u; } else @@ -452,9 +451,8 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, unsigned char *outbuf, int o while (input_len > 0) { DWORD l=min(input_len,outbuffer_len); - DWORD t; if (!ReadSelfFile((LPVOID)inbuffer,l)) return -3; - if (!WriteFile(hFileOut,inbuffer,l,&t,NULL) || l!=t) return -2; + if (!myWriteFile(hFileOut,inbuffer,l)) return -2; retval+=l; input_len-=l; } @@ -498,7 +496,7 @@ static int NSISCALL __ensuredata(int amount) g_inflate_stream.avail_in=l; do { - DWORD r,t; + DWORD r; #ifdef NSIS_CONFIG_VISIBLE_SUPPORT if (g_header) #ifdef NSIS_CONFIG_SILENT_SUPPORT @@ -520,7 +518,7 @@ static int NSISCALL __ensuredata(int amount) r=BUGBUG64TRUNCATE(DWORD,(UINT_PTR)g_inflate_stream.next_out)-BUGBUG64TRUNCATE(DWORD,(UINT_PTR)_outbuffer); if (r) { - if (!WriteFile(dbd_hFile,_outbuffer,r,&t,NULL) || r != t) + if (!myWriteFile(dbd_hFile,_outbuffer,r)) { return -2; } @@ -568,10 +566,9 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, unsigned char *outbuf, int o { while (input_len > 0) { - DWORD t; DWORD l=min(input_len,IBUFSIZE); if (!myReadFile(dbd_hFile,(LPVOID)_inbuffer,r=l)) return -3; - if (!WriteFile(hFileOut,_inbuffer,r,&t,NULL) || t != l) return -2; + if (!myWriteFile(hFileOut,_inbuffer,r)) return -2; retval+=r; input_len-=r; dbd_pos+=r; diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 0803379d..2e315a70 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -452,14 +452,19 @@ TCHAR * NSISCALL my_GetTempFileName(TCHAR *buf, const TCHAR *dir) BOOL NSISCALL myReadFile(HANDLE h, LPVOID buf, DWORD cb) { DWORD cbio; - BOOL r = ReadFile(h, buf, cb, &cbio, NULL); - return r && cb == cbio; + return ReadFile(h, buf, cb, &cbio, NULL) && cb == cbio; +} + +BOOL NSISCALL myWriteFile(HANDLE h, const void*buf, DWORD cb) +{ + DWORD cbio; + return WriteFile(h, buf, cb, &cbio, NULL) && cb == cbio; } // Reading skips the BOM if present, writing writes it to a empty file HRESULT NSISCALL UTF16LEBOM(HANDLE h, INT_PTR ForWrite) { - DWORD orgpos = SetFilePointer(h, 0, NULL, FILE_CURRENT), cbio; + DWORD orgpos = SetFilePointer(h, 0, NULL, FILE_CURRENT); if (0 == orgpos) { BYTE bom[2]; @@ -472,11 +477,10 @@ HRESULT NSISCALL UTF16LEBOM(HANDLE h, INT_PTR ForWrite) if (0 == SetFilePointer(h, 0, NULL, FILE_CURRENT)) // Is the file empty? { static const BYTE bom16le[] = { 0xff, 0xfe }; - return (WriteFile(h, bom16le, 2, &cbio, NULL) && 2 == cbio) - ? S_OK : E_FAIL; + return myWriteFile(h, bom16le, 2) ? S_OK : E_FAIL; } } - SetFilePointer(h, 0, NULL, FILE_BEGIN); // The file may have starting with something that was not a BOM, undo the read + SetFilePointer(h, 0, NULL, FILE_BEGIN); // The file may have started with something that was not a BOM, undo the read } return S_FALSE; } @@ -498,9 +502,7 @@ void RenameViaWininit(const TCHAR* prevName, const TCHAR* newName) int cchRenameLine; LPCSTR szRenameSec = "[Rename]\r\n"; // rename section marker HANDLE hfile; - DWORD dwFileSize; - DWORD dwBytes; - DWORD dwRenameLinePos; + DWORD dwFileSize, dwRenameLinePos; char *pszWinInit; // Contains the file contents of wininit.ini int spn; // length of the short path name in TCHARs. @@ -572,7 +574,7 @@ void RenameViaWininit(const TCHAR* prevName, const TCHAR* newName) dwFileSize += cchRenameLine; SetFilePointer(hfile, 0, NULL, FILE_BEGIN); - WriteFile(hfile, pszWinInit, dwFileSize, &dwBytes, NULL); + myWriteFile(hfile, pszWinInit, dwFileSize); GlobalFree(pszWinInit); } @@ -952,9 +954,8 @@ void NSISCALL log_write(int close) } if (fp!=INVALID_HANDLE_VALUE) { - DWORD d; mystrcat(log_text,_T("\r\n")); - WriteFile(fp,log_text,mystrlen(log_text)*sizeof(TCHAR),&d,NULL); + myWriteFile(fp,log_text,mystrlen(log_text)*sizeof(TCHAR)); } } } @@ -1013,6 +1014,9 @@ void log_timestamp(TCHAR *buf) void log_printf(TCHAR *format, ...) { +#ifdef NSIS_CONFIG_LOG_STDOUT + HANDLE hStdOut; +#endif va_list val; va_start(val,format); @@ -1026,11 +1030,10 @@ void log_printf(TCHAR *format, ...) OutputDebugString(log_text); #endif #ifdef NSIS_CONFIG_LOG_STDOUT - if (log_dolog && GetStdHandle(STD_OUTPUT_HANDLE) != INVALID_HANDLE_VALUE) + if (log_dolog && (hStdOut = GetStdHandle(STD_OUTPUT_HANDLE)) != INVALID_HANDLE_VALUE) { - DWORD dwBytes; - WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), log_text, lstrlen(log_text), &dwBytes, NULL); - WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), _T("\n"), 1, &dwBytes, NULL); + myWriteFile(hStdOut, log_text, lstrlen(log_text)); // BUGBUG: Should this be lstrlen*sizeof(TCHAR)? + myWriteFile(hStdOut, _T("\n"), 1); // BUGBUG: sizeof(TCHAR)? } #endif #if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) diff --git a/Source/exehead/util.h b/Source/exehead/util.h index 49f49c92..e9533e7d 100644 --- a/Source/exehead/util.h +++ b/Source/exehead/util.h @@ -44,6 +44,7 @@ TCHAR * NSISCALL mystrstr(TCHAR *a, TCHAR *b); WIN32_FIND_DATA * NSISCALL file_exists(TCHAR *buf); TCHAR * NSISCALL my_GetTempFileName(TCHAR *buf, const TCHAR *dir); BOOL NSISCALL myReadFile(HANDLE h, LPVOID buf, DWORD cb); +BOOL NSISCALL myWriteFile(HANDLE h, const void*buf, DWORD cb); HRESULT NSISCALL UTF16LEBOM(HANDLE h, INT_PTR ForWrite); //BOOL NSISCALL my_SetWindowText(HWND hWnd, const TCHAR *val);