]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/posix/clock_getres.c
Finish move of clock_* functions to libc. [BZ #24959]
[thirdparty/glibc.git] / sysdeps / posix / clock_getres.c
index 938877e937bd4f4bcff1d09be3993d568e54f28f..e529cadb1f827946a58a3c3f21104ecfd4a8503e 100644 (file)
@@ -1,5 +1,5 @@
 /* clock_getres -- Get the resolution of a POSIX clockid_t.
-   Copyright (C) 1999,2000,2001,2003,2004,2008 Free Software Foundation, Inc.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #include <unistd.h>
 #include <sys/param.h>
 #include <libc-internal.h>
-
-
-#if HP_TIMING_AVAIL
-static long int nsec;          /* Clock frequency of the processor.  */
-
-static int
-hp_timing_getres (struct timespec *res)
-{
-  if (__builtin_expect (nsec == 0, 0))
-    {
-      hp_timing_t freq;
-
-      /* This can only happen if we haven't initialized the `nsec'
-        variable yet.  Do this now.  We don't have to protect this
-        code against multiple execution since all of them should
-        lead to the same result.  */
-      freq = __get_clockfreq ();
-      if (__builtin_expect (freq == 0, 0))
-       /* Something went wrong.  */
-       return -1;
-
-      nsec = MAX (UINT64_C (1000000000) / freq, 1);
-    }
-
-  /* Fill in the values.
-     The seconds are always zero (unless we have a 1Hz machine).  */
-  res->tv_sec = 0;
-  res->tv_nsec = nsec;
-
-  return 0;
-}
-#endif
+#include <shlib-compat.h>
 
 static inline int
 realtime_getres (struct timespec *res)
 {
-  long int clk_tck = sysconf (_SC_CLK_TCK);
+  long int clk_tck = __sysconf (_SC_CLK_TCK);
 
-  if (__builtin_expect (clk_tck != -1, 1))
+  if (__glibc_likely (clk_tck != -1))
     {
       /* This implementation assumes that the realtime clock has a
         resolution higher than 1 second.  This is the case for any
@@ -76,42 +45,28 @@ realtime_getres (struct timespec *res)
 
 /* Get resolution of clock.  */
 int
-clock_getres (clockid_t clock_id, struct timespec *res)
+__clock_getres (clockid_t clock_id, struct timespec *res)
 {
   int retval = -1;
 
   switch (clock_id)
     {
-#ifdef SYSDEP_GETRES
-      SYSDEP_GETRES;
-#endif
-
-#ifndef HANDLED_REALTIME
     case CLOCK_REALTIME:
       retval = realtime_getres (res);
       break;
-#endif /* handled REALTIME */
 
     default:
-#ifdef SYSDEP_GETRES_CPU
-      SYSDEP_GETRES_CPU;
-#endif
-#if HP_TIMING_AVAIL
-      if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1))
-         == CLOCK_THREAD_CPUTIME_ID)
-       retval = hp_timing_getres (res);
-      else
-#endif
-       __set_errno (EINVAL);
+      __set_errno (EINVAL);
       break;
-
-#if HP_TIMING_AVAIL && !defined HANDLED_CPUTIME
-    case CLOCK_PROCESS_CPUTIME_ID:
-    case CLOCK_THREAD_CPUTIME_ID:
-      retval = hp_timing_getres (res);
-      break;
-#endif
     }
 
   return retval;
 }
+
+versioned_symbol (libc, __clock_getres, clock_getres, GLIBC_2_17);
+/* clock_getres moved to libc in version 2.17;
+   old binaries may expect the symbol version it had in librt.  */
+#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_17)
+strong_alias (__clock_getres, __clock_getres_2);
+compat_symbol (libc, __clock_getres_2, clock_getres, GLIBC_2_2);
+#endif