1 /* Copyright (C) 2003 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2003. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public License as 7 published by the Free Software Foundation; either version 2.1 of the 8 License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; see the file COPYING.LIB. If 17 not, see <http://www.gnu.org/licenses/>. */ 18 19 #include <errno.h> 20 #include <time.h> 21 #include <sysdep.h> 22 #include <bits/kernel-features.h> 23 #include "kernel-posix-timers.h" 24 25 26 #ifdef __NR_timer_getoverrun 27 # ifndef __ASSUME_POSIX_TIMERS 28 static int compat_timer_getoverrun (timer_t timerid); 29 # define timer_getoverrun static compat_timer_getoverrun 30 # include <nptl/sysdeps/pthread/timer_getoverr.c> 31 # undef timer_getoverrun 32 # endif 33 34 # ifdef timer_getoverrun_alias 35 # define timer_getoverrun timer_getoverrun_alias 36 # endif 37 38 39 int timer_getoverrun(timer_t timerid)40timer_getoverrun ( 41 timer_t timerid) 42 { 43 # undef timer_getoverrun 44 # ifndef __ASSUME_POSIX_TIMERS 45 if (__no_posix_timers >= 0) 46 # endif 47 { 48 struct timer *kt = (struct timer *) timerid; 49 50 /* Get the information from the kernel. */ 51 int res = INLINE_SYSCALL (timer_getoverrun, 1, kt->ktimerid); 52 53 # ifndef __ASSUME_POSIX_TIMERS 54 if (res != -1 || errno != ENOSYS) 55 { 56 /* We know the syscall support is available. */ 57 __no_posix_timers = 1; 58 # endif 59 return res; 60 # ifndef __ASSUME_POSIX_TIMERS 61 } 62 # endif 63 64 # ifndef __ASSUME_POSIX_TIMERS 65 __no_posix_timers = -1; 66 # endif 67 } 68 69 # ifndef __ASSUME_POSIX_TIMERS 70 return compat_timer_getoverrun (timerid); 71 # endif 72 } 73 #else 74 # ifdef timer_getoverrun_alias 75 # define timer_getoverrun timer_getoverrun_alias 76 # endif 77 /* The new system calls are not available. Use the userlevel 78 implementation. */ 79 # include <nptl/sysdeps/pthread/timer_getoverr.c> 80 #endif 81