]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update ntp_gettime for Linux.
authorUlrich Drepper <drepper@redhat.com>
Sun, 22 Nov 2009 19:07:04 +0000 (11:07 -0800)
committerUlrich Drepper <drepper@redhat.com>
Sun, 22 Nov 2009 19:07:04 +0000 (11:07 -0800)
The ntp_gettime implementation of NTP exports the tai field the kernel
now produces.  This requires an ABI change since the ntptimeval structure
changed.  Upstream kept the same name, there is nothing to do.  This
patch changes the ntptimeval structure but keeps the old ntp_gettime
definition.  A new ntp_gettimex function which is transparently invoked
through the old name is introduced.  This has the advantage that even
object files can remain compatible.  This wouldn't be the case if
symbol versioning would be used to overload the name ntp_gettime.

ChangeLog
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/Versions
sysdeps/unix/sysv/linux/ntp_gettime.c
sysdeps/unix/sysv/linux/ntp_gettimex.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sys/timex.h

index dd688b26982c181aed04fcf68af0611d5520fad9..4d3bd8043ba16e344278cc71cf3d76b6ac14e444 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2009-11-22  Ulrich Drepper  <drepper@redhat.com>
 
+       * sysdeps/unix/sysv/linux/ntp_gettimex.c:  New file.
+       * sysdeps/unix/sysv/linux/Makefile: Add rules to build ntp_gettimex.
+       * sysdeps/unix/sysv/linux/Versions: Export ntp_gettimex for GLIBC_2.12.
+       * sysdeps/unix/sysv/linux/sys/timex.h (ntptimeval): Add tai member and
+       some placeholders.  Redirect ntp_gettime to ntp_gettimex.
+       * sysdeps/unix/sysv/linux/ntp_gettime.c: Adjust for header change.
+
        * sysdeps/unix/sysv/linux/sys/timex.h (MOD_TAI, MOD_MICRO, MOD_NANO):
        Define.
        (STA_RONLY): Add STA_NANO, STA_MODE, and STA_CLK.
index cee5d29255d41e888cd393c70bedae5b44156d6b..91c123b2b3eb033e1a051617479b5424c49734e7 100644 (file)
@@ -84,8 +84,8 @@ endif
 $(inst_includedir)/bits/syscall.h: $(objpfx)syscall-list.h $(+force)
        $(make-target-directory)
        if test -r $@ && cmp -s $< $@; \
-        then echo 'bits/syscall.h unchanged'; \
-        else $(INSTALL_DATA) $< $@; fi
+       then echo 'bits/syscall.h unchanged'; \
+       else $(INSTALL_DATA) $< $@; fi
 
 ifndef no_deps
 # Get the generated list of dependencies (probably /usr/include/asm/unistd.h).
@@ -97,7 +97,7 @@ endif
 ifeq ($(subdir),time)
 sysdep_headers += sys/timex.h
 
-sysdep_routines += ntp_gettime
+sysdep_routines += ntp_gettime ntp_gettimex
 endif
 
 ifeq ($(subdir),socket)
index 4c9129bed314b6aaaa4989c0ff2eb30660a0e4ed..50c70513ff0c152c6bb8dbaffff7fea451f676ad 100644 (file)
@@ -144,6 +144,8 @@ libc {
   GLIBC_2.12 {
     #errlist-compat    134
     _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
+
+    ntp_gettimex;
   }
   GLIBC_PRIVATE {
     # functions used in other libraries
index f78f1682fa6b47d023237a2d851f7c8b441a9213..8bae0d9f6f8746def4a30500ad66a02beb3166b4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2002, 2009 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
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#define ntp_gettime ntp_gettime_redirect
+
 #include <sys/timex.h>
 
+#undef ntp_gettime
+
 #ifndef MOD_OFFSET
 # define modes mode
 #endif
@@ -27,8 +31,7 @@ extern int INTUSE(__adjtimex) (struct timex *__ntx);
 
 
 int
-ntp_gettime (ntv)
-     struct ntptimeval *ntv;
+ntp_gettime (struct ntptimeval *ntv)
 {
   struct timex tntx;
   int result;
diff --git a/sysdeps/unix/sysv/linux/ntp_gettimex.c b/sysdeps/unix/sysv/linux/ntp_gettimex.c
new file mode 100644 (file)
index 0000000..ed7851b
--- /dev/null
@@ -0,0 +1,46 @@
+/* Copyright (C) 1999, 2002, 2009 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sys/timex.h>
+
+#ifndef MOD_OFFSET
+# define modes mode
+#endif
+
+
+extern int INTUSE(__adjtimex) (struct timex *__ntx);
+
+
+int
+ntp_gettimex (struct ntptimeval *ntv)
+{
+  struct timex tntx;
+  int result;
+
+  tntx.modes = 0;
+  result = INTUSE(__adjtimex) (&tntx);
+  ntv->time = tntx.time;
+  ntv->maxerror = tntx.maxerror;
+  ntv->esterror = tntx.esterror;
+  ntv->tai = tntx.tai;
+  ntv->__unused1 = 0;
+  ntv->__unused2 = 0;
+  ntv->__unused3 = 0;
+  ntv->__unused4 = 0;
+  return result;
+}
index 88b87f1089eb8087c850b023c19137da312eda40..e10311f70f6a73b602bd0a43d377f975e3b31105 100644 (file)
 
 /* These definitions from linux/timex.h as of 2.6.30.  */
 
+#define NTP_API        4       /* NTP API version */
+
 struct ntptimeval
 {
   struct timeval time; /* current time (ro) */
   long int maxerror;   /* maximum error (us) (ro) */
   long int esterror;   /* estimated error (us) (ro) */
+  long int tai;                /* TAI offset (ro) */
+
+  long int __unused1;
+  long int __unused2;
+  long int __unused3;
+  long int __unused4;
 };
 
 struct timex
@@ -132,7 +140,13 @@ __BEGIN_DECLS
 extern int __adjtimex (struct timex *__ntx) __THROW;
 extern int adjtimex (struct timex *__ntx) __THROW;
 
-extern int ntp_gettime (struct ntptimeval *__ntv) __THROW;
+#if defined __GNUC__ && __GNUC__ >= 2
+extern int ntp_gettime (struct ntptimeval *__ntv)
+     __asm__ ("ntp_gettimex") __THROW;
+#else
+extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW;
+# define ntp_gettime ntp_gettimex
+#endif
 extern int ntp_adjtime (struct timex *__tntx) __THROW;
 
 __END_DECLS