some CEXEBuild::doParse cleanup
- removed last_line_had_slash which was always set to zero - moved m_linebuild.resize(0) so it won't free the memory the next condition uses, though the line needs to be 64kb for that to happen - took care of a coupple of comments git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4842 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
62007bdd5b
commit
4ca1f6d04b
1 changed files with 12 additions and 9 deletions
|
@ -279,31 +279,34 @@ int CEXEBuild::doParse(const char *str)
|
||||||
|
|
||||||
while (*str == ' ' || *str == '\t') str++;
|
while (*str == ' ' || *str == '\t') str++;
|
||||||
|
|
||||||
if (m_linebuild.getlen()>1) m_linebuild.resize(m_linebuild.getlen()-2);
|
// remove trailing slash and null, if there's a previous line
|
||||||
|
if (m_linebuild.getlen()>1)
|
||||||
|
m_linebuild.resize(m_linebuild.getlen()-2);
|
||||||
|
|
||||||
m_linebuild.add(str,strlen(str)+1);
|
m_linebuild.add(str,strlen(str)+1);
|
||||||
|
|
||||||
// remove trailing slash and null
|
// keep waiting for more lines, if this line ends with a backslash
|
||||||
if (str[0] && CharPrev(str,str+strlen(str))[0] == '\\') {
|
if (str[0] && CharPrev(str,str+strlen(str))[0] == '\\')
|
||||||
last_line_had_slash = 1;
|
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
|
||||||
else last_line_had_slash = 0;
|
|
||||||
|
|
||||||
|
// parse before checking if the line should be ignored, so block comments won't be missed
|
||||||
res=line.parse((char*)m_linebuild.get(),!strnicmp((char*)m_linebuild.get(),"!define",7));
|
res=line.parse((char*)m_linebuild.get(),!strnicmp((char*)m_linebuild.get(),"!define",7));
|
||||||
|
|
||||||
inside_comment = line.InCommentBlock();
|
inside_comment = line.InCommentBlock();
|
||||||
|
|
||||||
m_linebuild.resize(0);
|
|
||||||
|
|
||||||
// if ignoring, ignore all lines that don't begin with an exclamation mark
|
// if ignoring, ignore all lines that don't begin with an exclamation mark
|
||||||
{
|
{
|
||||||
bool ignore_line = cur_ifblock && (cur_ifblock->ignore || cur_ifblock->inherited_ignore);
|
bool ignore_line = cur_ifblock && (cur_ifblock->ignore || cur_ifblock->inherited_ignore);
|
||||||
char first_char = *(char *) m_linebuild.get();
|
char first_char = *(char *) m_linebuild.get();
|
||||||
if (ignore_line && first_char!='!' && !last_line_had_slash)
|
if (ignore_line && first_char!='!')
|
||||||
|
{
|
||||||
|
m_linebuild.resize(0);
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_linebuild.resize(0);
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
if (res==-2) ERROR_MSG("Error: unterminated string parsing line at %s:%d\n",curfilename,linecnt);
|
if (res==-2) ERROR_MSG("Error: unterminated string parsing line at %s:%d\n",curfilename,linecnt);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue