diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-12-09 16:10:38 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-12-09 16:10:38 +0100 |
commit | 7f12ab2723ed2da74bbe5cdcfedb0e9fc1061b3c (patch) | |
tree | beb3c788190edd63478e4cff41815ab2ed3e190a | |
parent | dfd30fb55d133a49d1528f67eb60e5a4a3184c2c (diff) |
Handle unaligned read in fsadump.
-rw-r--r-- | fsa/src/apps/fsadump/fsadump.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/fsa/src/apps/fsadump/fsadump.cpp b/fsa/src/apps/fsadump/fsadump.cpp index a32cce4ed7d..398324316ec 100644 --- a/fsa/src/apps/fsadump/fsadump.cpp +++ b/fsa/src/apps/fsadump/fsadump.cpp @@ -62,6 +62,20 @@ void version() std::cout << std::endl; } + +namespace { + +template <typename T> +T +read_unaligned(const void* data) +{ + T value; + memcpy(&value, data, sizeof(T)); + return value; +} + +} + int main(int argc, char** argv) { FSA_Input_Format format = OUTPUT_UNDEF; @@ -154,11 +168,11 @@ int main(int argc, char** argv) break; case 2: case 3: - num_meta = *((const uint16_t*)(const void *)it->data()); + num_meta = read_unaligned<uint16_t>(it->data()); break; case 4: default: - num_meta = *((const uint32_t*)(const void *)it->data()); + num_meta = read_unaligned<uint32_t>(it->data()); break; } std::cout << it->str() << '\t' << num_meta << '\n'; |