1Index: SCons/Config/gnu
2--- ../release/nsis-2.17-src/SCons/Config/gnu	2006-04-28 08:54:41.000000000 -0700
3+++ SCons/Config/gnu	2006-08-07 18:49:47.000000000 -0700
4@@ -65,7 +65,7 @@
5 cross_env(stub_env)
6
7 if not defenv['DEBUG']:
8-	stub_env.Append(CCFLAGS = '-Os')                # optimize for size
9+	stub_env.Append(CCFLAGS = '-Os -fno-strict-aliasing')                # optimize for size
10 stub_env.Append(CCFLAGS = '-Wall')                # all warnings
11 stub_env.Append(CCFLAGS = '-x c')                 # force compile as c
12
13@@ -82,8 +82,8 @@
14 makensis_env = defenv.Copy()
15
16 if not defenv['DEBUG']:
17-	makensis_env.Append(CCFLAGS = '-O2')            # optimize
18+	makensis_env.Append(CCFLAGS = '-O2 -fno-strict-aliasing')            # optimize
19 makensis_env.Append(CCFLAGS = '-Wall')            # all warnings
20
21 conf = FlagsConfigure(makensis_env)
22 conf.CheckLinkFlag('$MAP_FLAG')                   # generate map file
23@@ -97,7 +97,7 @@
24 cross_env(plugin_env)
25
26 if not defenv['DEBUG']:
27-	plugin_env.Append(CCFLAGS = '-Os')              # optimize for size
28+	plugin_env.Append(CCFLAGS = '-Os -fno-strict-aliasing')              # optimize for size
29 plugin_env.Append(CCFLAGS = '-Wall')              # level 3 warnings
30
31 if not defenv['DEBUG']:
32@@ -111,7 +111,7 @@
33 cp_util_env = defenv.Copy()
34
35 if not defenv['DEBUG']:
36-	cp_util_env.Append(CCFLAGS = '-O2')             # optimize
37+	cp_util_env.Append(CCFLAGS = '-O2 -fno-strict-aliasing')             # optimize
38 cp_util_env.Append(CCFLAGS = '-Wall')             # all warnings
39
40 conf = FlagsConfigure(cp_util_env)
41Index: Source/build.cpp
42--- ../release/nsis-2.17-src/Source/build.cpp	2006-04-14 03:05:01.000000000 -0700
43+++ ./Source/build.cpp	2006-07-31 13:26:38.000000000 -0700
44@@ -2384,7 +2384,7 @@
45         return PS_ERROR;
46       }
47 #ifdef NSIS_CONFIG_CRC_SUPPORT
48-      crc_writer_sink crc_sink((unsigned long *) &crc);
49+      crc_writer_sink crc_sink((unsigned int *) &crc);
50       firstheader_writer w(&crc_sink);
51       w.write(&fh);
52
53Index: Source/build.h
54--- ../release/nsis-2.17-src/Source/build.h	2005-04-02 04:04:06.000000000 -0800
55+++ ./Source/build.h	2006-07-31 13:28:44.000000000 -0700
56@@ -38,7 +38,7 @@
57 #ifdef NSIS_CONFIG_CRC_SUPPORT
58 extern "C"
59 {
60-  unsigned long NSISCALL CRC32(unsigned long crc, const unsigned char *buf, unsigned int len);
61+  unsigned int NSISCALL CRC32(unsigned int crc, const unsigned char *buf, unsigned int len);
62 };
63 #endif
64
65Index: Source/crc32.c
66--- ../release/nsis-2.17-src/Source/crc32.c	2004-03-12 12:43:54.000000000 -0800
67+++ ./Source/crc32.c	2006-07-31 13:27:12.000000000 -0700
68@@ -3,18 +3,18 @@
69 #ifdef NSIS_CONFIG_CRC_SUPPORT
70
71 // this is based on the (slow,small) CRC32 implementation from zlib.
72-unsigned long NSISCALL CRC32(unsigned long crc, const unsigned char *buf, unsigned int len)
73+unsigned int NSISCALL CRC32(unsigned int crc, const unsigned char *buf, unsigned int len)
74 {
75-    static unsigned long crc_table[256];
76+    static unsigned int crc_table[256];
77
78     if (!crc_table[1])
79     {
80-      unsigned long c;
81+      unsigned int c;
82       int n, k;
83
84       for (n = 0; n < 256; n++)
85       {
86-        c = (unsigned long)n;
87+        c = (unsigned int)n;
88         for (k = 0; k < 8; k++) c = (c >> 1) ^ (c & 1 ? 0xedb88320L : 0);
89         crc_table[n] = c;
90       }
91Index: Source/DialogTemplate.cpp
92--- ../release/nsis-2.17-src/Source/DialogTemplate.cpp	2006-03-24 10:36:24.000000000 -0800
93+++ ./Source/DialogTemplate.cpp	2006-07-31 05:48:44.000000000 -0700
94@@ -93,7 +93,7 @@
95     if (IS_INTRESOURCE(x)) { \
96       *(WORD*)seeker = 0xFFFF; \
97       seeker += sizeof(WORD); \
98-      *(WORD*)seeker = ConvertEndianness(WORD(DWORD(x))); \
99+      *(WORD*)seeker = ConvertEndianness(WORD(ULONG_PTR(x))); \
100       seeker += sizeof(WORD); \
101     } \
102     else { \
103@@ -629,7 +629,7 @@
104     }
105   }
106
107-  assert((DWORD) seeker - (DWORD) pbDlg == dwSize);
108+  assert((ULONG_PTR) seeker - (ULONG_PTR) pbDlg == dwSize);
109
110   // DONE!
111   return pbDlg;
112Index: Source/exehead/fileform.c
113--- ../release/nsis-2.17-src/Source/exehead/fileform.c	2005-09-09 09:08:44.000000000 -0700
114+++ ./Source/exehead/fileform.c	2006-07-31 13:26:08.000000000 -0700
115@@ -95,7 +95,7 @@
116 static z_stream g_inflate_stream;
117 #endif
118
119-extern unsigned long NSISCALL CRC32(unsigned long crc, const unsigned char *buf, unsigned int len);
120+extern unsigned int NSISCALL CRC32(unsigned int crc, const unsigned char *buf, unsigned int len);
121
122 const char * NSISCALL loadHeaders(int cl_flags)
123 {
124Index: Source/Platform.h
125--- ../release/nsis-2.17-src/Source/Platform.h	2006-05-03 08:43:54.000000000 -0700
126+++ ./Source/Platform.h	2006-07-31 05:48:44.000000000 -0700
127@@ -16,15 +16,15 @@
128 // basic types
129 typedef unsigned char BYTE, *PBYTE, *LPBYTE;
130 typedef unsigned short WORD, *LPWORD;
131-typedef unsigned long DWORD, *LPDWORD;
132+typedef unsigned int DWORD, *LPDWORD;
133 typedef short SHORT;
134 typedef unsigned short USHORT;
135 typedef unsigned int UINT;
136 typedef unsigned int UINT32;
137 typedef int INT;
138 typedef int INT32;
139-typedef long LONG;
140-typedef unsigned long ULONG;
141+typedef int LONG;
142+typedef unsigned int ULONG;
143 typedef long long INT64, LARGE_INTEGER;
144 typedef unsigned long long UINT64, ULARGE_INTEGER;
145 typedef int BOOL, *LPBOOL;
146@@ -35,13 +35,14 @@
147 typedef const char *LPCCH, *PCSTR, *LPCSTR;
148 typedef unsigned short WCHAR, *PWCHAR, *LPWCH, *PWCH, *NWPSTR, *LPWSTR, *PWSTR;
149 typedef const unsigned short *LPCWCH, *PCWCH, *LPCWSTR, *PCWSTR;
150-typedef unsigned int UINT_PTR;
151+typedef unsigned long UINT_PTR;
152+typedef unsigned long ULONG_PTR;
153 // basic stuff
154 typedef void * HANDLE;
155-typedef unsigned long HKEY;
156+typedef unsigned int HKEY;
157 // some gdi
158-typedef unsigned long COLORREF;
159-typedef unsigned long HBRUSH;
160+typedef unsigned int COLORREF;
161+typedef unsigned int HBRUSH;
162 // bool
163 #  define FALSE 0
164 #  define TRUE 1
165@@ -129,13 +130,13 @@
166
167 #ifndef _WIN32
168 #  ifndef FIELD_OFFSET
169-#    define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f))
170+#    define FIELD_OFFSET(t,f) ((ULONG_PTR)&(((t*)0)->f))
171 #  endif
172 #  ifndef MAKEINTRESOURCE
173 #    define MAKEINTRESOURCE(i) (LPSTR)((DWORD)((WORD)(i)))
174 #  endif
175 #  ifndef IMAGE_FIRST_SECTION
176-#    define IMAGE_FIRST_SECTION(h) ( PIMAGE_SECTION_HEADER( (DWORD) h + \
177+#    define IMAGE_FIRST_SECTION(h) ( PIMAGE_SECTION_HEADER( (ULONG_PTR) h + \
178                                      FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) + \
179                                      FIX_ENDIAN_INT16(PIMAGE_NT_HEADERS(h)->FileHeader.SizeOfOptionalHeader) ) )
180 #  endif
181@@ -166,9 +167,9 @@
182 #  define FOF_NOERRORUI 0x0400
183 #endif
184
185-#ifndef ULONG_PTR
186-#  define ULONG_PTR DWORD
187-#endif
188+//#ifndef ULONG_PTR
189+//#  define ULONG_PTR ULONG
190+//#endif
191
192 #ifndef IDC_HAND
193 #  define IDC_HAND MAKEINTRESOURCE(32649)
194Index: Source/Plugins.cpp
195--- ../release/nsis-2.17-src/Source/Plugins.cpp	2006-04-05 11:42:12.000000000 -0700
196+++ ./Source/Plugins.cpp	2006-07-31 06:50:08.000000000 -0700
197@@ -120,8 +120,8 @@
198         DWORD prd = FIX_ENDIAN_INT32(sections[i].PointerToRawData);
199         PIMAGE_EXPORT_DIRECTORY exports = PIMAGE_EXPORT_DIRECTORY(&dlldata[0] + prd + ExportDirVA - va);
200         DWORD na = FIX_ENDIAN_INT32(exports->AddressOfNames);
201-        unsigned long *names = (unsigned long*)((unsigned long) exports + (char *) na - ExportDirVA);
202-        for (unsigned long j = 0; j < FIX_ENDIAN_INT32(exports->NumberOfNames); j++)
203+        unsigned int *names = (unsigned int*)((unsigned long) exports + (char *) na - ExportDirVA);
204+        for (unsigned int j = 0; j < FIX_ENDIAN_INT32(exports->NumberOfNames); j++)
205         {
206           const string name = string((char*)exports + FIX_ENDIAN_INT32(names[j]) - ExportDirVA);
207           const string signature = dllName + "::" + name;
208Index: Source/ResourceEditor.cpp
209--- ../release/nsis-2.17-src/Source/ResourceEditor.cpp	2006-04-05 11:40:09.000000000 -0700
210+++ ./Source/ResourceEditor.cpp	2006-07-31 05:48:44.000000000 -0700
211@@ -545,7 +545,7 @@
212     rdDir.NumberOfIdEntries = ConvertEndianness(rdDir.NumberOfIdEntries);
213
214     CopyMemory(seeker, &rdDir, sizeof(IMAGE_RESOURCE_DIRECTORY));
215-    crd->m_dwWrittenAt = DWORD(seeker);
216+    crd->m_dwWrittenAt = ULONG_PTR(seeker);
217     seeker += sizeof(IMAGE_RESOURCE_DIRECTORY);
218
219     for (int i = 0; i < crd->CountEntries(); i++) {
220@@ -566,7 +566,7 @@
221       rDirE.NameString.NameIsString = (crd->GetEntry(i)->HasName()) ? 1 : 0;
222
223       CopyMemory(seeker, &rDirE, sizeof(MY_IMAGE_RESOURCE_DIRECTORY_ENTRY));
224-      crd->GetEntry(i)->m_dwWrittenAt = DWORD(seeker);
225+      crd->GetEntry(i)->m_dwWrittenAt = ULONG_PTR(seeker);
226       seeker += sizeof(MY_IMAGE_RESOURCE_DIRECTORY_ENTRY);
227     }
228     qDirs.pop();
229@@ -582,7 +582,7 @@
230     rDataE.Size = ConvertEndianness(cRDataE->GetSize());
231
232     CopyMemory(seeker, &rDataE, sizeof(IMAGE_RESOURCE_DATA_ENTRY));
233-    cRDataE->m_dwWrittenAt = DWORD(seeker);
234+    cRDataE->m_dwWrittenAt = ULONG_PTR(seeker);
235     seeker += sizeof(IMAGE_RESOURCE_DATA_ENTRY);
236
237     qDataEntries.pop();
238@@ -594,7 +594,7 @@
239   while (!qStrings.empty()) {
240     CResourceDirectoryEntry* cRDirE = qStrings.front();
241
242-    PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(cRDirE->m_dwWrittenAt)->NameString.NameOffset = ConvertEndianness(DWORD(seeker) - DWORD(pbRsrcSec));
243+    PMY_IMAGE_RESOURCE_DIRECTORY_ENTRY(cRDirE->m_dwWrittenAt)->NameString.NameOffset = ConvertEndianness(DWORD(ULONG_PTR(seeker) - ULONG_PTR(pbRsrcSec)));
244
245     char* szName = cRDirE->GetName();
246     WORD iLen = strlen(szName) + 1;
247@@ -626,7 +626,7 @@
248   while (!qDataEntries2.empty()) {
249     CResourceDataEntry* cRDataE = qDataEntries2.front();
250     CopyMemory(seeker, cRDataE->GetData(), cRDataE->GetSize());
251-    PIMAGE_RESOURCE_DATA_ENTRY(cRDataE->m_dwWrittenAt)->OffsetToData = ConvertEndianness(seeker - pbRsrcSec + m_dwResourceSectionVA);
252+    PIMAGE_RESOURCE_DATA_ENTRY(cRDataE->m_dwWrittenAt)->OffsetToData = ConvertEndianness(DWORD(seeker - pbRsrcSec + m_dwResourceSectionVA));
253
254     seeker += RALIGN(cRDataE->GetSize(), 8);
255
256@@ -636,7 +636,7 @@
257   /*
258    * Set all of the directory entries offsets.
259    */
260-  SetOffsets(m_cResDir, DWORD(pbRsrcSec));
261+  SetOffsets(m_cResDir, ULONG_PTR(pbRsrcSec));
262 }
263
264 // Sets the offsets in directory entries
265@@ -650,7 +650,7 @@
266       SetOffsets(resDir->GetEntry(i)->GetSubDirectory(), newResDirAt);
267     }
268     else {
269-      rde->OffsetToData = ConvertEndianness(resDir->GetEntry(i)->GetDataEntry()->m_dwWrittenAt - newResDirAt);
270+      rde->OffsetToData = ConvertEndianness(DWORD(resDir->GetEntry(i)->GetDataEntry()->m_dwWrittenAt - newResDirAt));
271     }
272   }
273 }
274@@ -758,7 +758,7 @@
275 // Returns -1 if can not be found
276 int CResourceDirectory::Find(char* szName) {
277   if (IS_INTRESOURCE(szName))
278-    return Find((WORD) (DWORD) szName);
279+    return Find((WORD) (ULONG_PTR) szName);
280   else
281     if (szName[0] == '#')
282       return Find(WORD(atoi(szName + 1)));
283@@ -836,7 +836,7 @@
284   if (IS_INTRESOURCE(szName)) {
285     m_bHasName = false;
286     m_szName = 0;
287-    m_wId = (WORD) (DWORD) szName;
288+    m_wId = (WORD) (ULONG_PTR) szName;
289   }
290   else {
291     m_bHasName = true;
292@@ -851,7 +851,7 @@
293   if (IS_INTRESOURCE(szName)) {
294     m_bHasName = false;
295     m_szName = 0;
296-    m_wId = (WORD) (DWORD) szName;
297+    m_wId = (WORD) (ULONG_PTR) szName;
298   }
299   else {
300     m_bHasName = true;
301Index: Source/ResourceEditor.h
302--- ../release/nsis-2.17-src/Source/ResourceEditor.h	2006-04-28 08:54:42.000000000 -0700
303+++ ./Source/ResourceEditor.h	2006-07-31 05:48:44.000000000 -0700
304@@ -173,7 +173,7 @@
305
306   void Destroy();
307
308-  DWORD m_dwWrittenAt;
309+  ULONG_PTR m_dwWrittenAt;
310
311 private:
312   IMAGE_RESOURCE_DIRECTORY m_rdDir;
313@@ -197,7 +197,7 @@
314
315   CResourceDataEntry* GetDataEntry();
316
317-  DWORD m_dwWrittenAt;
318+  ULONG_PTR m_dwWrittenAt;
319
320 private:
321   bool m_bHasName;
322@@ -226,7 +226,7 @@
323   DWORD GetSize();
324   DWORD GetCodePage();
325
326-  DWORD m_dwWrittenAt;
327+  ULONG_PTR m_dwWrittenAt;
328
329 private:
330   BYTE* m_pbData;
331Index: Source/script.cpp
332--- ../release/nsis-2.17-src/Source/script.cpp	2006-03-28 10:22:34.000000000 -0800
333+++ ./Source/script.cpp	2006-07-31 20:56:03.000000000 -0700
334@@ -4748,8 +4748,8 @@
335           {
336             struct
337             {
338-              long l;
339-              long h;
340+              int l;
341+              int h;
342             } words;
343             long long ll;
344           };
345@@ -6075,8 +6075,8 @@
346         {
347           struct
348           {
349-            long l;
350-            long h;
351+            int l;
352+            int h;
353           } words;
354           long long ll;
355         };
356Index: Source/util.cpp
357--- ../release/nsis-2.17-src/Source/util.cpp	2006-04-28 08:54:42.000000000 -0700
358+++ ./Source/util.cpp	2006-07-31 05:48:44.000000000 -0700
359@@ -312,7 +312,7 @@
360   FIX_ENDIAN_INT32_INPLACE(rdEntry.OffsetToData);
361   MY_ASSERT(!rdEntry.DirectoryOffset.DataIsDirectory, "bad resource directory");
362
363-  PRESOURCE_DIRECTORY rdIcons = PRESOURCE_DIRECTORY(rdEntry.DirectoryOffset.OffsetToDirectory + DWORD(rdRoot));
364+  PRESOURCE_DIRECTORY rdIcons = PRESOURCE_DIRECTORY(rdEntry.DirectoryOffset.OffsetToDirectory + ULONG_PTR(rdRoot));
365
366   MY_ASSERT((size_t)rdIcons - (size_t)exeHeader > exeHeaderSize, "corrupted EXE - invalid pointer");
367
368@@ -325,7 +325,7 @@
369     FIX_ENDIAN_INT32_INPLACE(icoEntry.OffsetToData);
370
371     MY_ASSERT(!icoEntry.DirectoryOffset.DataIsDirectory, "bad resource directory");
372-    PRESOURCE_DIRECTORY rd = PRESOURCE_DIRECTORY(icoEntry.DirectoryOffset.OffsetToDirectory + DWORD(rdRoot));
373+    PRESOURCE_DIRECTORY rd = PRESOURCE_DIRECTORY(icoEntry.DirectoryOffset.OffsetToDirectory + ULONG_PTR(rdRoot));
374
375     MY_ASSERT((size_t)rd - (size_t)exeHeader > exeHeaderSize, "corrupted EXE - invalid pointer");
376
377@@ -334,7 +334,7 @@
378
379     MY_ASSERT(datEntry.DirectoryOffset.DataIsDirectory, "bad resource directory");
380
381-    PIMAGE_RESOURCE_DATA_ENTRY rde = PIMAGE_RESOURCE_DATA_ENTRY(datEntry.OffsetToData + DWORD(rdRoot));
382+    PIMAGE_RESOURCE_DATA_ENTRY rde = PIMAGE_RESOURCE_DATA_ENTRY(datEntry.OffsetToData + ULONG_PTR(rdRoot));
383
384     MY_ASSERT((size_t)rde - (size_t)exeHeader > exeHeaderSize, "corrupted EXE - invalid pointer");
385
386@@ -355,10 +355,10 @@
387     }
388
389     // Set offset
390-    DWORD dwOffset = FIX_ENDIAN_INT32(rde->OffsetToData) + DWORD(rdRoot) - dwResourceSectionVA - DWORD(exeHeader);
391+    DWORD dwOffset = FIX_ENDIAN_INT32(rde->OffsetToData) + ULONG_PTR(rdRoot) - dwResourceSectionVA - ULONG_PTR(exeHeader);
392     *(LPDWORD) seeker = FIX_ENDIAN_INT32(dwOffset);
393
394-    MY_ASSERT(dwOffset > exeHeaderSize || dwOffset < (DWORD)rdRoot - (DWORD)exeHeader, "invalid data offset - icon resource probably compressed");
395+    MY_ASSERT(dwOffset > exeHeaderSize || dwOffset < (ULONG_PTR)rdRoot - (ULONG_PTR)exeHeader, "invalid data offset - icon resource probably compressed");
396   }
397
398   LPBYTE seeker = uninstIconData;
399Index: Source/writer.cpp
400--- ../release/nsis-2.17-src/Source/writer.cpp	2006-03-11 03:13:07.000000000 -0800
401+++ ./Source/writer.cpp	2006-07-31 13:27:37.000000000 -0700
402@@ -64,7 +64,7 @@
403 }
404
405 #ifdef NSIS_CONFIG_CRC_SUPPORT
406-extern "C" unsigned long NSISCALL CRC32(unsigned long crc, const unsigned char *buf, unsigned int len);
407+extern "C" unsigned int NSISCALL CRC32(unsigned int crc, const unsigned char *buf, unsigned int len);
408
409 void crc_writer_sink::write_data(const void *data, const size_t size)
410 {
411Index: Source/writer.h
412--- ../release/nsis-2.17-src/Source/writer.h	2006-03-11 03:13:07.000000000 -0800
413+++ ./Source/writer.h	2006-07-31 13:27:58.000000000 -0700
414@@ -57,12 +57,12 @@
415 #ifdef NSIS_CONFIG_CRC_SUPPORT
416 class crc_writer_sink : public writer_sink {
417 public:
418-  crc_writer_sink(unsigned long *crc) : m_crc(crc) {}
419+  crc_writer_sink(unsigned int *crc) : m_crc(crc) {}
420
421   virtual void write_data(const void *data, const size_t size);
422
423 private:
424-  unsigned long *m_crc;
425+  unsigned int *m_crc;
426
427 };
428 #endif
429