- Improved file mapping so you can now esaily compile installers up to 2GB with a minimum requirment of memory (changable by FileBufSize)

- Fixed DirText
- Fixed new browse dialog style problems (thanks LIGHTNING UK!)


git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2919 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-09-15 22:05:06 +00:00
parent 624f7225f4
commit de0104cc39
10 changed files with 727 additions and 176 deletions

View file

@ -2749,6 +2749,16 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
if (build_optimize_datablock==-1) PRINTHELP()
SCRIPT_MSG("SetDatablockOptimize: %s\n",line.gettoken_str(1));
return PS_OK;
case TOK_FILEBUFSIZE:
build_filebuflen=line.gettoken_int(1);
build_filebuflen<<=20;
if (build_filebuflen<=0)
{
ERROR_MSG("Error: FileBufSize: invalid buffer size -- %d\n",build_filebuflen);
return PS_ERROR;
}
SCRIPT_MSG("FileBufSize: %smb (%d bytes)\n",line.gettoken_str(1),build_filebuflen);
return PS_OK;
case TOK_ADDSIZE:
{
int s;
@ -4298,7 +4308,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
if (*p) PRINTHELP()
SCRIPT_MSG("WriteRegBin: %s\\%s\\%s=%s\n",
line.gettoken_str(1),line.gettoken_str(2),line.gettoken_str(3),line.gettoken_str(4));
ent.offsets[3]=add_data(data,data_len);
ent.offsets[3]=add_db_data(data,data_len);
if (ent.offsets[3] < 0) return PS_ERROR;
ent.offsets[4]=3;
}
@ -5036,7 +5046,8 @@ int CEXEBuild::do_add_file(const char *lgss, int attrib, int recurse, int linecn
{
if ((d.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
HANDLE hFile,hFileMap;
MMapFile mmap;
HANDLE hFile;
DWORD len;
(*total_files)++;
sprintf(newfn,"%s%s%s",dir,dir[0]?"\\":"",d.cFileName);
@ -5054,26 +5065,13 @@ int CEXEBuild::do_add_file(const char *lgss, int attrib, int recurse, int linecn
ERROR_MSG("%sFile: failed opening file \"%s\"\n",generatecode?"":"Reserve",newfn);
return PS_ERROR;
}
hFileMap=NULL;
len = GetFileSize(hFile, NULL);
if (len && !(hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL)))
if (len && !mmap.setfile(hFile, len))
{
CloseHandle(hFile);
ERROR_MSG("%sFile: failed creating mmap of \"%s\"\n",generatecode?"":"Reserve",newfn);
return PS_ERROR;
}
char *filedata=NULL;
if (len)
{
filedata=(char*)MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);
if (!filedata)
{
if (hFileMap) CloseHandle(hFileMap);
CloseHandle(hFile);
ERROR_MSG("%sFile: failed mmapping file \"%s\"\n",generatecode?"":"Reserve",newfn);
return PS_ERROR;
}
}
if (generatecode&1)
section_add_size_kb((len+1023)/1024);
@ -5113,10 +5111,9 @@ int CEXEBuild::do_add_file(const char *lgss, int attrib, int recurse, int linecn
ent.offsets[1]=add_string(buf);
}
}
ent.offsets[2]=add_data(filedata?filedata:"",len);
ent.offsets[2]=add_db_data(&mmap);
if (filedata) UnmapViewOfFile(filedata);
if (hFileMap) CloseHandle(hFileMap);
mmap.clear();
if (ent.offsets[2] < 0)
{