More memory clean-ups

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2901 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-09-12 11:16:33 +00:00
parent 8380534b1d
commit 41808c26be
7 changed files with 48 additions and 9 deletions

View file

@ -210,7 +210,7 @@ CDialogTemplate::~CDialogTemplate() {
if (m_szTitle)
delete [] m_szTitle;
if (m_szFont)
delete [] m_szTitle;
delete [] m_szFont;
for (unsigned int i = 0; i < m_vItems.size(); i++) {
if (m_vItems[i]->szClass && !IS_INTRESOURCE(m_vItems[i]->szClass))

View file

@ -24,6 +24,17 @@ struct version_string_list {
class CVersionStrigList : public SortedStringListND<struct version_string_list>
{
public:
~CVersionStrigList()
{
struct version_string_list *itr = (struct version_string_list *) gr.get();
int i = gr.getlen() / sizeof(struct version_string_list);
while (i--)
{
delete itr[i].pChildStrings;
}
}
int add(LANGID langid, int codepage)
{
char Buff[10];

View file

@ -412,7 +412,7 @@ int CEXEBuild::getcurdbsize() { return cur_datablock->getlen(); }
int CEXEBuild::add_string(const char *string, int process/*=1*/) // returns offset in stringblock
{
if (!*string) return 0;
if (!string || !*string) return 0;
if (*string == '$' && *(string+1) == '(') {
int idx = 0;

View file

@ -842,10 +842,13 @@ LanguageTable * CEXEBuild::LoadLangFile(char *filename) {
}
void CEXEBuild::DeleteLangTable(LanguageTable *table) {
free(table->nlf.m_szName);
free(table->nlf.m_szFont);
free(table->lang_strings);
if (table->nlf.m_szName)
free(table->nlf.m_szName);
if (table->nlf.m_szFont)
free(table->nlf.m_szFont);
delete table->lang_strings;
for (int i = 0; i < NLF_STRINGS; i++) {
free(table->nlf.m_szStrings[i]);
if (table->nlf.m_szStrings[i])
free(table->nlf.m_szStrings[i]);
}
}

View file

@ -1205,6 +1205,11 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
}
rewind(fp);
char *data=(char*)malloc(datalen+2);
if (!data)
{
ERROR_MSG("Internal compiler error #12345: LicenseData malloc(%d) failed.\n", datalen+2);
return PS_ERROR;
}
char *ldata=data+1;
if (fread(ldata,1,datalen,fp) != datalen)
{
@ -1220,6 +1225,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
*data = SF_TEXT;
int ret = SetLangString(name, lang, data);
free(data);
if (ret == PS_WARNING)
warning_fl("LicenseLangString \"%s\" set multiple times for %d, wasting space", name, lang);
else if (ret == PS_ERROR)
@ -1483,10 +1489,16 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
}
rewind(fp);
data=(char*)malloc(datalen+2);
if (!data)
{
ERROR_MSG("Internal compiler error #12345: LicenseData malloc(%d) failed.\n", datalen+2);
return PS_ERROR;
}
char *ldata=data+1;
if (fread(ldata,1,datalen,fp) != datalen) {
ERROR_MSG("LicenseData: can't read file.\n");
fclose(fp);
free(data);
return PS_ERROR;
}
fclose(fp);
@ -1509,6 +1521,10 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
cur_page->parms[1] = add_string(data, 0);
}
if (!idx)
free(data);
SCRIPT_MSG("LicenseData: \"%s\"\n",file);
}
return make_sure_not_in_secorfunc(line.gettoken_str(0), 1);

View file

@ -181,7 +181,8 @@ class SortedStringList
int num=gr.getlen()/sizeof(T);
for (int i=0; i<num; i++) {
free(s[i].name);
if (s[i].name)
free(s[i].name);
}
}

View file

@ -84,6 +84,8 @@ int update_bitmap(CResourceEditor* re, WORD id, char* filename, int width/*=0*/,
re->UpdateResource(RT_BITMAP, MAKEINTRESOURCE(id), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), bitmap, dwSize);
free(bitmap);
return 0;
}
@ -158,9 +160,15 @@ int replace_icon(CResourceEditor* re, WORD wIconId, char* filename)
fpos_t pos;
fgetpos(f, &pos);
if (fseek(f, dwOffset, SEEK_SET)) return -1;
if (fseek(f, dwOffset, SEEK_SET)) {
free(rsrcIconGroup);
return -1;
}
BYTE* iconData = (BYTE*)malloc(ige->dwRawSize);
if (!iconData) throw bad_alloc();
if (!iconData) {
free(rsrcIconGroup);
throw bad_alloc();
}
fread(iconData, sizeof(BYTE), ige->dwRawSize, f);
re->UpdateResource(RT_ICON, MAKEINTRESOURCE(i+1), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), iconData, ige->dwRawSize);
free(iconData);