aboutsummaryrefslogtreecommitdiffstats
path: root/fsa
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-12-09 16:10:38 +0100
committerTor Egge <Tor.Egge@online.no>2022-12-09 16:10:38 +0100
commit7f12ab2723ed2da74bbe5cdcfedb0e9fc1061b3c (patch)
treebeb3c788190edd63478e4cff41815ab2ed3e190a /fsa
parentdfd30fb55d133a49d1528f67eb60e5a4a3184c2c (diff)
Handle unaligned read in fsadump.
Diffstat (limited to 'fsa')
-rw-r--r--fsa/src/apps/fsadump/fsadump.cpp18
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';