summaryrefslogtreecommitdiffstats
path: root/options/m_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'options/m_config.c')
-rw-r--r--options/m_config.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/options/m_config.c b/options/m_config.c
index 479c2e952b..14ae396d36 100644
--- a/options/m_config.c
+++ b/options/m_config.c
@@ -161,16 +161,19 @@ static int list_options(struct m_config *config)
// The memcpys are supposed to work around the strict aliasing violation,
// that would result if we just dereferenced a void** (where the void** is
-// actually casted from struct some_type* ).
+// actually casted from struct some_type* ). The dummy struct type is in
+// theory needed, because void* and struct pointers could have different
+// representations, while pointers to different struct types don't.
static void *substruct_read_ptr(const void *ptr)
{
- void *res;
- memcpy(&res, ptr, sizeof(void*));
+ struct mp_dummy_ *res;
+ memcpy(&res, ptr, sizeof(res));
return res;
}
static void substruct_write_ptr(void *ptr, void *val)
{
- memcpy(ptr, &val, sizeof(void*));
+ struct mp_dummy_ *src = val;
+ memcpy(ptr, &src, sizeof(src));
}
static void add_options(struct m_config *config,