summaryrefslogtreecommitdiffstats
path: root/libelf/gelf_xlate.c
diff options
context:
space:
mode:
Diffstat (limited to 'libelf/gelf_xlate.c')
-rw-r--r--libelf/gelf_xlate.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libelf/gelf_xlate.c b/libelf/gelf_xlate.c
index b9e7fd65..6f8c57b7 100644
--- a/libelf/gelf_xlate.c
+++ b/libelf/gelf_xlate.c
@@ -1,5 +1,6 @@
/* Transformation functions for ELF data types.
Copyright (C) 1998,1999,2000,2002,2004,2005,2006,2007,2015 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <[email protected]>
This file is part of elfutils.
Written by Ulrich Drepper <[email protected]>, 1998.
@@ -138,9 +139,14 @@ union unaligned
int encode __attribute__ ((unused))) \
{ ElfW2(Bits, Name) *tdest = (ElfW2(Bits, Name) *) dest; \
ElfW2(Bits, Name) *tsrc = (ElfW2(Bits, Name) *) src; \
+ size_t sz = sizeof (ElfW2(Bits, Name)); \
size_t n; \
- for (n = len / sizeof (ElfW2(Bits, Name)); n > 0; ++tdest, ++tsrc, --n) {
-#define END(Bits, Name) } }
+ for (n = len / sz; n > 0; ++tdest, ++tsrc, --n) {
+#define END(Bits, Name) \
+ } \
+ if (len % sz > 0) /* Cannot convert partial structures, just copy. */ \
+ memmove (dest, src, len % sz); \
+ }
#define TYPE_EXTRA(Code)
#define TYPE_XLATE(Code) Code
#define TYPE_NAME(Type, Name) TYPE_NAME2 (Type, Name)