mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	1998-03-01 Richard Henderson <rth@cygnus.com> * shlib-versions: Match alpha*. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Add adjtimex. * sysdeps/unix/sysv/linux/alpha/adjtimex.S: Remove. * sysdeps/alpha/fpu/bits/mathinline.h (isunordered et al): New. Implement copysign* with and without __ prefix. Likewise for fabs; use builtin for gcc 2.8. (floor*): New. (fdim*): New. * elf/elf.h (EF_SPARC*, EF_ALPHA*, SHT_ALPHA*, SHF_ALPHA*): New. (R_SPARC*): Match current v9 ABI. * sysdeps/wordsize-64/stdint.h (intptr_t): Is a long. * sunrpc/clnt_udp.c (clntudp_call): Use socklen_t. * sunrpc/pmap_rmt.c (clnt_broadcast): Likewise. * sunrpc/svc_tcp.c (svctcp_create, rendezvous_request): Likewise. * sysdeps/generic/getresgid.c: Use prototype form because of warning. * sysdeps/unix/sysv/linux/getdents.c: Likewise. * sysdeps/unix/sysv/linux/alpha/adjtime.c: Likewise. * sysdeps/unix/grantpt.c (argv): Fix consts. * sysdeps/unix/sysv/linux/getpt.c: Include <string.h> * sysdeps/unix/sysv/linux/sigaction.c: Likewise.
		
			
				
	
	
		
			202 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Copyright (C) 1998 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 Library General Public License as
 | 
						|
   published by the Free Software Foundation; either version 2 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
 | 
						|
   Library General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Library General Public
 | 
						|
   License along with the GNU C Library; see the file COPYING.LIB.  If not,
 | 
						|
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
						|
   Boston, MA 02111-1307, USA.  */
 | 
						|
 | 
						|
struct timeval32
 | 
						|
{
 | 
						|
    int tv_sec, tv_usec;
 | 
						|
};
 | 
						|
 | 
						|
struct timex32 {
 | 
						|
	unsigned int modes;	/* mode selector */
 | 
						|
	long offset;		/* time offset (usec) */
 | 
						|
	long freq;		/* frequency offset (scaled ppm) */
 | 
						|
	long maxerror;		/* maximum error (usec) */
 | 
						|
	long esterror;		/* estimated error (usec) */
 | 
						|
	int status;		/* clock command/status */
 | 
						|
	long constant;		/* pll time constant */
 | 
						|
	long precision;		/* clock precision (usec) (read only) */
 | 
						|
	long tolerance;		/* clock frequency tolerance (ppm)
 | 
						|
				 * (read only)
 | 
						|
				 */
 | 
						|
	struct timeval32 time;	/* (read only) */
 | 
						|
	long tick;		/* (modified) usecs between clock ticks */
 | 
						|
 | 
						|
	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */
 | 
						|
	long jitter;            /* pps jitter (us) (ro) */
 | 
						|
	int shift;              /* interval duration (s) (shift) (ro) */
 | 
						|
	long stabil;            /* pps stability (scaled ppm) (ro) */
 | 
						|
	long jitcnt;            /* jitter limit exceeded (ro) */
 | 
						|
	long calcnt;            /* calibration intervals (ro) */
 | 
						|
	long errcnt;            /* calibration errors (ro) */
 | 
						|
	long stbcnt;            /* stability limit exceeded (ro) */
 | 
						|
 | 
						|
	int  :32; int  :32; int  :32; int  :32;
 | 
						|
	int  :32; int  :32; int  :32; int  :32;
 | 
						|
	int  :32; int  :32; int  :32; int  :32;
 | 
						|
};
 | 
						|
 | 
						|
#define TIMEVAL		timeval32
 | 
						|
#define TIMEX		timex32
 | 
						|
#define ADJTIME		__adjtime_tv32
 | 
						|
#define ADJTIMEX(x)	__adjtimex_tv32 (x)
 | 
						|
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
 | 
						|
#define LINKAGE
 | 
						|
#else
 | 
						|
#define LINKAGE		static
 | 
						|
#endif
 | 
						|
 | 
						|
LINKAGE int ADJTIME (const struct TIMEVAL *itv, struct TIMEVAL *otv);
 | 
						|
extern int ADJTIMEX (struct TIMEX *);
 | 
						|
 | 
						|
#include <sysdeps/unix/sysv/linux/adjtime.c>
 | 
						|
 | 
						|
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
 | 
						|
symbol_version (__adjtime_tv32, adjtime, GLIBC_2.0);
 | 
						|
#endif
 | 
						|
 | 
						|
#undef TIMEVAL
 | 
						|
#define TIMEVAL		timeval
 | 
						|
#undef TIMEX
 | 
						|
#define TIMEX		timex
 | 
						|
#undef ADJTIME
 | 
						|
#define ADJTIME		__adjtime_tv64
 | 
						|
#undef ADJTIMEX
 | 
						|
#define ADJTIMEX(x)	__syscall_adjtimex_tv64 (x)
 | 
						|
#undef LINKAGE
 | 
						|
#define LINKAGE		static
 | 
						|
 | 
						|
LINKAGE int ADJTIME (const struct TIMEVAL *itv, struct TIMEVAL *otv);
 | 
						|
extern int ADJTIMEX (struct TIMEX *);
 | 
						|
 | 
						|
#include <sysdeps/unix/sysv/linux/adjtime.c>
 | 
						|
static int missing_adjtimex = 0;
 | 
						|
 | 
						|
