diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/timer_settime.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/timer_settime.c | 73 |
1 files changed, 60 insertions, 13 deletions
diff --git a/sysdeps/unix/sysv/linux/timer_settime.c b/sysdeps/unix/sysv/linux/timer_settime.c index f8bb16a4c2..8884abfdc6 100644 --- a/sysdeps/unix/sysv/linux/timer_settime.c +++ b/sysdeps/unix/sysv/linux/timer_settime.c @@ -22,27 +22,29 @@ #include <sysdep.h> #include <kernel-features.h> #include "kernel-posix-timers.h" +#include <shlib-compat.h> +#if !TIMER_T_WAS_INT_COMPAT int -__timer_settime64 (timer_t timerid, int flags, +___timer_settime64 (timer_t timerid, int flags, const struct __itimerspec64 *value, struct __itimerspec64 *ovalue) { kernel_timer_t ktimerid = timerid_to_kernel_timer (timerid); -#ifdef __ASSUME_TIME64_SYSCALLS -# ifndef __NR_timer_settime64 -# define __NR_timer_settime64 __NR_timer_settime -# endif +# ifdef __ASSUME_TIME64_SYSCALLS +# ifndef __NR_timer_settime64 +# define __NR_timer_settime64 __NR_timer_settime +# endif return INLINE_SYSCALL_CALL (timer_settime64, ktimerid, flags, value, ovalue); -#else -# ifdef __NR_timer_settime64 +# else +# ifdef __NR_timer_settime64 int ret = INLINE_SYSCALL_CALL (timer_settime64, ktimerid, flags, value, ovalue); if (ret == 0 || errno != ENOSYS) return ret; -# endif +# endif struct itimerspec its32, oits32; if (! in_time_t_range ((value->it_value).tv_sec) @@ -64,11 +66,18 @@ __timer_settime64 (timer_t timerid, int flags, } return retval; -#endif +# endif } -#if __TIMESIZE != 64 -librt_hidden_def (__timer_settime64) +# if __TIMESIZE == 64 +versioned_symbol (libc, ___timer_settime64, timer_settime, GLIBC_2_34); +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_34) +compat_symbol (librt, ___timer_settime64, timer_settime, GLIBC_2_2); +# endif + +#else /* __TIMESIZE != 64 */ +libc_hidden_ver (___timer_settime64, __timer_settime64) +versioned_symbol (libc, ___timer_settime64, __timer_settime64, GLIBC_2_34); int __timer_settime (timer_t timerid, int flags, const struct itimerspec *value, @@ -89,5 +98,43 @@ __timer_settime (timer_t timerid, int flags, const struct itimerspec *value, return retval; } -#endif -weak_alias (__timer_settime, timer_settime) +versioned_symbol (libc, __timer_settime, timer_settime, GLIBC_2_34); + +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_34) +compat_symbol (librt, __timer_settime, timer_settime, GLIBC_2_2); +# endif +# endif /* __TIMESIZE != 64 */ + +#else /* TIMER_T_WAS_INT_COMPAT */ + +extern __typeof (timer_settime) __timer_settime_new; +libc_hidden_proto (__timer_settime_new) + +int +___timer_settime_new (timer_t timerid, int flags, + const struct itimerspec *value, + struct itimerspec *ovalue) +{ + kernel_timer_t ktimerid = timerid_to_kernel_timer (timerid); + + return INLINE_SYSCALL_CALL (timer_settime, ktimerid, flags, value, ovalue); +} +versioned_symbol (libc, ___timer_settime_new, timer_settime, GLIBC_2_34); +libc_hidden_ver (___timer_settime_new, __timer_settime_new) + +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_3, GLIBC_2_34) +compat_symbol (librt, ___timer_settime_new, timer_settime, GLIBC_2_3_3); +# endif + +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3) +int +__timer_settime_old (int timerid, int flags, const struct itimerspec *value, + struct itimerspec *ovalue) +{ + return __timer_settime_new (__timer_compat_list[timerid], flags, + value, ovalue); +} +compat_symbol (librt, __timer_settime_old, timer_settime, GLIBC_2_2); +# endif + +#endif /* TIMER_T_WAS_INT_COMPAT */ |