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
This commit is contained in:
justin1014 2002-09-04 05:40:02 +00:00
parent 18fbbd621f
commit 0bb9e63724

View file

@ -240,36 +240,33 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
if (pszWinInit != NULL) if (pszWinInit != NULL)
{ {
int do_write=0;
LPSTR pszRenameSecInFile = findinmem(pszWinInit, szRenameSec,-1); LPSTR pszRenameSecInFile = findinmem(pszWinInit, szRenameSec,-1);
if (pszRenameSecInFile == NULL) if (pszRenameSecInFile == NULL)
{ {
mystrcpy(pszWinInit+dwFileSize, szRenameSec); mystrcpy(pszWinInit+dwFileSize, szRenameSec);
dwFileSize += 10; dwFileSize += 10;
dwRenameLinePos = dwFileSize; dwRenameLinePos = dwFileSize;
do_write++;
} }
else else
{ {
char *pszFirstRenameLine = findinmem(pszRenameSecInFile, "\n",-1)+1; char *pszFirstRenameLine = pszRenameSecInFile+10;
int l=pszWinInit + dwFileSize-pszFirstRenameLine; char *pszNextSec = findinmem(pszFirstRenameLine,"\n[",-1);
if (!findinmem(pszFirstRenameLine,szRenameLine,l)) if (pszNextSec)
{ {
int l=dwFileSize - (pszNextSec - pszWinInit);
void* data=(void*)my_alloc(l); void* data=(void*)my_alloc(l);
mini_memcpy(data, pszFirstRenameLine, l); mini_memcpy(data, pszNextSec, l);
mini_memcpy(pszFirstRenameLine + cchRenameLine, data, l); mini_memcpy(pszNextSec + cchRenameLine, data, l);
GlobalFree((HGLOBAL)data); GlobalFree((HGLOBAL)data);
dwRenameLinePos = pszFirstRenameLine - pszWinInit; dwRenameLinePos = pszNextSec - pszWinInit;
do_write++;
} }
// 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); UnmapViewOfFile(pszWinInit);