int
 | 
						|
__adjtime (itv, otv)
 | 
						|
     const struct timeval *itv;
 | 
						|
     struct timeval *otv;
 | 
						|
{
 | 
						|
  int ret;
 | 
						|
 | 
						|
  if (!missing_adjtimex)
 | 
						|
    {
 | 
						|
      ret = __adjtime_tv64 (itv, otv);
 | 
						|
      if (ret && errno == ENOSYS)
 | 
						|
	missing_adjtimex = 1;
 | 
						|
    }
 | 
						|
 | 
						|
  if (missing_adjtimex)
 | 
						|
    {
 | 
						|
      struct timeval32 itv32, otv32;
 | 
						|
 | 
						|
      itv32.tv_sec = itv->tv_sec;
 | 
						|
      itv32.tv_usec = itv->tv_usec;
 | 
						|
      ret = __adjtime_tv32 (&itv32, &otv32);
 | 
						|
      if (ret == 0)
 | 
						|
	{
 | 
						|
	  otv->tv_sec = otv32.tv_sec;
 | 
						|
	  otv->tv_usec = otv32.tv_usec;
 | 
						|
	}
 | 
						|
    }
 | 
						|
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
 | 
						|
default_symbol_version (__adjtime, adjtime, GLIBC_2.1);
 | 
						|
#else
 | 
						|
weak_alias (__adjtime, adjtime);
 | 
						|
#endif
 | 
						|
 | 
						|
extern int __syscall_adjtimex_tv64 (struct timex *tx);
 | 
						|
 | 
						|
int
 | 
						|
__adjtimex_tv64 (struct timex *tx)
 | 
						|
{
 | 
						|
  int ret;
 | 
						|
 | 
						|
  if (!missing_adjtimex)
 | 
						|
   {
 | 
						|
     ret = __syscall_adjtimex_tv64 (tx);
 | 
						|
     if (ret && errno == ENOSYS)
 | 
						|
	missing_adjtimex = 1;
 | 
						|
   }
 | 
						|
 | 
						|
  if (missing_adjtimex)
 | 
						|
    {
 | 
						|
      struct timex32 tx32;
 | 
						|
 | 
						|
      tx32.modes = tx->modes;
 | 
						|
      tx32.offset = tx->offset;
 | 
						|
      tx32.freq = tx->freq;
 | 
						|
      tx32.maxerror = tx->maxerror;
 | 
						|
      tx32.esterror = tx->esterror;
 | 
						|
      tx32.status = tx->status;
 | 
						|
      tx32.constant = tx->constant;
 | 
						|
      tx32.precision = tx->precision;
 | 
						|
      tx32.tolerance = tx->tolerance;
 | 
						|
      tx32.time.tv_sec = tx->time.tv_sec;
 | 
						|
      tx32.time.tv_sec = tx->time.tv_usec;
 | 
						|
      tx32.tick = tx->tick;
 | 
						|
      tx32.ppsfreq = tx->ppsfreq;
 | 
						|
      tx32.jitter = tx->jitter;
 | 
						|
      tx32.shift = tx->shift;
 | 
						|
      tx32.stabil = tx->stabil;
 | 
						|
      tx32.jitcnt = tx->jitcnt;
 | 
						|
      tx32.calcnt = tx->calcnt;
 | 
						|
      tx32.errcnt = tx->errcnt;
 | 
						|
      tx32.stbcnt = tx->stbcnt;
 | 
						|
 | 
						|
      ret = __adjtimex_tv32 (&tx32);
 | 
						|
      if (ret == 0)
 | 
						|
	{
 | 
						|
	  tx->modes = tx32.modes;
 | 
						|
	  tx->offset = tx32.offset;
 | 
						|
	  tx->freq = tx32.freq;
 | 
						|
	  tx->maxerror = tx32.maxerror;
 | 
						|
	  tx->esterror = tx32.esterror;
 | 
						|
	  tx->status = tx32.status;
 | 
						|
	  tx->constant = tx32.constant;
 | 
						|
	  tx->precision = tx32.precision;
 | 
						|
	  tx->tolerance = tx32.tolerance;
 | 
						|
	  tx->time.tv_sec = tx32.time.tv_sec;
 | 
						|
	  tx->time.tv_usec = tx32.time.tv_sec;
 | 
						|
	  tx->tick = tx32.tick;
 | 
						|
	  tx->ppsfreq = tx32.ppsfreq;
 | 
						|
	  tx->jitter = tx32.jitter;
 | 
						|
	  tx->shift = tx32.shift;
 | 
						|
	  tx->stabil = tx32.stabil;
 | 
						|
	  tx->jitcnt = tx32.jitcnt;
 | 
						|
	  tx->calcnt = tx32.calcnt;
 | 
						|
	  tx->errcnt = tx32.errcnt;
 | 
						|
	  tx->stbcnt = tx32.stbcnt;
 | 
						|
	}
 | 
						|
    }
 | 
						|
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
 | 
						|
strong_alias (__adjtimex_tv64, __adjtimex_tv64p);
 | 
						|
default_symbol_version (__adjtimex_tv64, __adjtimex, GLIBC_2.1);
 | 
						|
default_symbol_version (__adjtimex_tv64p, adjtimex, GLIBC_2.1);
 | 
						|
#else
 | 
						|
weak_alias (__adjtimex_tv64, __adjtimex);
 | 
						|
weak_alias (__adjtimex_tv64, adjtimex);
 | 
						|
#endif
 |