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:
kichik 2007-07-23 18:43:07 +00:00
parent 243c1b9920
commit 8e716ed458
10 changed files with 50 additions and 49 deletions

View file

@ -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);
}
}
}

View file

@ -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()

View file

@ -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);

View file

@ -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++)

View file

@ -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;

View file

@ -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();

View file

@ -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();

View file

@ -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);