12-cast-filetime.patch 3.6 KB

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