applied patch #1758863 - Patch for building on GCC and aCC
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5217 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
243c1b9920
commit
8e716ed458
10 changed files with 50 additions and 49 deletions
|
@ -82,7 +82,7 @@ makensis_env = defenv.Clone()
|
|||
if not defenv['DEBUG']:
|
||||
makensis_env.Append(CCFLAGS = '-O2') # optimize
|
||||
makensis_env.Append(CCFLAGS = '-Wall') # all warnings
|
||||
makensis_env.Append(CCFLAGS = '-Wno-non-virtual-dtor') # ignore virtual dtor warnings
|
||||
makensis_env.Append(CXXFLAGS = '-Wno-non-virtual-dtor') # ignore virtual dtor warnings
|
||||
|
||||
conf = FlagsConfigure(makensis_env)
|
||||
conf.CheckLinkFlag('-m32') #
|
||||
|
|
|
@ -29,9 +29,11 @@ makensis_env.Append(CFLAGS = '-Ae')
|
|||
|
||||
### required to build makensis
|
||||
|
||||
makensis_env.Append(LINKFLAGS = '-AA')
|
||||
makensis_env.Append(LINKFLAGS = '+DD32')
|
||||
makensis_env.Append(LINKFLAGS = '-mt')
|
||||
|
||||
makensis_env.Append(CXXFLAGS = '-AA')
|
||||
makensis_env.Append(CCFLAGS = '+DD32')
|
||||
makensis_env.Append(CCFLAGS = '-mt')
|
||||
|
||||
|
|
|
@ -547,16 +547,16 @@ CResourceDirectory* CResourceEditor::ScanDirectory(PRESOURCE_DIRECTORY rdRoot, P
|
|||
|
||||
for (int i = 0; i < entries; i++) {
|
||||
MY_IMAGE_RESOURCE_DIRECTORY_ENTRY rd = rdToScan->Entries[i];
|
||||
rd.OffsetToData = ConvertEndianness(rd.OffsetToData);
|
||||
rd.Name = ConvertEndianness(rd.Name);
|
||||
rd.UOffset.OffsetToData = ConvertEndianness(rd.UOffset.OffsetToData);
|
||||
rd.UName.Name = ConvertEndianness(rd.UName.Name);
|
||||
|
||||
// If this entry points to data entry get a pointer to it
|
||||
if (!rd.DirectoryOffset.DataIsDirectory)
|
||||
rde = PIMAGE_RESOURCE_DATA_ENTRY(rd.OffsetToData + (BYTE*)rdRoot);
|
||||
if (!rd.UOffset.DirectoryOffset.DataIsDirectory)
|
||||
rde = PIMAGE_RESOURCE_DATA_ENTRY(rd.UOffset.OffsetToData + (BYTE*)rdRoot);
|
||||
|
||||
// If this entry has a name, translate it from Unicode
|
||||
if (rd.NameString.NameIsString) {
|
||||
PIMAGE_RESOURCE_DIR_STRING_U rds = PIMAGE_RESOURCE_DIR_STRING_U(rd.NameString.NameOffset + (char*)rdRoot);
|
||||
if (rd.UName.NameString.NameIsString) {
|
||||
PIMAGE_RESOURCE_DIR_STRING_U rds = PIMAGE_RESOURCE_DIR_STRING_U(rd.UName.NameString.NameOffset + (char*)rdRoot);
|
||||
|
||||
size_t nameSize = ConvertEndianness(rds->Length);
|
||||
szName = new WCHAR[nameSize+1];
|
||||
|
@ -565,15 +565,15 @@ CResourceDirectory* CResourceEditor::ScanDirectory(PRESOURCE_DIRECTORY rdRoot, P
|
|||
}
|
||||
// Else, set the name to this entry's id
|
||||
else
|
||||
szName = MAKEINTRESOURCEW(ConvertEndianness(rdToScan->Entries[i].Id));
|
||||
szName = MAKEINTRESOURCEW(ConvertEndianness(rdToScan->Entries[i].UName.Id));
|
||||
|
||||
if (rd.DirectoryOffset.DataIsDirectory)
|
||||
if (rd.UOffset.DirectoryOffset.DataIsDirectory)
|
||||
rdc->AddEntry(
|
||||
new CResourceDirectoryEntry(
|
||||
szName,
|
||||
ScanDirectory(
|
||||
rdRoot,
|
||||
PRESOURCE_DIRECTORY(rd.DirectoryOffset.OffsetToDirectory + (BYTE*)rdRoot)
|
||||
PRESOURCE_DIRECTORY(rd.UOffset.DirectoryOffset.OffsetToDirectory + (BYTE*)rdRoot)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
@ -632,10 +632,10 @@ void CResourceEditor::WriteRsrcSec(BYTE* pbRsrcSec) {
|
|||
|
||||
MY_IMAGE_RESOURCE_DIRECTORY_ENTRY rDirE;
|
||||
ZeroMemory(&rDirE, sizeof(rDirE));
|
||||
rDirE.DirectoryOffset.DataIsDirectory = crd->GetEntry(i)->IsDataDirectory();
|
||||
rDirE.Id = crd->GetEntry(i)->HasName() ? 0 : crd->GetEntry(i)->GetId();
|
||||
rDirE.Id = ConvertEndianness(rDirE.Id);
|
||||
rDirE.NameString.NameIsString = (crd->GetEntry(i)->HasName()) ? 1 : 0;
|
||||
rDirE.UOffset.DirectoryOffset.DataIsDirectory = crd->GetEntry(i)->IsDataDirectory();
|
||||
rDirE.UName.Id = crd->GetEntry(i)->HasName() ? 0 : crd->GetEntry(i)->GetId();
|
||||
rDirE.UName.Id = ConvertEndianness(rDirE.UName.Id);
|
||||
rDirE.UName.NameString.NameIsString = (crd->GetEntry(i)->HasName()) ? 1 : 0;
|
||||
|
||||
CopyMemory(seeker, &rDirE, sizeof(MY_IMAGE_RESOURCE_DIRECTORY_ENTRY));
|
||||
crd->GetEntry(i)->m_dwWrittenAt = DWORD(seeker);
|
||||
|
@ -666,7 +666,7 @@ void CResourceEditor::WriteRsrcSec(BYTE* pbRsrcSec) {
|
|||
while (!qStrings.empty()) {
|
||||
CResourceDirectoryEntry* cRDirE = qStrings.front();
|
||||
|
||||
PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(cRDirE->m_dwWrittenAt)->NameString.NameOffset = ConvertEndianness(DWORD(seeker) - DWORD(pbRsrcSec));
|
||||
PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(cRDirE->m_dwWrittenAt)->UName.NameString.NameOffset = ConvertEndianness(DWORD(seeker) - DWORD(pbRsrcSec));
|
||||
|
||||
WCHAR* szName = cRDirE->GetName();
|
||||
WORD iLen = winchar_strlen(szName) + 1;
|
||||
|
@ -705,13 +705,13 @@ void CResourceEditor::SetOffsets(CResourceDirectory* resDir, DWORD newResDirAt)
|
|||
for (int i = 0; i < resDir->CountEntries(); i++) {
|
||||
PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY rde = PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(resDir->GetEntry(i)->m_dwWrittenAt);
|
||||
if (resDir->GetEntry(i)->IsDataDirectory()) {
|
||||
rde->DirectoryOffset.DataIsDirectory = 1;
|
||||
rde->DirectoryOffset.OffsetToDirectory = resDir->GetEntry(i)->GetSubDirectory()->m_dwWrittenAt - newResDirAt;
|
||||
rde->OffsetToData = ConvertEndianness(rde->OffsetToData);
|
||||
rde->UOffset.DirectoryOffset.DataIsDirectory = 1;
|
||||
rde->UOffset.DirectoryOffset.OffsetToDirectory = resDir->GetEntry(i)->GetSubDirectory()->m_dwWrittenAt - newResDirAt;
|
||||
rde->UOffset.OffsetToData = ConvertEndianness(rde->UOffset.OffsetToData);
|
||||
SetOffsets(resDir->GetEntry(i)->GetSubDirectory(), newResDirAt);
|
||||
}
|
||||
else {
|
||||
rde->OffsetToData = ConvertEndianness(resDir->GetEntry(i)->GetDataEntry()->m_dwWrittenAt - newResDirAt);
|
||||
rde->UOffset.OffsetToData = ConvertEndianness(resDir->GetEntry(i)->GetDataEntry()->m_dwWrittenAt - newResDirAt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ typedef struct _MY_IMAGE_RESOURCE_DIRECTORY_ENTRY {
|
|||
} NameString;
|
||||
DWORD Name;
|
||||
WORD Id;
|
||||
};
|
||||
} UName;
|
||||
union {
|
||||
DWORD OffsetToData;
|
||||
struct {
|
||||
|
@ -84,7 +84,7 @@ typedef struct _MY_IMAGE_RESOURCE_DIRECTORY_ENTRY {
|
|||
DWORD OffsetToDirectory:31;
|
||||
#endif
|
||||
} DirectoryOffset;
|
||||
};
|
||||
} UOffset;
|
||||
} MY_IMAGE_RESOURCE_DIRECTORY_ENTRY,*PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY;
|
||||
|
||||
#pragma pack()
|
||||
|
|
|
@ -510,7 +510,7 @@ int CEXEBuild::preprocess_string(char *out, const char *in, WORD codepage/*=CP_A
|
|||
// which is also memory wasting
|
||||
// So the line below must be commented !??
|
||||
//m_UserVarNames.inc_reference(idxUserVar);
|
||||
*out++ = (unsigned int) NS_VAR_CODE; // Named user variable;
|
||||
*out++ = (char) NS_VAR_CODE; // Named user variable;
|
||||
WORD w = FIX_ENDIAN_INT16(CODE_SHORT(idxUserVar));
|
||||
memcpy(out, &w, sizeof(WORD));
|
||||
out += sizeof(WORD);
|
||||
|
@ -534,7 +534,7 @@ int CEXEBuild::preprocess_string(char *out, const char *in, WORD codepage/*=CP_A
|
|||
{
|
||||
int CSIDL_Value_current = m_ShellConstants.get_value1(idxConst);
|
||||
int CSIDL_Value_all = m_ShellConstants.get_value2(idxConst);
|
||||
*out++=(unsigned int)NS_SHELL_CODE; // Constant code identifier
|
||||
*out++=(char)NS_SHELL_CODE; // Constant code identifier
|
||||
*out++=(char)CSIDL_Value_current;
|
||||
*out++=(char)CSIDL_Value_all;
|
||||
p = pShellConstName;
|
||||
|
@ -555,7 +555,7 @@ int CEXEBuild::preprocess_string(char *out, const char *in, WORD codepage/*=CP_A
|
|||
idx = DefineLangString(cp);
|
||||
if (idx < 0)
|
||||
{
|
||||
*out++ = (unsigned int)NS_LANG_CODE; // Next word is lang-string Identifier
|
||||
*out++ = (char)NS_LANG_CODE; // Next word is lang-string Identifier
|
||||
WORD w = FIX_ENDIAN_INT16(CODE_SHORT(-idx-1));
|
||||
memcpy(out, &w, sizeof(WORD));
|
||||
out += sizeof(WORD);
|
||||
|
|
|
@ -152,11 +152,11 @@ static void print_stub_info(CEXEBuild& build)
|
|||
{
|
||||
if (build.display_info)
|
||||
{
|
||||
fprintf(g_output,"Size of first header is %d bytes.\n",sizeof(firstheader));
|
||||
fprintf(g_output,"Size of main header is %d bytes.\n",sizeof(header));
|
||||
fprintf(g_output,"Size of each section is %d bytes.\n",sizeof(section));
|
||||
fprintf(g_output,"Size of each page is %d bytes.\n",sizeof(page));
|
||||
fprintf(g_output,"Size of each instruction is %d bytes.\n",sizeof(entry));
|
||||
fprintf(g_output,"Size of first header is %lu bytes.\n",(unsigned long)sizeof(firstheader));
|
||||
fprintf(g_output,"Size of main header is %lu bytes.\n",(unsigned long)sizeof(header));
|
||||
fprintf(g_output,"Size of each section is %lu bytes.\n",(unsigned long)sizeof(section));
|
||||
fprintf(g_output,"Size of each page is %lu bytes.\n",(unsigned long)sizeof(page));
|
||||
fprintf(g_output,"Size of each instruction is %lu bytes.\n",(unsigned long)sizeof(entry));
|
||||
int x=build.definedlist.getnum();
|
||||
fprintf(g_output,"\nDefined symbols: ");
|
||||
for (int i=0; i<x; i++)
|
||||
|
|
|
@ -2772,7 +2772,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
|
|||
datebuf[0]=0;
|
||||
size_t s=strftime(datebuf,sizeof(datebuf),value,localtime(&rawtime));
|
||||
|
||||
if (s < 0)
|
||||
if (s == 0)
|
||||
datebuf[0]=0;
|
||||
else
|
||||
datebuf[max(s,sizeof(datebuf)-1)]=0;
|
||||
|
@ -5757,7 +5757,6 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
|
|||
|
||||
return PS_OK;
|
||||
}
|
||||
return PS_ERROR;
|
||||
case TOK_INITPLUGINSDIR:
|
||||
{
|
||||
int ret;
|
||||
|
|
|
@ -125,7 +125,7 @@ int DefineList::add(const char *name, const char *value/*=""*/)
|
|||
extern void quit();
|
||||
if (g_display_errors)
|
||||
{
|
||||
fprintf(g_output,"\nInternal compiler error #12345: GrowBuf realloc/malloc(%d) failed.\n",strlen(value)+1);
|
||||
fprintf(g_output,"\nInternal compiler error #12345: GrowBuf realloc/malloc(%lu) failed.\n",(unsigned long)strlen(value)+1);
|
||||
fflush(g_output);
|
||||
}
|
||||
quit();
|
||||
|
|
|
@ -72,7 +72,7 @@ class SortedStringList
|
|||
extern void quit();
|
||||
if (g_display_errors)
|
||||
{
|
||||
fprintf(g_output,"\nInternal compiler error #12345: GrowBuf realloc/malloc(%d) failed.\n",strlen(name)+1);
|
||||
fprintf(g_output,"\nInternal compiler error #12345: GrowBuf realloc/malloc(%lu) failed.\n",(unsigned long)strlen(name)+1);
|
||||
fflush(g_output);
|
||||
}
|
||||
quit();
|
||||
|
|
|
@ -307,7 +307,7 @@ int find_in_dir(PRESOURCE_DIRECTORY rd, WORD id) {
|
|||
WORD l = i + FIX_ENDIAN_INT16(rd->Header.NumberOfIdEntries);
|
||||
|
||||
for (; i < l; i++) {
|
||||
if (FIX_ENDIAN_INT16(rd->Entries[i].Id) == id) {
|
||||
if (FIX_ENDIAN_INT16(rd->Entries[i].UName.Id) == id) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
@ -326,10 +326,10 @@ int generate_unicons_offsets(unsigned char* exeHeader, size_t exeHeaderSize, uns
|
|||
int idx = find_in_dir(rdRoot, (WORD) (long) RT_ICON);
|
||||
MY_ASSERT(idx < 0, "no icons found");
|
||||
MY_IMAGE_RESOURCE_DIRECTORY_ENTRY rdEntry = rdRoot->Entries[idx];
|
||||
FIX_ENDIAN_INT32_INPLACE(rdEntry.OffsetToData);
|
||||
MY_ASSERT(!rdEntry.DirectoryOffset.DataIsDirectory, "bad resource directory");
|
||||
FIX_ENDIAN_INT32_INPLACE(rdEntry.UOffset.OffsetToData);
|
||||
MY_ASSERT(!rdEntry.UOffset.DirectoryOffset.DataIsDirectory, "bad resource directory");
|
||||
|
||||
PRESOURCE_DIRECTORY rdIcons = PRESOURCE_DIRECTORY(rdEntry.DirectoryOffset.OffsetToDirectory + DWORD(rdRoot));
|
||||
PRESOURCE_DIRECTORY rdIcons = PRESOURCE_DIRECTORY(rdEntry.UOffset.DirectoryOffset.OffsetToDirectory + DWORD(rdRoot));
|
||||
|
||||
MY_ASSERT((size_t)rdIcons - (size_t)exeHeader > exeHeaderSize, "corrupted EXE - invalid pointer");
|
||||
|
||||
|
@ -339,19 +339,19 @@ int generate_unicons_offsets(unsigned char* exeHeader, size_t exeHeaderSize, uns
|
|||
|
||||
for (WORD i = 0; i < wNumberOfEntries; i++) { // Icons dir can't have named entries
|
||||
MY_IMAGE_RESOURCE_DIRECTORY_ENTRY icoEntry = rdIcons->Entries[i];
|
||||
FIX_ENDIAN_INT32_INPLACE(icoEntry.OffsetToData);
|
||||
FIX_ENDIAN_INT32_INPLACE(icoEntry.UOffset.OffsetToData);
|
||||
|
||||
MY_ASSERT(!icoEntry.DirectoryOffset.DataIsDirectory, "bad resource directory");
|
||||
PRESOURCE_DIRECTORY rd = PRESOURCE_DIRECTORY(icoEntry.DirectoryOffset.OffsetToDirectory + DWORD(rdRoot));
|
||||
MY_ASSERT(!icoEntry.UOffset.DirectoryOffset.DataIsDirectory, "bad resource directory");
|
||||
PRESOURCE_DIRECTORY rd = PRESOURCE_DIRECTORY(icoEntry.UOffset.DirectoryOffset.OffsetToDirectory + DWORD(rdRoot));
|
||||
|
||||
MY_ASSERT((size_t)rd - (size_t)exeHeader > exeHeaderSize, "corrupted EXE - invalid pointer");
|
||||
|
||||
MY_IMAGE_RESOURCE_DIRECTORY_ENTRY datEntry = rd->Entries[0];
|
||||
FIX_ENDIAN_INT32_INPLACE(datEntry.OffsetToData);
|
||||
FIX_ENDIAN_INT32_INPLACE(datEntry.UOffset.OffsetToData);
|
||||
|
||||
MY_ASSERT(datEntry.DirectoryOffset.DataIsDirectory, "bad resource directory");
|
||||
MY_ASSERT(datEntry.UOffset.DirectoryOffset.DataIsDirectory, "bad resource directory");
|
||||
|
||||
PIMAGE_RESOURCE_DATA_ENTRY rde = PIMAGE_RESOURCE_DATA_ENTRY(datEntry.OffsetToData + DWORD(rdRoot));
|
||||
PIMAGE_RESOURCE_DATA_ENTRY rde = PIMAGE_RESOURCE_DATA_ENTRY(datEntry.UOffset.OffsetToData + DWORD(rdRoot));
|
||||
|
||||
MY_ASSERT((size_t)rde - (size_t)exeHeader > exeHeaderSize, "corrupted EXE - invalid pointer");
|
||||
|
||||
|
@ -605,18 +605,18 @@ FILE *my_fopen(const char *path, const char *mode)
|
|||
}
|
||||
#endif//!_WIN32
|
||||
|
||||
void *operator new(size_t size) {
|
||||
void *operator new(size_t size) throw(bad_alloc) {
|
||||
void *p = malloc(size);
|
||||
if (!p)
|
||||
throw bad_alloc();
|
||||
return p;
|
||||
}
|
||||
|
||||
void operator delete(void *p) {
|
||||
void operator delete(void *p) throw() {
|
||||
if (p) free(p);
|
||||
}
|
||||
|
||||
void operator delete [](void *p) {
|
||||
void operator delete [](void *p) throw() {
|
||||
if (p) free(p);
|
||||
}
|
||||
|
||||
|
@ -695,7 +695,7 @@ string get_executable_path(const char* argv0) {
|
|||
char* pathtmp;
|
||||
char* path = NULL;
|
||||
size_t len = 100;
|
||||
size_t nchars;
|
||||
int nchars;
|
||||
while(1){
|
||||
pathtmp = (char*)realloc(path,len+1);
|
||||
if( pathtmp == NULL ){
|
||||
|
@ -704,11 +704,11 @@ string get_executable_path(const char* argv0) {
|
|||
}
|
||||
path = pathtmp;
|
||||
nchars = readlink("/proc/self/exe", path, len);
|
||||
if( nchars < 0 ){
|
||||
if( nchars == -1 ){
|
||||
free(path);
|
||||
return get_full_path(argv0);
|
||||
}
|
||||
if( nchars < len ){
|
||||
if( nchars < (int) len ){
|
||||
path[nchars] = '\0';
|
||||
string result(path);
|
||||
free(path);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue