From 0bb9e637244bf29dea7ef1c8faf9af206d527796 Mon Sep 17 00:00:00 2001 From: justin1014 Date: Wed, 4 Sep 2002 05:40:02 +0000 Subject: [PATCH] made win9x move/delete on reboot support proper and function like on win2k (in that shit is deleted in order). Also should be slightly smaller (though < 512 bytes difference) git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@900 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/exehead/util.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 0b31414f..d51a730a 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -240,36 +240,33 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew) if (pszWinInit != NULL) { - int do_write=0; LPSTR pszRenameSecInFile = findinmem(pszWinInit, szRenameSec,-1); if (pszRenameSecInFile == NULL) { mystrcpy(pszWinInit+dwFileSize, szRenameSec); dwFileSize += 10; dwRenameLinePos = dwFileSize; - do_write++; } else { - char *pszFirstRenameLine = findinmem(pszRenameSecInFile, "\n",-1)+1; - int l=pszWinInit + dwFileSize-pszFirstRenameLine; - if (!findinmem(pszFirstRenameLine,szRenameLine,l)) + char *pszFirstRenameLine = pszRenameSecInFile+10; + char *pszNextSec = findinmem(pszFirstRenameLine,"\n[",-1); + if (pszNextSec) { + int l=dwFileSize - (pszNextSec - pszWinInit); void* data=(void*)my_alloc(l); - mini_memcpy(data, pszFirstRenameLine, l); - mini_memcpy(pszFirstRenameLine + cchRenameLine, data, l); + mini_memcpy(data, pszNextSec, l); + mini_memcpy(pszNextSec + cchRenameLine, data, l); GlobalFree((HGLOBAL)data); - dwRenameLinePos = pszFirstRenameLine - pszWinInit; - do_write++; + dwRenameLinePos = pszNextSec - pszWinInit; } + // rename section is last, stick item at end of file + else dwRenameLinePos = dwFileSize; } - if (do_write) - { - mini_memcpy(&pszWinInit[dwRenameLinePos], szRenameLine,cchRenameLine); - dwFileSize += cchRenameLine; - } + mini_memcpy(&pszWinInit[dwRenameLinePos], szRenameLine,cchRenameLine); + dwFileSize += cchRenameLine; UnmapViewOfFile(pszWinInit);