5 #define IS32BIT(x) !((x)+0x80000000ULL>>32)
6 #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63))
8 int mq_timedsend(mqd_t mqd
, const char *msg
, size_t len
, unsigned prio
, const struct timespec
*at
)
10 #ifdef SYS_mq_timedsend_time64
11 time_t s
= at
? at
->tv_sec
: 0;
12 long ns
= at
? at
->tv_nsec
: 0;
14 if (SYS_mq_timedsend
== SYS_mq_timedsend_time64
|| !IS32BIT(s
))
15 r
= __syscall_cp(SYS_mq_timedsend_time64
, mqd
, msg
, len
, prio
,
16 at
? ((long long []){at
->tv_sec
, at
->tv_nsec
}) : 0);
17 if (SYS_mq_timedsend
== SYS_mq_timedsend_time64
|| r
!= -ENOSYS
)
18 return __syscall_ret(r
);
19 return syscall_cp(SYS_mq_timedsend
, mqd
, msg
, len
, prio
,
20 at
? ((long[]){CLAMP(s
), ns
}) : 0);
22 return syscall_cp(SYS_mq_timedsend
, mqd
, msg
, len
, prio
, at
);