From d36e5bf83b601da15b2b4ab0cc225d3fb93ef489 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 23 Dec 2024 07:05:06 +0000 Subject: mq: add x32-specific implementations to work around mismatched kernel ABI the kernel mq_attr structure has 8 64-bit longs instead of 8 32-bit longs. it's not clear that this is the nicest way to implement the fix, but the concept (translation) is right, and the details can be changed later if desired. --- src/mq/x32/mq_setattr.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/mq/x32/mq_setattr.c (limited to 'src/mq/x32/mq_setattr.c') diff --git a/src/mq/x32/mq_setattr.c b/src/mq/x32/mq_setattr.c new file mode 100644 index 00000000..0c631175 --- /dev/null +++ b/src/mq/x32/mq_setattr.c @@ -0,0 +1,14 @@ +#include +#include "syscall.h" + +int mq_setattr(mqd_t mqd, const struct mq_attr *restrict new, struct mq_attr *restrict old) +{ + long long attr[8]; + if (new) for (int i=0; i<8; i++) + attr[i] = *(long *)((char *)new + i*sizeof(long)); + int ret = __syscall(SYS_mq_getsetattr, mqd, new?attr:0, old?attr:0); + if (ret < 0) return __syscall_ret(ret); + if (old) for (int i=0; i<8; i++) + *(long *)((char *)old + i*sizeof(long)) = attr[i]; + return 0; +} -- cgit v1.2.1