diff options
Diffstat (limited to 'archival')
-rw-r--r-- | archival/libunarchive/get_header_tar.c | 10 | ||||
-rw-r--r-- | archival/lzop.c | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c index 982404d14..d5b86ff5c 100644 --- a/archival/libunarchive/get_header_tar.c +++ b/archival/libunarchive/get_header_tar.c @@ -14,6 +14,10 @@ #include "libbb.h" #include "unarchive.h" +typedef uint32_t aliased_uint32_t FIX_ALIASING; +typedef off_t aliased_off_t FIX_ALIASING; + + /* * GNU tar uses "base-256 encoding" for very large numbers (>8 billion). * Encoding is binary, with highest bit always set as a marker @@ -68,10 +72,10 @@ static off_t getBase256_len12(const char *str) * and fetch it in one go: */ if (sizeof(off_t) == 8) { - value = *(off_t*)str; + value = *(aliased_off_t*)str; value = SWAP_BE64(value); } else if (sizeof(off_t) == 4) { - value = *(off_t*)str; + value = *(aliased_off_t*)str; value = SWAP_BE32(value); } else { value = 0; @@ -156,7 +160,7 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle) #if ENABLE_DESKTOP || ENABLE_FEATURE_TAR_AUTODETECT /* to prevent misdetection of bz2 sig */ - *(uint32_t*)(&tar) = 0; + *(aliased_uint32_t*)&tar = 0; i = full_read(archive_handle->src_fd, &tar, 512); /* If GNU tar sees EOF in above read, it says: * "tar: A lone zero block at N", where N = kilobyte diff --git a/archival/lzop.c b/archival/lzop.c index a752a9d89..0a15c51aa 100644 --- a/archival/lzop.c +++ b/archival/lzop.c @@ -396,7 +396,7 @@ struct globals { const uint32_t *lzo_crc32_table; chksum_t chksum_in; chksum_t chksum_out; -}; +} FIX_ALIASING; #define G (*(struct globals*)&bb_common_bufsiz1) #define INIT_G() do { } while (0) //#define G (*ptr_to_globals) |