diff options
Diffstat (limited to 'misc')
-rw-r--r-- | misc/Makefile | 7 | ||||
-rw-r--r-- | misc/bits/syslog-ldbl.h | 25 | ||||
-rw-r--r-- | misc/efgcvt.c | 49 | ||||
-rw-r--r-- | misc/efgcvt_r.c | 40 | ||||
-rw-r--r-- | misc/sys/cdefs.h | 26 | ||||
-rw-r--r-- | misc/sys/syslog.h | 3 | ||||
-rw-r--r-- | misc/syslog.c | 15 |
7 files changed, 137 insertions, 28 deletions
diff --git a/misc/Makefile b/misc/Makefile index 5199b6b653..dc993c4174 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1991-2002,2003,2004,2005,2006 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 @@ -25,11 +25,12 @@ subdir := misc headers := sys/uio.h bits/uio.h sys/ioctl.h bits/ioctls.h bits/ioctl-types.h \ sys/ptrace.h sys/file.h sys/dir.h sys/cdefs.h \ ar.h a.out.h libgen.h stab.h bits/stab.def sgtty.h \ - ttyent.h syslog.h sys/syslog.h paths.h sys/reboot.h \ + ttyent.h paths.h sys/reboot.h \ sys/mman.h sys/param.h fstab.h mntent.h search.h err.h error.h \ sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \ sys/select.h ustat.h sys/ustat.h bits/ustat.h sys/sysinfo.h \ - regexp.h bits/select.h bits/mman.h sys/xattr.h bits/syslog.h + regexp.h bits/select.h bits/mman.h sys/xattr.h \ + syslog.h sys/syslog.h bits/syslog.h bits/syslog-ldbl.h routines := brk sbrk sstk ioctl \ readv writev \ diff --git a/misc/bits/syslog-ldbl.h b/misc/bits/syslog-ldbl.h new file mode 100644 index 0000000000..f3867408de --- /dev/null +++ b/misc/bits/syslog-ldbl.h @@ -0,0 +1,25 @@ +/* -mlong-double-64 compatibility mode for syslog functions. + Copyright (C) 2006 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. */ + +#ifndef _SYS_SYSLOG_H +# error "Never include <bits/syslog-ldbl.h> directly; use <sys/syslog.h> instead." +#endif + +__LDBL_REDIR_DECL (syslog) +__LDBL_REDIR_DECL (vsyslog) diff --git a/misc/efgcvt.c b/misc/efgcvt.c index 915d00dfd5..ce8593e5e0 100644 --- a/misc/efgcvt.c +++ b/misc/efgcvt.c @@ -1,5 +1,6 @@ /* Compatibility functions for floating point formatting. - Copyright (C) 1995, 1996, 1997, 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1999, 2002, 2006 + 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 @@ -23,6 +24,7 @@ #include <sys/param.h> #include <float.h> #include <bits/libc-lock.h> +#include <shlib-compat.h> #ifndef FLOAT_TYPE # define FLOAT_TYPE double @@ -44,10 +46,14 @@ # error "NDIGIT_MAX must be precomputed" # define NDIGIT_MAX (lrint (ceil (M_LN2 / M_LN10 * DBL_MANT_DIG + 1.0))) # endif +#else +# define LONG_DOUBLE_CVT #endif #define APPEND(a, b) APPEND2 (a, b) #define APPEND2(a, b) a##b +#define __APPEND(a, b) __APPEND2 (a, b) +#define __APPEND2(a, b) __##a##b #define FCVT_BUFFER APPEND (FUNC_PREFIX, fcvt_buffer) @@ -60,14 +66,14 @@ static char ECVT_BUFFER[MAXDIG]; libc_freeres_ptr (static char *FCVT_BUFPTR); char * -APPEND (FUNC_PREFIX, fcvt) (value, ndigit, decpt, sign) +__APPEND (FUNC_PREFIX, fcvt) (value, ndigit, decpt, sign) FLOAT_TYPE value; int ndigit, *decpt, *sign; { if (FCVT_BUFPTR == NULL) { - if (APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, - FCVT_BUFFER, MAXDIG) != -1) + if (__APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, + FCVT_BUFFER, MAXDIG) != -1) return FCVT_BUFFER; FCVT_BUFPTR = (char *) malloc (FCVT_MAXDIG); @@ -75,26 +81,26 @@ APPEND (FUNC_PREFIX, fcvt) (value, ndigit, decpt, sign) return FCVT_BUFFER; } - (void) APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, - FCVT_BUFPTR, FCVT_MAXDIG); + (void) __APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, + FCVT_BUFPTR, FCVT_MAXDIG); return FCVT_BUFPTR; } char * -APPEND (FUNC_PREFIX, ecvt) (value, ndigit, decpt, sign) +__APPEND (FUNC_PREFIX, ecvt) (value, ndigit, decpt, sign) FLOAT_TYPE value; int ndigit, *decpt, *sign; { - (void) APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, - ECVT_BUFFER, MAXDIG); + (void) __APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, + ECVT_BUFFER, MAXDIG); return ECVT_BUFFER; } char * -APPEND (FUNC_PREFIX, gcvt) (value, ndigit, buf) +__APPEND (FUNC_PREFIX, gcvt) (value, ndigit, buf) FLOAT_TYPE value; int ndigit; char *buf; @@ -102,3 +108,26 @@ APPEND (FUNC_PREFIX, gcvt) (value, ndigit, buf) sprintf (buf, "%.*" FLOAT_FMT_FLAG "g", MIN (ndigit, NDIGIT_MAX), value); return buf; } + +#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) +# ifdef LONG_DOUBLE_CVT +# define cvt_symbol(symbol) \ + cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \ + APPEND (FUNC_PREFIX, symbol), GLIBC_2_4) +# define cvt_symbol_1(lib, local, symbol, version) \ + versioned_symbol (lib, local, symbol, version) +# else +# define cvt_symbol(symbol) \ + cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \ + APPEND (q, symbol), GLIBC_2_0); \ + strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol)) +# define cvt_symbol_1(lib, local, symbol, version) \ + compat_symbol (lib, local, symbol, version) +# endif +#else +# define cvt_symbol(symbol) \ + strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol)) +#endif +cvt_symbol(fcvt); +cvt_symbol(ecvt); +cvt_symbol(gcvt); diff --git a/misc/efgcvt_r.c b/misc/efgcvt_r.c index 69cca9038f..6206f3bde9 100644 --- a/misc/efgcvt_r.c +++ b/misc/efgcvt_r.c @@ -1,5 +1,6 @@ /* Compatibility functions for floating point formatting, reentrant versions. - Copyright (C) 1995,96,97,98,99,2000,01,02,04 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2006 + 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 @@ -25,6 +26,7 @@ #include <math.h> #include <stdlib.h> #include <sys/param.h> +#include <shlib-compat.h> #ifndef FLOAT_TYPE # define FLOAT_TYPE double @@ -55,10 +57,14 @@ # error "FLOAT_MIN_10_NORM must be precomputed" # define FLOAT_MIN_10_NORM exp10 (DBL_MIN_10_EXP) # endif +#else +# define LONG_DOUBLE_CVT #endif #define APPEND(a, b) APPEND2 (a, b) #define APPEND2(a, b) a##b +#define __APPEND(a, b) __APPEND2 (a, b) +#define __APPEND2(a, b) __##a##b #define FLOOR APPEND(floor, FLOAT_NAME_EXT) #define FABS APPEND(fabs, FLOAT_NAME_EXT) @@ -67,7 +73,7 @@ int -APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len) +__APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len) FLOAT_TYPE value; int ndigit, *decpt, *sign; char *buf; @@ -163,10 +169,9 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len) return 0; } -libc_hidden_def (APPEND (FUNC_PREFIX, fcvt_r)) int -APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len) +__APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len) FLOAT_TYPE value; int ndigit, *decpt, *sign; char *buf; @@ -229,11 +234,32 @@ APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len) *sign = isfinite (value) ? signbit (value) != 0 : 0; } else - if (APPEND (FUNC_PREFIX, fcvt_r) (value, MIN (ndigit, NDIGIT_MAX) - 1, - decpt, sign, buf, len)) + if (__APPEND (FUNC_PREFIX, fcvt_r) (value, MIN (ndigit, NDIGIT_MAX) - 1, + decpt, sign, buf, len)) return -1; *decpt += exponent; return 0; } -libc_hidden_def (APPEND (FUNC_PREFIX, ecvt_r)) + +#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) +# ifdef LONG_DOUBLE_CVT +# define cvt_symbol(symbol) \ + cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \ + APPEND (FUNC_PREFIX, symbol), GLIBC_2_4) +# define cvt_symbol_1(lib, local, symbol, version) \ + versioned_symbol (lib, local, symbol, version) +# else +# define cvt_symbol(symbol) \ + cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \ + APPEND (q, symbol), GLIBC_2_0); \ + strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol)) +# define cvt_symbol_1(lib, local, symbol, version) \ + compat_symbol (lib, local, symbol, version) +# endif +#else +# define cvt_symbol(symbol) \ + strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol)) +#endif +cvt_symbol(fcvt_r); +cvt_symbol(ecvt_r); diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index eb192cca49..a8f7d4d086 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1992-2001, 2002, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1992-2001, 2002, 2004, 2005, 2006 + 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 @@ -309,4 +310,27 @@ # endif #endif +#include <bits/wordsize.h> + +#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME (__nldbl_##name)); +# endif +#endif +#if !defined __LDBL_COMPAT || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR_DECL(name) +#endif + #endif /* sys/cdefs.h */ diff --git a/misc/sys/syslog.h b/misc/sys/syslog.h index 9de7570d8a..0bc5b8d677 100644 --- a/misc/sys/syslog.h +++ b/misc/sys/syslog.h @@ -206,6 +206,9 @@ extern void vsyslog (int __pri, __const char *__fmt, __gnuc_va_list __ap) #if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus # include <bits/syslog.h> #endif +#ifdef __LDBL_COMPAT +# include <bits/syslog-ldbl.h> +#endif __END_DECLS diff --git a/misc/syslog.c b/misc/syslog.c index 6b0e7748fe..5781b4a964 100644 --- a/misc/syslog.c +++ b/misc/syslog.c @@ -58,6 +58,8 @@ static char sccsid[] = "@(#)syslog.c 8.4 (Berkeley) 3/18/94"; #endif #include <libio/iolibio.h> +#include <math_ldbl_opt.h> + #define ftell(s) INTUSE(_IO_ftell) (s) static int LogType = SOCK_DGRAM; /* type of socket connection */ @@ -109,7 +111,7 @@ cancel_handler (void *ptr) * print message on log file; output is intended for syslogd(8). */ void -syslog(int pri, const char *fmt, ...) +__syslog(int pri, const char *fmt, ...) { va_list ap; @@ -117,7 +119,8 @@ syslog(int pri, const char *fmt, ...) __vsyslog_chk(pri, -1, fmt, ap); va_end(ap); } -libc_hidden_def (syslog) +ldbl_hidden_def (__syslog, syslog) +ldbl_strong_alias (__syslog, syslog) void __syslog_chk(int pri, int flag, const char *fmt, ...) @@ -318,14 +321,12 @@ __vsyslog_chk(int pri, int flag, const char *fmt, va_list ap) libc_hidden_def (__vsyslog_chk) void -vsyslog(pri, fmt, ap) - int pri; - register const char *fmt; - va_list ap; +__vsyslog(int pri, const char *fmt, va_list ap) { __vsyslog_chk (pri, -1, fmt, ap); } -libc_hidden_def (vsyslog) +ldbl_hidden_def (__vsyslog, vsyslog) +ldbl_strong_alias (__vsyslog, vsyslog) static struct sockaddr_un SyslogAddr; /* AF_UNIX address of local logger */ |