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:
parent
18fbbd621f
commit
0bb9e63724
1 changed files with 11 additions and 14 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue