1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
Author: Michael Karcher <debian@mkarcher.dialup.fu-berlin.de>
Description: Expresses access to bitfield as 32 bit variable using a union to
not violate the strict aliasing rule. The code is still inherently
non-portable.
--- unace-nonfree-2.5.orig/source/apps/exe/acefuncs/acefuncs.c
+++ unace-nonfree-2.5/source/apps/exe/acefuncs/acefuncs.c
@@ -33,8 +33,10 @@ CHAR ShortStr[80],
OutputStr[160];
PCHAR OutputFileName;
INT I;
-tBASE_DOSFUNCS_FileTime
- FileTime;
+union {
+tBASE_DOSFUNCS_FileTime Fields;
+ULONG Raw;
+} FileTime;
BASE_FILELIST_Init();
BASE_FILELIST_VolumeCreate();
@@ -79,7 +81,7 @@ tBASE_DOSFUNCS_FileTime
APPS_EXE_CONVERT_MakeStrShorter(ShortStr, OutputFileName, 35);
- *(PULONG) &FileTime = BASE_ARCBLK.Header.File.FTIME;
+ FileTime.Raw = BASE_ARCBLK.Header.File.FTIME;
BASE_STATE.SummaryUnComprBytes += BASE_ARCBLK.Header.File.SIZE;
BASE_STATE.SummaryComprBytes += BASE_ARCBLK.Header.File.PSIZE;
@@ -87,8 +89,9 @@ tBASE_DOSFUNCS_FileTime
sprintf(
OutputStr, "%2d.%2d.%2d_%2d:%2d %c%c%s %s %4d%% %c%s",
- FileTime.Day, FileTime.Month, (80 + FileTime.Year) % 100,
- FileTime.Hour, FileTime.Minute,
+ FileTime.Fields.Day, FileTime.Fields.Month,
+ (80 + FileTime.Fields.Year) % 100,
+ FileTime.Fields.Hour, FileTime.Fields.Minute,
BASE_ARCBLK.Header.File.HEAD_FLAGS & BASE_ACESTRUC_FLAG_SPLITBEFORE ?
'\x11' : ' ',
BASE_ARCBLK.Header.File.HEAD_FLAGS & BASE_ACESTRUC_FLAG_SPLITAFTER ?
--- unace-nonfree-2.5.orig/source/base/all/archives/ace/ace.c
+++ unace-nonfree-2.5/source/base/all/archives/ace/ace.c
@@ -183,13 +183,13 @@ tLFN ArchiveFileName;
break;
}
- BASE_ARCHIVES_READ.FileData[BASE_ARCHIVES_READ.FileNumber].Size =
+ BASE_ARCHIVES_READ.FileData[BASE_ARCHIVES_READ.FileNumber].Size =
BASE_ARCBLK.Header.File.SIZE;
- BASE_ARCHIVES_READ.FileData[BASE_ARCHIVES_READ.FileNumber].PackedSize =
+ BASE_ARCHIVES_READ.FileData[BASE_ARCHIVES_READ.FileNumber].PackedSize =
BASE_ARCBLK.Header.File.PSIZE;
- BASE_ARCHIVES_READ.FileData[BASE_ARCHIVES_READ.FileNumber].Time =
+ BASE_ARCHIVES_READ.FileData[BASE_ARCHIVES_READ.FileNumber].Time.Fields =
BASE_DOSFUNCS_CalcFileTime(BASE_ARCBLK.Header.File.FTIME);
Attributes |=
--- unace-nonfree-2.5.orig/source/base/all/filelist/filelist.c
+++ unace-nonfree-2.5/source/base/all/filelist/filelist.c
@@ -242,7 +242,7 @@ tBASE_LFN_DBL
{
BASE_FILELIST.ListFileData[BASE_FILELIST.Number].Size = FileSize;
- BASE_FILELIST.ListFileData[BASE_FILELIST.Number].Time =
+ BASE_FILELIST.ListFileData[BASE_FILELIST.Number].Time.Fields =
BASE_DOSFUNCS_CalcFileTime(FileTime);
if ((BASE_FILELIST.ListFileData[BASE_FILELIST.Number].Attr = Attr)
@@ -397,7 +397,7 @@ tLFN PureFileName;
if (BASE_PATHFUNC_WildCardCheck(ListPosition, PureFileName + AddDirLen))
{
BASE_FILELIST_AddFile(FileName, FileData.Size,
- *(PULONG) &FileData.Time, FileData.Attr);
+ FileData.Time.Raw, FileData.Attr);
return;
}
--- unace-nonfree-2.5.orig/source/base/all/filelist/filelist.h
+++ unace-nonfree-2.5/source/base/all/filelist/filelist.h
@@ -31,8 +31,11 @@
typedef struct
{
- tBASE_DOSFUNCS_FileTime
- Time;
+ union {
+ tBASE_DOSFUNCS_FileTime
+ Fields;
+ ULONG Raw;
+ } Time;
ULONGLONG
Size,
PackedSize;
|