mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Update.
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com> * stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l, strtoull_l, strtof_l, strtod_l, and strtold_l. * stdlib/stdlib.h: Add prototypes for new functions. * stdlib/strtod.c: Change for compiling as strtoX_l. * stdlib/strtol.c: Likewise. * stdlib/strtof.c: Likewise. * stdlib/strtold.c: Likewise. * stdlib/strtod_l.c: New file. * stdlib/strtof_l.c: New file. * stdlib/strtold_l.c: New file. * stdlib/strtol_l.c: New file. * stdlib/strtoul_l.c: New file. * stdlib/strtoll_l.c: New file. * stdlib/strtoull_l.c: New file. * string/Makefile (routines): Add strcasecmp_l and strncase_l. * string/string.h: Add prototypes for new functions. * sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l. * sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l. * sysdeps/generic/strcasecmp_l.c: New file. * sysdeps/generic/strncase_l.c: New file. * wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l, wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and wcsncase_l. * wcsmbs/wchar.h: Add prototypes for new functions. * wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l. * wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l. * wcsmbs/wcscasecmp_l.c: New file. * wcsmbs/wcsncase_l.c: New file. * wcsmbs/wcstof.c: Change for compiling as wcstof_l.c * wcsmbs/wcstold.c: Change for compiling as wcstold_l.c * wcsmcs/wcstod_l.c: New file. * wcsmcs/wcstof_l.c: New file. * wcsmcs/wcstold_l.c: New file. * wcsmcs/wcstol_l.c: New file. * wcsmcs/wcstoul_l.c: New file. * wcsmcs/wcstoll_l.c: New file. * wcsmcs/wcstoull_l.c: New file. * Makeconfig (binfmt-subdir): New variable. Set to `elf' if $(elf) is defined. More to come later when other binary formats are supported. * Makefile (subdirs): Remove elf. Add $(binfmt-subdir). Suggested by Philip Blundell. * stdlib/Makefile (headers): Add fmtmsg.h. (routines): Add fmtmsg. * stdlib/fmtmsg.c: New file. * stdlib/fmtmsg.h: New file. * manual/stdio.texi: Add description of fmtmsg and addseverity. * manual/examples/fmtmsgexpl.c: Example program for fmtmsg documentation. 1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk> * resolv/res_query.c (res_querydomain): Avoid potential buffer overrun. Reported by Dan A. Dickey <ddickey@transition.com>. 1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu> * elf/dl-support.c (_dl_sysdep_open_zero_fill, _dl_sysdep_read_whole_file): Moved functions to ... * elf/dl-misc.c: This new file. * sysdeps/generic/dl-sysdepio.c: Delete file and move functions... * elf/dl-misc.c: ... here. * sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill, _dl_sysdep_read_whole_file): Delete functions; they now come from elf/dl-misc.c (dl-support.c had contained identical versions). * sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions... * sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so that the regular ones in dl-misc work once we've initialized. * elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c. 1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk> * inet/Makefile (headers): Add netinet/inbits.h. * inet/netinet/in.h: New file. * sysdeps/generic/netinet/inbits.h: Likewise. * sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise. * sysdeps/generic/netinet/ip6.h: Move to... * inet/netinet/ip6.h: ... here. * sysdeps/generic/netinet/icmp6.h: Move to... * inet/netinet/icmp6.h: ... here. * sysdeps/unix/sysv/linux/netinet/in.h: Remove. * sysdeps/generic/netinet/in.h: Remove. 1997-05-22 05:40 Richard Henderson <rth@tamu.edu> * sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are not looking at the new thread-safe .plt, don't be lazy about relocs. (_dl_runtime_resolve): Fix up arithmetic for new .plt layout. (elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety. * elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let elf_machine_runtime_setup() decide if we can actually be lazy. * elf/rtld.c (_dl_start): So don't call it. * elf/dl-reloc.c (_dl_relocate_object): Likewise. * sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy. * sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise. * sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise. * sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise. * sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise. * sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update skeleton definition. 1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com> * sysdeps/i386/fpu/__math.h (logb): Remove second value placed on stack by fxtract. 1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sunrpc/rpcsvc/rusers.x: Provide and correct prototypes, add cast to (xdrproc_t) where necessary to prevent warnings. 1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions. * sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY * sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias -> * nss/XXX-lookup.c: Add missing explanation.
This commit is contained in:
125
ChangeLog
125
ChangeLog
@ -1,8 +1,127 @@
|
|||||||
|
1997-05-24 03:51 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
|
||||||
|
strtoull_l, strtof_l, strtod_l, and strtold_l.
|
||||||
|
* stdlib/stdlib.h: Add prototypes for new functions.
|
||||||
|
* stdlib/strtod.c: Change for compiling as strtoX_l.
|
||||||
|
* stdlib/strtol.c: Likewise.
|
||||||
|
* stdlib/strtof.c: Likewise.
|
||||||
|
* stdlib/strtold.c: Likewise.
|
||||||
|
* stdlib/strtod_l.c: New file.
|
||||||
|
* stdlib/strtof_l.c: New file.
|
||||||
|
* stdlib/strtold_l.c: New file.
|
||||||
|
* stdlib/strtol_l.c: New file.
|
||||||
|
* stdlib/strtoul_l.c: New file.
|
||||||
|
* stdlib/strtoll_l.c: New file.
|
||||||
|
* stdlib/strtoull_l.c: New file.
|
||||||
|
* string/Makefile (routines): Add strcasecmp_l and strncase_l.
|
||||||
|
* string/string.h: Add prototypes for new functions.
|
||||||
|
* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
|
||||||
|
* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
|
||||||
|
* sysdeps/generic/strcasecmp_l.c: New file.
|
||||||
|
* sysdeps/generic/strncase_l.c: New file.
|
||||||
|
* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
|
||||||
|
wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
|
||||||
|
wcsncase_l.
|
||||||
|
* wcsmbs/wchar.h: Add prototypes for new functions.
|
||||||
|
* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
|
||||||
|
* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
|
||||||
|
* wcsmbs/wcscasecmp_l.c: New file.
|
||||||
|
* wcsmbs/wcsncase_l.c: New file.
|
||||||
|
* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
|
||||||
|
* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
|
||||||
|
* wcsmcs/wcstod_l.c: New file.
|
||||||
|
* wcsmcs/wcstof_l.c: New file.
|
||||||
|
* wcsmcs/wcstold_l.c: New file.
|
||||||
|
* wcsmcs/wcstol_l.c: New file.
|
||||||
|
* wcsmcs/wcstoul_l.c: New file.
|
||||||
|
* wcsmcs/wcstoll_l.c: New file.
|
||||||
|
* wcsmcs/wcstoull_l.c: New file.
|
||||||
|
|
||||||
|
* Makeconfig (binfmt-subdir): New variable. Set to `elf' if
|
||||||
|
$(elf) is defined. More to come later when other binary formats
|
||||||
|
are supported.
|
||||||
|
* Makefile (subdirs): Remove elf. Add $(binfmt-subdir).
|
||||||
|
Suggested by Philip Blundell.
|
||||||
|
|
||||||
|
* stdlib/Makefile (headers): Add fmtmsg.h.
|
||||||
|
(routines): Add fmtmsg.
|
||||||
|
* stdlib/fmtmsg.c: New file.
|
||||||
|
* stdlib/fmtmsg.h: New file.
|
||||||
|
* manual/stdio.texi: Add description of fmtmsg and addseverity.
|
||||||
|
* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
1997-05-23 15:26 Philip Blundell <pjb27@cam.ac.uk>
|
||||||
|
|
||||||
|
* resolv/res_query.c (res_querydomain): Avoid potential buffer
|
||||||
|
overrun. Reported by Dan A. Dickey <ddickey@transition.com>.
|
||||||
|
|
||||||
|
1997-05-22 18:36 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* elf/dl-support.c (_dl_sysdep_open_zero_fill,
|
||||||
|
_dl_sysdep_read_whole_file): Moved functions to ...
|
||||||
|
* elf/dl-misc.c: This new file.
|
||||||
|
* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
|
||||||
|
* elf/dl-misc.c: ... here.
|
||||||
|
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
|
||||||
|
_dl_sysdep_read_whole_file): Delete functions; they now come from
|
||||||
|
elf/dl-misc.c (dl-support.c had contained identical versions).
|
||||||
|
* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
|
||||||
|
* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
|
||||||
|
that the regular ones in dl-misc work once we've initialized.
|
||||||
|
* elf/Makefile (dl-routines): Remove dl-sysdepio.c. Add dl-misc.c.
|
||||||
|
|
||||||
|
1997-05-22 21:55 Philip Blundell <pjb27@cam.ac.uk>
|
||||||
|
|
||||||
|
* inet/Makefile (headers): Add netinet/inbits.h.
|
||||||
|
* inet/netinet/in.h: New file.
|
||||||
|
* sysdeps/generic/netinet/inbits.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
|
||||||
|
* sysdeps/generic/netinet/ip6.h: Move to...
|
||||||
|
* inet/netinet/ip6.h: ... here.
|
||||||
|
* sysdeps/generic/netinet/icmp6.h: Move to...
|
||||||
|
* inet/netinet/icmp6.h: ... here.
|
||||||
|
* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
|
||||||
|
* sysdeps/generic/netinet/in.h: Remove.
|
||||||
|
|
||||||
|
1997-05-22 05:40 Richard Henderson <rth@tamu.edu>
|
||||||
|
|
||||||
|
* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
|
||||||
|
not looking at the new thread-safe .plt, don't be lazy about relocs.
|
||||||
|
(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
|
||||||
|
(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
|
||||||
|
* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
|
||||||
|
elf_machine_runtime_setup() decide if we can actually be lazy.
|
||||||
|
* elf/rtld.c (_dl_start): So don't call it.
|
||||||
|
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
|
||||||
|
* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
|
||||||
|
* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
|
||||||
|
* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
|
||||||
|
* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
|
||||||
|
* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
|
||||||
|
* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
|
||||||
|
skeleton definition.
|
||||||
|
|
||||||
|
1997-05-22 18:45 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
|
||||||
|
stack by fxtract.
|
||||||
|
|
||||||
|
1997-05-22 13:07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
|
* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
|
||||||
|
add cast to (xdrproc_t) where necessary to prevent warnings.
|
||||||
|
|
||||||
|
1997-05-22 12:18 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.
|
||||||
|
|
||||||
1997-05-22 04:09 Ulrich Drepper <drepper@cygnus.com>
|
1997-05-22 04:09 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* sunrpc/clnt_perr.c (clnt_sperrno): Change type of variable i
|
* sunrpc/clnt_perr.c (clnt_sperrno): Change type of variable i
|
||||||
to size_t to prevent warning.
|
to size_t to prevent warning.
|
||||||
* sunrpc/rpcinfo.c (get_inet_address): Use UNADDR_NONE and INADDR_ANY
|
* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
|
||||||
instead of numeric values.
|
instead of numeric values.
|
||||||
Various cleanups.
|
Various cleanups.
|
||||||
* sunrpc/xdr_mem.c: Use `const char *' instead of `const caddr_t'
|
* sunrpc/xdr_mem.c: Use `const char *' instead of `const caddr_t'
|
||||||
@ -1484,7 +1603,7 @@
|
|||||||
|
|
||||||
1997-04-03 13:37 Ulrich Drepper <drepper@cygnus.com>
|
1997-04-03 13:37 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* sysdeps/libm-ieee754/s_cexp.c: Fix type: string_alias ->
|
* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
|
||||||
strong_alias.
|
strong_alias.
|
||||||
Reported by sun <asun@zoology.washington.edu>.
|
Reported by sun <asun@zoology.washington.edu>.
|
||||||
|
|
||||||
@ -3975,7 +4094,7 @@
|
|||||||
* locale/programs/ld-time.c (time_finish): t_fmt_ampm is optional.
|
* locale/programs/ld-time.c (time_finish): t_fmt_ampm is optional.
|
||||||
Use default value instead of printing a warning.
|
Use default value instead of printing a warning.
|
||||||
|
|
||||||
* nss/XXX-lookup.c: Add misssing explanation.
|
* nss/XXX-lookup.c: Add missing explanation.
|
||||||
|
|
||||||
1997-02-19 19:14 Andreas Jaeger <aj@arthur.pfalz.de>
|
1997-02-19 19:14 Andreas Jaeger <aj@arthur.pfalz.de>
|
||||||
|
|
||||||
|
@ -83,6 +83,14 @@ export sysdep_dir := $(sysdep_dir)
|
|||||||
# Get the values defined by options to `configure'.
|
# Get the values defined by options to `configure'.
|
||||||
include $(common-objpfx)config.make
|
include $(common-objpfx)config.make
|
||||||
|
|
||||||
|
# We have a special subdir for each binary format.
|
||||||
|
# For now, only ELF is fully supported.
|
||||||
|
ifeq ($(elf),yes)
|
||||||
|
binfmt-subdir = elf
|
||||||
|
else
|
||||||
|
binfmt-subdir =
|
||||||
|
endif
|
||||||
|
|
||||||
# Complete path to sysdep dirs.
|
# Complete path to sysdep dirs.
|
||||||
full-config-sysdirs := $(filter /%, $(config-sysdirs)) \
|
full-config-sysdirs := $(filter /%, $(config-sysdirs)) \
|
||||||
$(addprefix $(..), $(filter-out /%, $(config-sysdirs)))
|
$(addprefix $(..), $(filter-out /%, $(config-sysdirs)))
|
||||||
|
2
Makefile
2
Makefile
@ -55,7 +55,7 @@ subdirs = csu assert ctype db locale intl catgets math setjmp signal stdlib \
|
|||||||
stdio-common $(stdio) malloc string wcsmbs time dirent grp pwd \
|
stdio-common $(stdio) malloc string wcsmbs time dirent grp pwd \
|
||||||
posix io termios resource misc login socket sysvipc gmon gnulib \
|
posix io termios resource misc login socket sysvipc gmon gnulib \
|
||||||
wctype manual shadow md5-crypt nss $(sysdep-subdirs) po argp \
|
wctype manual shadow md5-crypt nss $(sysdep-subdirs) po argp \
|
||||||
$(add-ons) elf
|
$(add-ons) $(binfmt-subdir)
|
||||||
export subdirs := $(subdirs) # Benign, useless in GNU make before 3.63.
|
export subdirs := $(subdirs) # Benign, useless in GNU make before 3.63.
|
||||||
|
|
||||||
# The mach and hurd subdirectories have many generated header files which
|
# The mach and hurd subdirectories have many generated header files which
|
||||||
|
@ -27,7 +27,7 @@ routines = $(dl-routines) dl-open dl-close dl-symbol dl-support \
|
|||||||
# The core dynamic linking functions are in libc for the static and
|
# The core dynamic linking functions are in libc for the static and
|
||||||
# profiled libraries.
|
# profiled libraries.
|
||||||
dl-routines = $(addprefix dl-,load cache lookup object reloc deps \
|
dl-routines = $(addprefix dl-,load cache lookup object reloc deps \
|
||||||
runtime error init fini debug sysdepio)
|
runtime error init fini debug misc)
|
||||||
# But they are absent from the shared libc, because that code is in ld.so.
|
# But they are absent from the shared libc, because that code is in ld.so.
|
||||||
elide-routines.so = $(dl-routines) dl-support enbl-secure
|
elide-routines.so = $(dl-routines) dl-support enbl-secure
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Operating I/O support for run-time dynamic linker. Generic Unix version.
|
/* Miscellaneous support functions for dynamic linker
|
||||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -17,9 +17,59 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#ifndef MAP_ANON
|
||||||
|
/* This is the only dl-sysdep.c function that is actually needed at run-time
|
||||||
|
by _dl_map_object. */
|
||||||
|
|
||||||
|
int
|
||||||
|
_dl_sysdep_open_zero_fill (void)
|
||||||
|
{
|
||||||
|
return __open ("/dev/zero", O_RDONLY);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Read the whole contents of FILE into new mmap'd space with given
|
||||||
|
protections. *SIZEP gets the size of the file. */
|
||||||
|
|
||||||
|
void *
|
||||||
|
_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
|
||||||
|
{
|
||||||
|
void *result;
|
||||||
|
struct stat st;
|
||||||
|
int fd = __open (file, O_RDONLY);
|
||||||
|
if (fd < 0)
|
||||||
|
return NULL;
|
||||||
|
if (__fxstat (_STAT_VER, fd, &st) < 0)
|
||||||
|
result = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Map a copy of the file contents. */
|
||||||
|
result = __mmap (0, st.st_size, prot,
|
||||||
|
#ifdef MAP_COPY
|
||||||
|
MAP_COPY
|
||||||
|
#else
|
||||||
|
MAP_PRIVATE
|
||||||
|
#endif
|
||||||
|
#ifdef MAP_FILE
|
||||||
|
| MAP_FILE
|
||||||
|
#endif
|
||||||
|
, fd, 0);
|
||||||
|
if (result == (void *) -1)
|
||||||
|
result = NULL;
|
||||||
|
else
|
||||||
|
*sizep = st.st_size;
|
||||||
|
}
|
||||||
|
__close (fd);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
@ -68,10 +68,6 @@ _dl_relocate_object (struct link_map *l, struct link_map *scope[], int lazy)
|
|||||||
ELF_DYNAMIC_RELOCATE (l, lazy);
|
ELF_DYNAMIC_RELOCATE (l, lazy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up the PLT so its unrelocated entries will jump to
|
|
||||||
_dl_runtime_resolve (dl-runtime.c), which will relocate them. */
|
|
||||||
elf_machine_runtime_setup (l, lazy);
|
|
||||||
|
|
||||||
/* Mark the object so we know ths work has been done. */
|
/* Mark the object so we know ths work has been done. */
|
||||||
l->l_relocated = 1;
|
l->l_relocated = 1;
|
||||||
|
|
||||||
|
@ -17,12 +17,6 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
/* This file defines some things that for the dynamic linker are defined in
|
/* This file defines some things that for the dynamic linker are defined in
|
||||||
rtld.c and dl-sysdep.c in ways appropriate to bootstrap dynamic linking. */
|
rtld.c and dl-sysdep.c in ways appropriate to bootstrap dynamic linking. */
|
||||||
|
|
||||||
@ -32,49 +26,3 @@ char **_dl_argv = &__progname; /* This is checked for some error messages. */
|
|||||||
/* This defines the default search path for libraries.
|
/* This defines the default search path for libraries.
|
||||||
For the dynamic linker it is set by -rpath when linking. */
|
For the dynamic linker it is set by -rpath when linking. */
|
||||||
const char *_dl_rpath = DEFAULT_RPATH;
|
const char *_dl_rpath = DEFAULT_RPATH;
|
||||||
|
|
||||||
#ifndef MAP_ANON
|
|
||||||
/* This is the only dl-sysdep.c function that is actually needed at run-time
|
|
||||||
by _dl_map_object. */
|
|
||||||
|
|
||||||
int
|
|
||||||
_dl_sysdep_open_zero_fill (void)
|
|
||||||
{
|
|
||||||
return __open ("/dev/zero", O_RDONLY);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Read the whole contents of FILE into new mmap'd space with given
|
|
||||||
protections. *SIZEP gets the size of the file. */
|
|
||||||
|
|
||||||
void *
|
|
||||||
_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
|
|
||||||
{
|
|
||||||
void *result;
|
|
||||||
struct stat st;
|
|
||||||
int fd = __open (file, O_RDONLY);
|
|
||||||
if (fd < 0)
|
|
||||||
return NULL;
|
|
||||||
if (__fxstat (_STAT_VER, fd, &st) < 0)
|
|
||||||
result = NULL;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Map a copy of the file contents. */
|
|
||||||
result = __mmap (0, st.st_size, prot,
|
|
||||||
#ifdef MAP_COPY
|
|
||||||
MAP_COPY
|
|
||||||
#else
|
|
||||||
MAP_PRIVATE
|
|
||||||
#endif
|
|
||||||
#ifdef MAP_FILE
|
|
||||||
| MAP_FILE
|
|
||||||
#endif
|
|
||||||
, fd, 0);
|
|
||||||
if (result == (void *) -1)
|
|
||||||
result = NULL;
|
|
||||||
else
|
|
||||||
*sizep = st.st_size;
|
|
||||||
}
|
|
||||||
__close (fd);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
@ -97,8 +97,11 @@ elf_get_dynamic_info (ElfW(Dyn) *dyn,
|
|||||||
|
|
||||||
/* This can't just be an inline function because GCC is too dumb
|
/* This can't just be an inline function because GCC is too dumb
|
||||||
to inline functions containing inlines themselves. */
|
to inline functions containing inlines themselves. */
|
||||||
#define ELF_DYNAMIC_RELOCATE(map, lazy) \
|
#define ELF_DYNAMIC_RELOCATE(map, lazy) \
|
||||||
do { ELF_DYNAMIC_DO_REL ((map), (lazy)); \
|
do { \
|
||||||
ELF_DYNAMIC_DO_RELA ((map), (lazy)); } while (0)
|
int edr_lazy = elf_machine_runtime_setup((map), (lazy)); \
|
||||||
|
ELF_DYNAMIC_DO_REL ((map), edr_lazy); \
|
||||||
|
ELF_DYNAMIC_DO_RELA ((map), edr_lazy); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,8 +106,6 @@ _dl_start (void *arg)
|
|||||||
|
|
||||||
ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0);
|
ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0);
|
||||||
|
|
||||||
elf_machine_runtime_setup (&bootstrap_map, 0);
|
|
||||||
|
|
||||||
/* Now life is sane; we can call functions and access global data.
|
/* Now life is sane; we can call functions and access global data.
|
||||||
Set up to use the operating system facilities, and find out from
|
Set up to use the operating system facilities, and find out from
|
||||||
the operating system's program loader where to find the program
|
the operating system's program loader where to find the program
|
||||||
|
@ -23,7 +23,7 @@ subdir := inet
|
|||||||
|
|
||||||
headers := netinet/ether.h netinet/in.h netinet/if_ether.h \
|
headers := netinet/ether.h netinet/in.h netinet/if_ether.h \
|
||||||
netinet/tcp.h netinet/ip.h $(wildcard arpa/*.h protocols/*.h) \
|
netinet/tcp.h netinet/ip.h $(wildcard arpa/*.h protocols/*.h) \
|
||||||
aliases.h netinet/ip6.h netinet/icmp6.h
|
aliases.h netinet/ip6.h netinet/icmp6.h netinet/inbits.h
|
||||||
|
|
||||||
distribute := netgroup.h
|
distribute := netgroup.h
|
||||||
|
|
||||||
|
@ -28,17 +28,17 @@
|
|||||||
#define ICMPV6_FILTER_BLOCKOTHERS 3
|
#define ICMPV6_FILTER_BLOCKOTHERS 3
|
||||||
#define ICMPV6_FILTER_PASSONLY 4
|
#define ICMPV6_FILTER_PASSONLY 4
|
||||||
|
|
||||||
struct icmpv6_filter
|
struct icmpv6_filter
|
||||||
{
|
{
|
||||||
u_int32_t data[8];
|
u_int32_t data[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct icmpv6hdr
|
struct icmpv6hdr
|
||||||
{
|
{
|
||||||
u_int8_t icmpv6_type; /* type field */
|
u_int8_t icmpv6_type; /* type field */
|
||||||
u_int8_t icmpv6_code; /* code field */
|
u_int8_t icmpv6_code; /* code field */
|
||||||
u_int16_t icmpv6_cksum; /* checksum field */
|
u_int16_t icmpv6_cksum; /* checksum field */
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
u_int32_t un_data32[1]; /* type-specific field */
|
u_int32_t un_data32[1]; /* type-specific field */
|
||||||
u_int16_t un_data16[2]; /* type-specific field */
|
u_int16_t un_data16[2]; /* type-specific field */
|
||||||
@ -81,17 +81,17 @@ struct icmpv6hdr
|
|||||||
#include <asm/bitops.h>
|
#include <asm/bitops.h>
|
||||||
|
|
||||||
#define ICMPV6_FILTER_WILLPASS(type, filterp) \
|
#define ICMPV6_FILTER_WILLPASS(type, filterp) \
|
||||||
(test_bit(type, filterp) == 0)
|
(test_bit (type, filterp) == 0)
|
||||||
|
|
||||||
#define ICMPV6_FILTER_WILLBLOCK(type, filterp) \
|
#define ICMPV6_FILTER_WILLBLOCK(type, filterp) \
|
||||||
test_bit(type, filterp)
|
test_bit (type, filterp)
|
||||||
|
|
||||||
#define ICMPV6_FILTER_SETPASS(type, filterp) \
|
#define ICMPV6_FILTER_SETPASS(type, filterp) \
|
||||||
clear_bit(type & 0x1f, &((filterp)->data[type >> 5]))
|
clear_bit (type & 0x1f, &((filterp)->data[type >> 5]))
|
||||||
|
|
||||||
#define ICMPV6_FILTER_SETBLOCK(type, filterp) \
|
#define ICMPV6_FILTER_SETBLOCK(type, filterp) \
|
||||||
set_bit(type & 0x1f, &((filterp)->data[type >> 5]))
|
set_bit (type & 0x1f, &((filterp)->data[type >> 5]))
|
||||||
#else
|
#else
|
||||||
#define ICMPV6_FILTER_WILLPASS(type, filterp) \
|
#define ICMPV6_FILTER_WILLPASS(type, filterp) \
|
||||||
((((filterp)->data[(type) >> 5]) & (1 << ((type) & 31))) == 0)
|
((((filterp)->data[(type) >> 5]) & (1 << ((type) & 31))) == 0)
|
||||||
|
|
||||||
@ -106,10 +106,10 @@ struct icmpv6hdr
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ICMPV6_FILTER_SETPASSALL(filterp) \
|
#define ICMPV6_FILTER_SETPASSALL(filterp) \
|
||||||
memset(filterp, 0, sizeof(struct icmpv6_filter));
|
memset (filterp, 0, sizeof (struct icmpv6_filter));
|
||||||
|
|
||||||
#define ICMPV6_FILTER_SETBLOCKALL(filterp) \
|
#define ICMPV6_FILTER_SETBLOCKALL(filterp) \
|
||||||
memset(filterp, 0xFF, sizeof(struct icmpv6_filter));
|
memset (filterp, 0xFF, sizeof (struct icmpv6_filter));
|
||||||
|
|
||||||
#define ND6_ROUTER_SOLICITATION 133
|
#define ND6_ROUTER_SOLICITATION 133
|
||||||
#define ND6_ROUTER_ADVERTISEMENT 134
|
#define ND6_ROUTER_ADVERTISEMENT 134
|
||||||
@ -117,7 +117,7 @@ struct icmpv6hdr
|
|||||||
#define ND6_NEIGHBOR_ADVERTISEMENT 136
|
#define ND6_NEIGHBOR_ADVERTISEMENT 136
|
||||||
#define ND6_REDIRECT 137
|
#define ND6_REDIRECT 137
|
||||||
|
|
||||||
enum nd6_option
|
enum nd6_option
|
||||||
{
|
{
|
||||||
ND6_OPT_SOURCE_LINKADDR=1,
|
ND6_OPT_SOURCE_LINKADDR=1,
|
||||||
ND6_OPT_TARGET_LINKADDR=2,
|
ND6_OPT_TARGET_LINKADDR=2,
|
||||||
@ -137,7 +137,7 @@ struct nd6_router_solicit /* router solicitation */
|
|||||||
#define rsol_cksum rsol_hdr.icmpv6_cksum
|
#define rsol_cksum rsol_hdr.icmpv6_cksum
|
||||||
#define rsol_reserved rsol_hdr.icmpv6_data32[0]
|
#define rsol_reserved rsol_hdr.icmpv6_data32[0]
|
||||||
|
|
||||||
struct nd6_router_advert
|
struct nd6_router_advert
|
||||||
{
|
{
|
||||||
struct icmpv6hdr radv_hdr;
|
struct icmpv6hdr radv_hdr;
|
||||||
u_int32_t radv_reachable; /* reachable time */
|
u_int32_t radv_reachable; /* reachable time */
|
@ -175,10 +175,10 @@ struct sockaddr_in
|
|||||||
struct in_addr sin_addr; /* Internet address. */
|
struct in_addr sin_addr; /* Internet address. */
|
||||||
|
|
||||||
/* Pad to size of `struct sockaddr'. */
|
/* Pad to size of `struct sockaddr'. */
|
||||||
unsigned char sin_zero[sizeof(struct sockaddr) -
|
unsigned char sin_zero[sizeof (struct sockaddr) -
|
||||||
__SOCKADDR_COMMON_SIZE -
|
__SOCKADDR_COMMON_SIZE -
|
||||||
sizeof(unsigned short int) -
|
sizeof (unsigned short int) -
|
||||||
sizeof(struct in_addr)];
|
sizeof (struct in_addr)];
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Ditto, for IPv6. */
|
/* Ditto, for IPv6. */
|
||||||
@ -200,38 +200,8 @@ struct ipv6_mreq
|
|||||||
int ipv6mr_ifindex;
|
int ipv6mr_ifindex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Get system-specific definitions. */
|
||||||
/* Options for use with `getsockopt' and `setsockopt' at the IP level.
|
#include <netinet/inbits.h>
|
||||||
The first word in the comment at the right is the data type used;
|
|
||||||
"bool" means a boolean value stored in an `int'. */
|
|
||||||
#define IP_TOS 1 /* int; IP type of service and precedence. */
|
|
||||||
#define IP_TTL 2 /* int; IP time to live. */
|
|
||||||
#define IP_HDRINCL 3 /* int; Header is included with data. */
|
|
||||||
#define IP_OPTIONS 4 /* ip_opts; IP per-packet options. */
|
|
||||||
#define IP_MULTICAST_IF 32 /* in_addr; set/get IP multicast i/f */
|
|
||||||
#define IP_MULTICAST_TTL 33 /* u_char; set/get IP multicast ttl */
|
|
||||||
#define IP_MULTICAST_LOOP 34 /* i_char; set/get IP multicast loopback */
|
|
||||||
#define IP_ADD_MEMBERSHIP 35 /* ip_mreq; add an IP group membership */
|
|
||||||
#define IP_DROP_MEMBERSHIP 36 /* ip_mreq; drop an IP group membership */
|
|
||||||
|
|
||||||
/* To select the IP level. */
|
|
||||||
#define SOL_IP 0
|
|
||||||
|
|
||||||
/* Structure used to describe IP options for IP_OPTIONS. The `ip_dst'
|
|
||||||
field is used for the first-hop gateway when using a source route
|
|
||||||
(this gets put into the header proper). */
|
|
||||||
struct ip_opts
|
|
||||||
{
|
|
||||||
struct in_addr ip_dst; /* First hop; zero without source route. */
|
|
||||||
char ip_opts[40]; /* Actually variable in size. */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Structure used for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. */
|
|
||||||
struct ip_mreq
|
|
||||||
{
|
|
||||||
struct in_addr imr_multiaddr; /* IP multicast address of group */
|
|
||||||
struct in_addr imr_interface; /* local IP address of interface */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Functions to convert between host and network byte order.
|
/* Functions to convert between host and network byte order.
|
||||||
|
|
||||||
@ -256,49 +226,29 @@ extern u_int16_t htons __P ((u_int16_t __hostshort));
|
|||||||
#define htons(x) (x)
|
#define htons(x) (x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* IPV6 socket options. */
|
|
||||||
#define IPV6_ADDRFORM 1
|
|
||||||
#define IPV6_PKTINFO 2
|
|
||||||
#define IPV6_RXHOPOPTS 3
|
|
||||||
#define IPV6_RXDSTOPTS 4
|
|
||||||
#define IPV6_RXSRCRT 5
|
|
||||||
#define IPV6_PKTOPTIONS 6
|
|
||||||
#define IPV6_CHECKSUM 7
|
|
||||||
#define IPV6_HOPLIMIT 8
|
|
||||||
|
|
||||||
#define SCM_SRCRT IPV6_RXSRCRT
|
|
||||||
|
|
||||||
#define IPV6_UNICAST_HOPS 16
|
|
||||||
#define IPV6_MULTICAST_IF 17
|
|
||||||
#define IPV6_MULTICAST_HOPS 18
|
|
||||||
#define IPV6_MULTICAST_LOOP 19
|
|
||||||
#define IPV6_ADD_MEMBERSHIP 20
|
|
||||||
#define IPV6_DROP_MEMBERSHIP 21
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_UNSPECIFIED(a) \
|
#define IN6_IS_ADDR_UNSPECIFIED(a) \
|
||||||
((((u_int32_t *)(a))[0] == 0) && ((u_int32_t *)(a))[1] == 0) && \
|
((((u_int32_t *) (a))[0] == 0) && ((u_int32_t *) (a))[1] == 0) && \
|
||||||
(((u_int32_t *)(a))[2] == 0) && ((u_int32_t *)(a))[3] == 0))
|
(((u_int32_t *) (a))[2] == 0) && ((u_int32_t *) (a))[3] == 0))
|
||||||
|
|
||||||
#define IN6_IS_ADDR_LOOPBACK(a) \
|
#define IN6_IS_ADDR_LOOPBACK(a) \
|
||||||
((((u_int32_t *)(a))[0] == 0) && ((u_int32_t *)(a))[1] == 0) && \
|
((((u_int32_t *) (a))[0] == 0) && ((u_int32_t *) (a))[1] == 0) && \
|
||||||
(((u_int32_t *)(a))[2] == 0) && ((u_int32_t *)(a))[3] == htonl(1)))
|
(((u_int32_t *) (a))[2] == 0) && ((u_int32_t *) (a))[3] == htonl (1)))
|
||||||
|
|
||||||
#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *)(a))[0] == 0xff)
|
#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
|
||||||
|
|
||||||
#define IN6_IS_ADDR_LINKLOCAL(a) \
|
#define IN6_IS_ADDR_LINKLOCAL(a) \
|
||||||
((((u_int32_t *)(a))[0] & htonl(0xffc00000)) == htonl(0xfe800000))
|
((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
|
||||||
|
|
||||||
#define IN6_IS_ADDR_SITELOCAL(a) \
|
#define IN6_IS_ADDR_SITELOCAL(a) \
|
||||||
((((u_int32_t *)(a))[0] & htonl(0xffc00000)) == htonl(0xfec00000))
|
((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfec00000))
|
||||||
|
|
||||||
#define IN6_IS_ADDR_V4MAPPED(a) \
|
#define IN6_IS_ADDR_V4MAPPED(a) \
|
||||||
((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
|
((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \
|
||||||
(((u_int32_t *)(a))[2] == htonl(0xffff)))
|
(((u_int32_t *) (a))[2] == htonl (0xffff)))
|
||||||
|
|
||||||
#define IN6_IS_ADDR_V4COMPAT(a) \
|
#define IN6_IS_ADDR_V4COMPAT(a) \
|
||||||
((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
|
((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \
|
||||||
(((u_int32_t *)(a))[2] == 0) && (ntohl(((u_int32_t *)(a))[3]) > 1))
|
(((u_int32_t *) (a))[2] == 0) && (ntohl (((u_int32_t *) (a))[3]) > 1))
|
||||||
|
|
||||||
|
|
||||||
/* Bind socket to a privileged IP port. */
|
/* Bind socket to a privileged IP port. */
|
||||||
@ -306,7 +256,7 @@ extern int bindresvport __P ((int __sockfd, struct sockaddr_in *__sin));
|
|||||||
|
|
||||||
|
|
||||||
/* IPv6 packet information. */
|
/* IPv6 packet information. */
|
||||||
struct in6_pktinfo
|
struct in6_pktinfo
|
||||||
{
|
{
|
||||||
struct in6_addr ipi6_addr; /* src/dst IPv6 address */
|
struct in6_addr ipi6_addr; /* src/dst IPv6 address */
|
||||||
int ipi6_ifindex; /* send/recv interface index */
|
int ipi6_ifindex; /* send/recv interface index */
|
@ -22,17 +22,18 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
|
|
||||||
struct ipv6hdr {
|
struct ipv6hdr
|
||||||
#if (__BYTE_ORDER == __LITTLE_ENDIAN)
|
{
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
u_int8_t ipv6_version:4;
|
u_int8_t ipv6_version:4;
|
||||||
u_int8_t ipv6_priority:4; /* going away? */
|
u_int8_t ipv6_priority:4; /* going away? */
|
||||||
u_int32_t ipv6_flowid:24;
|
u_int32_t ipv6_flowid:24;
|
||||||
#elif (__BYTE_ORDER == __BIG_ENDIAN)
|
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||||
u_int32_t ipv6_flowid:24;
|
u_int32_t ipv6_flowid:24;
|
||||||
u_int8_t ipv6_priority:4; /* going away? */
|
u_int8_t ipv6_priority:4; /* going away? */
|
||||||
u_int8_t ipv6_version:4;
|
u_int8_t ipv6_version:4;
|
||||||
#else
|
#else
|
||||||
#error Unknown endianness
|
# error Unknown endianness
|
||||||
#endif
|
#endif
|
||||||
u_int16_t ipv6_len;
|
u_int16_t ipv6_len;
|
||||||
u_int8_t ipv6_nextheader;
|
u_int8_t ipv6_nextheader;
|
12
manual/examples/fmtmsgexpl.c
Normal file
12
manual/examples/fmtmsgexpl.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include <fmtmsg.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
addseverity (5, "NOTE2");
|
||||||
|
fmtmsg (MM_PRINT, "only1field", MM_INFO, "text2", "action2", "tag2");
|
||||||
|
fmtmsg (MM_PRINT, "UX:cat", 5, "invalid syntax", "refer to manual",
|
||||||
|
"UX:cat:001");
|
||||||
|
fmtmsg (MM_PRINT, "label:foo", 6, "text", "action", "tag");
|
||||||
|
return 0;
|
||||||
|
}
|
@ -29,6 +29,7 @@ representing a communications channel to a file, device, or process.
|
|||||||
* Stream Buffering:: How to control buffering of streams.
|
* Stream Buffering:: How to control buffering of streams.
|
||||||
* Other Kinds of Streams:: Streams that do not necessarily correspond
|
* Other Kinds of Streams:: Streams that do not necessarily correspond
|
||||||
to an open file.
|
to an open file.
|
||||||
|
* Formatted Messages:: Print strictly formatted messages.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Streams
|
@node Streams
|
||||||
@ -3815,3 +3816,311 @@ wait until the rest of the manual is more done and polished.
|
|||||||
@end ignore
|
@end ignore
|
||||||
|
|
||||||
@c ??? This section could use an example.
|
@c ??? This section could use an example.
|
||||||
|
|
||||||
|
|
||||||
|
@node Formatted Messages
|
||||||
|
@section Formatted Messages
|
||||||
|
@cindex formatted messages
|
||||||
|
|
||||||
|
On systems which are based on System V messages of programs (especially
|
||||||
|
the system tools) are printed in a strict form using the @code{fmtmsg}
|
||||||
|
function. The uniformity sometimes helps the user to interpret messages
|
||||||
|
and the strictness tests of the @code{fmtmsg} function ensures that the
|
||||||
|
programmer follows some minimal requirements.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Printing Formatted Messages:: The @code{fmtmsg} function.
|
||||||
|
* Adding Severity Classes:: Add more severity classes.
|
||||||
|
* Example:: How to use @code{fmtmsg} and @code{addseverity}.
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
|
@node Printing Formatted Messages
|
||||||
|
@subsection Printing Formatted Messages
|
||||||
|
|
||||||
|
Messages can be printed to standard error and/or to the console. To
|
||||||
|
select the destination the programmer can use the following to values,
|
||||||
|
bitwise OR combined if wanted, for the @var{classification} parameter of
|
||||||
|
@code{fmtmsg}:
|
||||||
|
|
||||||
|
@vtable @code
|
||||||
|
@item MM_PRINT
|
||||||
|
Display the message in standard error.
|
||||||
|
@item MM_CONSOLE
|
||||||
|
Display the message on the system console.
|
||||||
|
@end vtable
|
||||||
|
|
||||||
|
The errorneous piece of the system can be signal by exactly one of the
|
||||||
|
following values which also is bitwise ORed with the
|
||||||
|
@var{classification} parameter to @code{fmtmsg}:
|
||||||
|
|
||||||
|
@vtable @code
|
||||||
|
@item MM_HARD
|
||||||
|
The source of the condition is some hardware.
|
||||||
|
@item MM_SOFT
|
||||||
|
The source of the condition is some software.
|
||||||
|
@item MM_FIRM
|
||||||
|
The source of the condition is some firmware.
|
||||||
|
@end vtable
|
||||||
|
|
||||||
|
A third component of the @var{classification} parameter to @code{fmtmsg}
|
||||||
|
can describe the part of the system which detects the problem. This is
|
||||||
|
done by using exactly one of the following values:
|
||||||
|
|
||||||
|
@vtable @code
|
||||||
|
@item MM_APPL
|
||||||
|
The errorneous condition is detected by the application.
|
||||||
|
@item MM_UTIL
|
||||||
|
The errorneous condition is detected by a utility.
|
||||||
|
@item MM_OPSYS
|
||||||
|
The errorneous condition is detected by the operating system.
|
||||||
|
@end vtable
|
||||||
|
|
||||||
|
A last component of @var{classification} can signal the results of this
|
||||||
|
message. Exactly one of the following values can be used:
|
||||||
|
|
||||||
|
@vtable @code
|
||||||
|
@item MM_RECOVER
|
||||||
|
It is a recoverable error.
|
||||||
|
@item MM_NRECOV
|
||||||
|
It is a non-recoverable error.
|
||||||
|
@end vtable
|
||||||
|
|
||||||
|
@comment fmtmsg.h
|
||||||
|
@comment XPG
|
||||||
|
@deftypefun int fmtmsg (long int @var{classification}, const char *@var{label}, int @var{severity}, const char *@var{text}, const char *@var{action}, const char *@var{tag})
|
||||||
|
Display a message described by its parameters on the device(s) specified
|
||||||
|
in the @var{classification} parameter. The @var{label} parameter
|
||||||
|
identifies the source of the message. The string should consist of two
|
||||||
|
colon separated parts where the first part has not more than 10 and the
|
||||||
|
second part not more the 14 characters. The @var{text} parameter
|
||||||
|
descries the condition of the error, the @var{action} parameter possible
|
||||||
|
steps to recover from the error and the @var{tag} parameter is a
|
||||||
|
reference to the online documentation where more information can be
|
||||||
|
found. It should contain the @var{label} value and a unique
|
||||||
|
identification number.
|
||||||
|
|
||||||
|
Each of the parameters can be of a special value which means this value
|
||||||
|
is to be omitted. The symbolic names for these values are:
|
||||||
|
|
||||||
|
@vtable @code
|
||||||
|
@item MM_NULLLBL
|
||||||
|
Ignore @var{label} parameter.
|
||||||
|
@item MM_NULLSEV
|
||||||
|
Ignore @var{severity} parameter.
|
||||||
|
@item MM_NULLMC
|
||||||
|
Ignore @var{classification} parameter. This implies that nothing is
|
||||||
|
actually printed.
|
||||||
|
@item MM_NULLTXT
|
||||||
|
Ignore @var{text} parameter.
|
||||||
|
@item MM_NULLACT
|
||||||
|
Ignore @var{action} parameter.
|
||||||
|
@item MM_NULLTAG
|
||||||
|
Ignore @var{tag} parameter.
|
||||||
|
@end vtable
|
||||||
|
|
||||||
|
There is another way certain fields can be omitted from the output the
|
||||||
|
standard error. This is described below in the description of
|
||||||
|
environment variables influencing the behaviour.
|
||||||
|
|
||||||
|
The @var{severity} parameter can have one of the values in the following
|
||||||
|
table:
|
||||||
|
@cindex severity class
|
||||||
|
|
||||||
|
@vtable @code
|
||||||
|
@item MM_NOSEV
|
||||||
|
Nothing is printed, this value is the same as @code{MM_NULLSEV}.
|
||||||
|
@item MM_HALT
|
||||||
|
This value is printed as @code{HALT}.
|
||||||
|
@item MM_ERROR
|
||||||
|
This value is printed as @code{ERROR}.
|
||||||
|
@item MM_WARNING
|
||||||
|
This value is printed as @code{WARNING}.
|
||||||
|
@item MM_INFO
|
||||||
|
This value is printed as @code{INFO}.
|
||||||
|
@end vtable
|
||||||
|
|
||||||
|
The numeric value of these five macros are between @code{0} and
|
||||||
|
@code{4}. Using the environment variable @code{SEV_LEVEL} or using the
|
||||||
|
@code{addseverity} function one can add more severity levels with their
|
||||||
|
corresponding string to print. This is described below
|
||||||
|
(@pxref{Adding Severity Classes}).
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
If no parameter is ignored the output looks like this:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
@var{label}: @var{severity-string}: @var{text}
|
||||||
|
TO FIX: @var{action} @var{tag}
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
The colons, new line characters and the @code{TO FIX} string are
|
||||||
|
inserted if necessary, i.e., if the corresponding parameter is not
|
||||||
|
ignored.
|
||||||
|
|
||||||
|
This function is specified in the X/Open Portability Guide. It is also
|
||||||
|
available on all system derived from System V.
|
||||||
|
|
||||||
|
The function return the value @code{MM_OK} if no error occurred. If
|
||||||
|
only the printing to standard error failed, it returns @code{MM_NOMSG}.
|
||||||
|
If printing to the console fails, it returns @code{MM_NOCON}. If
|
||||||
|
nothing is printed @code{MM_NOTOK} is returned. Among situation where
|
||||||
|
all outputs fail this last value is also returned if a parameter value
|
||||||
|
is incorrect.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
|
There are two environment variables which influence the behaviour of
|
||||||
|
@code{fmtmsg}. The first is @code{MSGVERB}. It is used to control the
|
||||||
|
output actually happening on standard error (@emph{not} the console
|
||||||
|
output). Each of the five fields can explicitely be enabled. To do
|
||||||
|
this the user has to put the @code{MSGVERB} variable with a format like
|
||||||
|
following in the environment before calling the @code{fmtmsg} function
|
||||||
|
the first time:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
MSGVERB=@var{keyword}[:@var{keyword}[:...]]
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
Valid @var{keyword}s are @code{label}, @code{severity}, @code{text},
|
||||||
|
@code{action}, and @code{tag}. If the environment variable is not given
|
||||||
|
or is the empty string, a not supported keyword is given or the value is
|
||||||
|
somehow else invalid, no part of the message is masked out.
|
||||||
|
|
||||||
|
The second environment variable which influences the behaviour of
|
||||||
|
@code{fmtmsg} is @code{SEV_LEVEL}. This variable and the change in the
|
||||||
|
behaviour of @code{fmtmsg} is not specified in the X/Open Portability
|
||||||
|
Guide. It is available in System V systems, though. It can be used to
|
||||||
|
introduce no severity levels. By default, only the five severity levels
|
||||||
|
described above are available. Any other numeric value would make
|
||||||
|
@code{fmtmsg} print nothing.
|
||||||
|
|
||||||
|
If the user puts @code{SEV_LEVEL} with a format like
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
SEV_LEVEL=[@var{description}[:@var{description}[:...]]]
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
in the environment of the process before the first call to
|
||||||
|
@code{fmtmsg}, where @var{description} has a value of the form
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
@var{severity-keyword},@var{level},@var{printstring}
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
The @var{severity-keyword} part is not used by @code{fmtmsg} but it has
|
||||||
|
to be present. The @var{level} part is a string representation of a
|
||||||
|
number. The numeric value must be a number greater than 4. This value
|
||||||
|
must be used in the @var{severity} parameter of @code{fmtmsg} to select
|
||||||
|
this class. It is not possible to overwrite any of the predefined
|
||||||
|
classes. The @var{printstring} is the string printed when a message of
|
||||||
|
this class is processed by @code{fmtmsg} (see above, @code{fmtsmg} does
|
||||||
|
not print the numeric value but instead the string representation).
|
||||||
|
|
||||||
|
|
||||||
|
@node Adding Severity Classes
|
||||||
|
@subsection Adding Severity Classes
|
||||||
|
@cindex severity class
|
||||||
|
|
||||||
|
There is another possibility to introduce severity classes beside using
|
||||||
|
the environment variable @code{SEV_LEVEL}. This simplifies the task of
|
||||||
|
introducing new classes in a running program. One could use the
|
||||||
|
@code{setenv} or @code{putenv} function to set the environment variable,
|
||||||
|
but this toilsome.
|
||||||
|
|
||||||
|
@deftypefun int addseverity (int @var{severity}, const char *@var{string})
|
||||||
|
This function allows to introduce new severity classes which can be
|
||||||
|
addressed by the @var{severity} parameter of the @code{fmtmsg} function.
|
||||||
|
The @var{severity} parameter of @code{addseverity} must match the value
|
||||||
|
for the parameter with the same name of @code{fmtmsg} and @var{string}
|
||||||
|
is the string printed in the actual messages instead of the numeric
|
||||||
|
value.
|
||||||
|
|
||||||
|
If @var{string} is @code{NULL} the severity class with the numeric value
|
||||||
|
according to @var{severity} is removed.
|
||||||
|
|
||||||
|
The return value is @code{MM_OK} if the task was successfully performed.
|
||||||
|
If the return value is @code{MM_NOTOK} something went wrong. This could
|
||||||
|
mean that no more memory is available or a class is not available when
|
||||||
|
it has to be removed.
|
||||||
|
|
||||||
|
This function is not specified in the X/Open Portability Guide although
|
||||||
|
the @code{fmtsmg} is. It is available on System V systems.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
|
|
||||||
|
@node Example
|
||||||
|
@subsection How to use @code{fmtmsg} and @code{addseverity}
|
||||||
|
|
||||||
|
Here is a simple example program to illustrate the use of the both
|
||||||
|
functions described in this section.
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
@include fmtmsgexpl.c.texi
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
The second call to @code{fmtmsg} illustrates a use of this function how
|
||||||
|
it usually happens on System V systems which heavily use this function.
|
||||||
|
It might be worth a thought to follow the scheme used in System V
|
||||||
|
systems so we give a short explanation here. The value of the
|
||||||
|
@var{label} field (@code{UX:cat}) says that the error occured in the
|
||||||
|
Unix program @code{cat}. The explanation of the error follows and the
|
||||||
|
value for the @var{action} parameter is @code{"refer to manual"}. One
|
||||||
|
could me more specific here, if needed. The @var{tag} field contains,
|
||||||
|
as proposed above, the value of the string given for the @var{label}
|
||||||
|
parameter, and additionally a unique ID (@code{001} in this case). For
|
||||||
|
a GNU environment this string could contain a reference to the
|
||||||
|
corresponding node in the Info page for the program.
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
Running this program without specifying the @code{MSGVERB} and
|
||||||
|
@code{SEV_LEVEL} function produces the following output:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
UX:cat: NOTE2: invalid syntax
|
||||||
|
TO FIX: refer to manual UX:cat:001
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
We see the different fields of the message and how the extra glue (the
|
||||||
|
colons and the @code{TO FIX} string) are printed. But only one of the
|
||||||
|
three calls to @code{fmtmsg} produced output. The first call does not
|
||||||
|
print anything because the @var{label} parameter is not in the correct
|
||||||
|
form. As specified in @ref{Printing Formatted Messages} the string must
|
||||||
|
contain two fields, separated by a colon. The third @code{fmtmsg} call
|
||||||
|
produced no output since the class with the numeric value @code{6} is
|
||||||
|
not defined. Although a class with numeric value @code{5} is also not
|
||||||
|
defined by default, the call the @code{addseverity} introduces it and
|
||||||
|
the second call to @code{fmtmsg} produces the above outout.
|
||||||
|
|
||||||
|
When we change the environment of the program to contain
|
||||||
|
@code{SEV_LEVEL=XXX,6,NOTE} when running it we get a different result:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
UX:cat: NOTE2: invalid syntax
|
||||||
|
TO FIX: refer to manual UX:cat:001
|
||||||
|
label:foo: NOTE: text
|
||||||
|
TO FIX: action tag
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
Now the third call the @code{fmtmsg} produced some output and we see how
|
||||||
|
the string @code{NOTE} from the environment variable appears in the
|
||||||
|
message.
|
||||||
|
|
||||||
|
Now we can reduce the output by specifying in which fields we are
|
||||||
|
interested in. If we additionally set the environment variable
|
||||||
|
@code{MSGVERB} to the value @code{severity:label:action} we get the
|
||||||
|
following output:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
UX:cat: NOTE2
|
||||||
|
TO FIX: refer to manual
|
||||||
|
label:foo: NOTE
|
||||||
|
TO FIX: action
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
I.e., the output produced by the @var{text} and the @var{tag} parameters
|
||||||
|
to @code{fmtmsg} vanished. Please also note the now there is no colon
|
||||||
|
after the @code{NOTE} and @code{NOTE2} strings in the output. This is
|
||||||
|
not necessary since there is no more output on this line since the text
|
||||||
|
is missing.
|
||||||
|
@ -321,7 +321,7 @@ res_querydomain(name, domain, class, type, answer, anslen)
|
|||||||
u_char *answer; /* buffer to put answer */
|
u_char *answer; /* buffer to put answer */
|
||||||
int anslen; /* size of answer */
|
int anslen; /* size of answer */
|
||||||
{
|
{
|
||||||
char nbuf[MAXDNAME];
|
char nbuf[MAXDNAME * 2 + 2];
|
||||||
const char *longname = nbuf;
|
const char *longname = nbuf;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#
|
#
|
||||||
subdir := stdlib
|
subdir := stdlib
|
||||||
|
|
||||||
headers := stdlib.h alloca.h monetary.h inttypes.h
|
headers := stdlib.h alloca.h monetary.h inttypes.h fmtmsg.h
|
||||||
|
|
||||||
routines := \
|
routines := \
|
||||||
atof atoi atol atoll \
|
atof atoi atol atoll \
|
||||||
@ -39,10 +39,12 @@ routines := \
|
|||||||
srand48_r seed48_r lcong48_r \
|
srand48_r seed48_r lcong48_r \
|
||||||
drand48-iter \
|
drand48-iter \
|
||||||
strtol strtoul strtoll strtoull \
|
strtol strtoul strtoll strtoull \
|
||||||
|
strtol_l strtoul_l strtoll_l strtoull_l \
|
||||||
strtof strtod strtold \
|
strtof strtod strtold \
|
||||||
|
strtof_l strtod_l strtold_l \
|
||||||
system canonicalize \
|
system canonicalize \
|
||||||
a64l l64a \
|
a64l l64a \
|
||||||
rpmatch strfmon strfmon_l getsubopt xpg_basename
|
rpmatch strfmon strfmon_l getsubopt xpg_basename fmtmsg
|
||||||
|
|
||||||
distribute := exit.h grouping.h abort-instr.h
|
distribute := exit.h grouping.h abort-instr.h
|
||||||
tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
|
tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
|
||||||
|
358
stdlib/fmtmsg.c
Normal file
358
stdlib/fmtmsg.c
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#include <fmtmsg.h>
|
||||||
|
#include <libc-lock.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/syslog.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* We have global data, protect the modification. */
|
||||||
|
__libc_lock_define_initialized (static, lock)
|
||||||
|
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
label_mask = 0x01,
|
||||||
|
severity_mask = 0x02,
|
||||||
|
text_mask = 0x04,
|
||||||
|
action_mask = 0x08,
|
||||||
|
tag_mask = 0x10,
|
||||||
|
all_mask = label_mask | severity_mask | text_mask | action_mask | tag_mask
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
size_t len;
|
||||||
|
} keywords[] =
|
||||||
|
{
|
||||||
|
{ "label", 5 },
|
||||||
|
{ "severity", 8 },
|
||||||
|
{ "text", 4 },
|
||||||
|
{ "action", 6},
|
||||||
|
{ "tag", 3 }
|
||||||
|
};
|
||||||
|
#define NKEYWORDS (sizeof( keywords) / sizeof (keywords[0]))
|
||||||
|
|
||||||
|
|
||||||
|
struct severity_info
|
||||||
|
{
|
||||||
|
int severity;
|
||||||
|
const char *string;
|
||||||
|
struct severity_info *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* List of known severities. */
|
||||||
|
static const struct severity_info nosev =
|
||||||
|
{
|
||||||
|
MM_NOSEV, "", NULL
|
||||||
|
};
|
||||||
|
static const struct severity_info haltsev =
|
||||||
|
{
|
||||||
|
MM_HALT, "HALT", (struct severity_info *) &nosev
|
||||||
|
};
|
||||||
|
static const struct severity_info errorsev =
|
||||||
|
{
|
||||||
|
MM_ERROR, "ERROR", (struct severity_info *) &haltsev
|
||||||
|
};
|
||||||
|
static const struct severity_info warningsev =
|
||||||
|
{
|
||||||
|
MM_WARNING, "WARNING", (struct severity_info *) &errorsev
|
||||||
|
};
|
||||||
|
static const struct severity_info infosev =
|
||||||
|
{
|
||||||
|
MM_INFO, "INFO", (struct severity_info *) &warningsev
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Start of the list. */
|
||||||
|
static struct severity_info *severity_list = (struct severity_info *) &infosev;
|
||||||
|
|
||||||
|
|
||||||
|
/* Prototypes for local functions. */
|
||||||
|
static int internal_addseverity (int severity, const char *string);
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
fmtmsg (long int classification, const char *label, int severity,
|
||||||
|
const char *text, const char *action, const char *tag)
|
||||||
|
{
|
||||||
|
static int print = -1;
|
||||||
|
int result = MM_OK;
|
||||||
|
struct severity_info *severity_rec;
|
||||||
|
|
||||||
|
if (print == -1)
|
||||||
|
{
|
||||||
|
__libc_lock_lock (lock);
|
||||||
|
|
||||||
|
if (print == -1)
|
||||||
|
{
|
||||||
|
const char *msgverb_var = getenv ("MSGVERB");
|
||||||
|
const char *sevlevel_var = getenv ("SEV_LEVEL");
|
||||||
|
|
||||||
|
if (msgverb_var != NULL && msgverb_var[0] != '\0')
|
||||||
|
{
|
||||||
|
/* Using this extra variable allows us to work without
|
||||||
|
locking. */
|
||||||
|
print = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t cnt;
|
||||||
|
|
||||||
|
for (cnt = 0; cnt < NKEYWORDS; ++cnt)
|
||||||
|
if (memcmp (msgverb_var,
|
||||||
|
keywords[cnt].name, keywords[cnt].len) == 0
|
||||||
|
&& (msgverb_var[keywords[cnt].len] == ':'
|
||||||
|
|| msgverb_var[keywords[cnt].len] == '\0'))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (cnt < NKEYWORDS)
|
||||||
|
{
|
||||||
|
print |= 1 << cnt;
|
||||||
|
|
||||||
|
msgverb_var += keywords[cnt].len;
|
||||||
|
if (msgverb_var[0] == ':')
|
||||||
|
++msgverb_var;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* We found an illegal keyword in the
|
||||||
|
environment variable. The specifications say
|
||||||
|
that we print all fields. */
|
||||||
|
print = all_mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (msgverb_var[0] != '\0');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
print = all_mask;
|
||||||
|
|
||||||
|
|
||||||
|
if (sevlevel_var != NULL)
|
||||||
|
while (sevlevel_var[0] != '\0')
|
||||||
|
{
|
||||||
|
const char *end = strchr (sevlevel_var, ':');
|
||||||
|
int level;
|
||||||
|
|
||||||
|
if (end == NULL)
|
||||||
|
end = strchr (sevlevel_var, '\0');
|
||||||
|
|
||||||
|
/* First field: keyword. This is not used here but it
|
||||||
|
must be present. */
|
||||||
|
while (sevlevel_var < end)
|
||||||
|
if (*sevlevel_var++ == ',')
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (sevlevel_var < end)
|
||||||
|
{
|
||||||
|
/* Second field: severity level, a number. */
|
||||||
|
char *cp;
|
||||||
|
|
||||||
|
level = strtol (sevlevel_var, &cp, 0);
|
||||||
|
if (cp != sevlevel_var && cp < end && *cp++ == ','
|
||||||
|
&& level > MM_INFO)
|
||||||
|
{
|
||||||
|
const char *new_string;
|
||||||
|
|
||||||
|
new_string = __strndup (cp, end - cp);
|
||||||
|
|
||||||
|
if (new_string != NULL
|
||||||
|
&& (internal_addseverity (level, new_string)
|
||||||
|
!= MM_OK))
|
||||||
|
free ((char *) new_string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sevlevel_var = end + (*end == ':' ? 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__libc_lock_unlock (lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Start the real work. First check whether the input is ok. */
|
||||||
|
if (label != MM_NULLLBL)
|
||||||
|
{
|
||||||
|
/* Must be two fields, separated by a colon. */
|
||||||
|
const char *cp = strchr (label, ':');
|
||||||
|
if (cp == NULL)
|
||||||
|
return MM_NOTOK;
|
||||||
|
|
||||||
|
/* The first field must not contain more then 10 bytes. */
|
||||||
|
if (cp - label > 10
|
||||||
|
/* The second field must not have more then 14 bytes. */
|
||||||
|
|| strlen (cp + 1) > 14)
|
||||||
|
return MM_NOTOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (severity_rec = severity_list; severity_rec != NULL;
|
||||||
|
severity_rec = severity_rec->next)
|
||||||
|
if (severity == severity_rec->severity)
|
||||||
|
/* Bingo. */
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* If we don't know anything about the severity level return an error. */
|
||||||
|
if (severity_rec == NULL)
|
||||||
|
return MM_NOTOK;
|
||||||
|
|
||||||
|
|
||||||
|
/* Now we can print. */
|
||||||
|
if (classification & MM_PRINT)
|
||||||
|
{
|
||||||
|
int do_label = (print & label_mask) && label != MM_NULLLBL;
|
||||||
|
int do_severity = (print & severity_mask) && severity != MM_NULLSEV;
|
||||||
|
int do_text = (print & text_mask) && text != MM_NULLTXT;
|
||||||
|
int do_action = (print & action_mask) && action != MM_NULLACT;
|
||||||
|
int do_tag = (print & tag_mask) && tag != MM_NULLTAG;
|
||||||
|
|
||||||
|
if (fprintf (stderr, "%s%s%s%s%s%s%s%s%s%s\n",
|
||||||
|
do_label ? label : "",
|
||||||
|
do_label && (do_severity | do_text) ? ": " : "",
|
||||||
|
do_severity ? severity_rec->string : "",
|
||||||
|
do_severity && do_text ? ": " : "",
|
||||||
|
do_text ? text : "",
|
||||||
|
(do_label | do_severity | do_text) && (do_action | do_tag)
|
||||||
|
? "\n" : "",
|
||||||
|
do_action ? "TO FIX: " : "",
|
||||||
|
do_action ? action : "",
|
||||||
|
do_action && do_tag ? " " : "",
|
||||||
|
do_tag ? tag : "") == EOF)
|
||||||
|
/* Oh, oh. An error occured during the output. */
|
||||||
|
result = MM_NOMSG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (classification & MM_CONSOLE)
|
||||||
|
{
|
||||||
|
int do_label = label != MM_NULLLBL;
|
||||||
|
int do_severity = severity != MM_NULLSEV;
|
||||||
|
int do_text = text != MM_NULLTXT;
|
||||||
|
int do_action = action != MM_NULLACT;
|
||||||
|
int do_tag = tag != MM_NULLTAG;
|
||||||
|
|
||||||
|
syslog (LOG_ERR, "%s%s%s%s%s%s%s%s%s%s\n",
|
||||||
|
do_label ? label : "",
|
||||||
|
do_label && (do_severity | do_text) ? ": " : "",
|
||||||
|
do_severity ? severity_rec->string : "",
|
||||||
|
do_severity && do_text ? ": " : "",
|
||||||
|
do_text ? text : "",
|
||||||
|
(do_label | do_severity | do_text) && (do_action | do_tag)
|
||||||
|
? "\n" : "",
|
||||||
|
do_action ? "TO FIX: " : "",
|
||||||
|
do_action ? action : "",
|
||||||
|
do_action && do_tag ? " " : "",
|
||||||
|
do_tag ? tag : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Add the new entry to the list. */
|
||||||
|
static int
|
||||||
|
internal_addseverity (int severity, const char *string)
|
||||||
|
{
|
||||||
|
struct severity_info *runp, *lastp;
|
||||||
|
int result = MM_OK;
|
||||||
|
|
||||||
|
/* First see if there is already a record for the severity level. */
|
||||||
|
for (runp = severity_list, lastp = NULL; runp != NULL; runp = runp-> next)
|
||||||
|
if (runp->severity == severity)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
lastp = runp;
|
||||||
|
|
||||||
|
if (runp != NULL)
|
||||||
|
{
|
||||||
|
/* Release old string. */
|
||||||
|
free ((char *) runp->string);
|
||||||
|
|
||||||
|
if (string != NULL)
|
||||||
|
/* Change the string. */
|
||||||
|
runp->string = string;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Remove the severity class. */
|
||||||
|
if (lastp == NULL)
|
||||||
|
severity_list = runp->next;
|
||||||
|
else
|
||||||
|
lastp->next = runp->next;
|
||||||
|
|
||||||
|
free (runp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (string != NULL)
|
||||||
|
{
|
||||||
|
runp = malloc (sizeof (*runp));
|
||||||
|
if (runp == NULL)
|
||||||
|
result = MM_NOTOK;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
runp->severity = severity;
|
||||||
|
runp->next = severity_list;
|
||||||
|
runp->string = string;
|
||||||
|
severity_list = runp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* We tried to remove a non-existing severity class. */
|
||||||
|
result = MM_NOTOK;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Add new severity level or remove old one. */
|
||||||
|
int
|
||||||
|
addseverity (int severity, const char *string)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
const char *new_string;
|
||||||
|
|
||||||
|
if (string == NULL)
|
||||||
|
/* We want to remove the severity class. */
|
||||||
|
new_string = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_string = __strdup (string);
|
||||||
|
|
||||||
|
if (new_string == NULL || severity <= MM_INFO)
|
||||||
|
/* Allocation failed or illegal value. */
|
||||||
|
return MM_NOTOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Protect the global data. */
|
||||||
|
__libc_lock_lock (lock);
|
||||||
|
|
||||||
|
/* Do the real work. */
|
||||||
|
result = internal_addseverity (severity, string);
|
||||||
|
|
||||||
|
if (result != MM_OK)
|
||||||
|
/* Free the allocated string. */
|
||||||
|
free ((char *) new_string);
|
||||||
|
|
||||||
|
/* Release the lock. */
|
||||||
|
__libc_lock_unlock (lock);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
107
stdlib/fmtmsg.h
Normal file
107
stdlib/fmtmsg.h
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/* Message display handling.
|
||||||
|
Copyright (C) 1997 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. */
|
||||||
|
|
||||||
|
#ifndef __FMTMSG_H
|
||||||
|
|
||||||
|
#define __FMTMSG_H 1
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
|
#define __need_NULL
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
/* Values to control `fmtmsg' function. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
MM_HARD = 0x001, /* Source of the condition is hardware. */
|
||||||
|
#define MM_HARD MM_HARD
|
||||||
|
MM_SOFT = 0x002, /* Source of the condition is software. */
|
||||||
|
#define MM_SOFT MM_SOFT
|
||||||
|
MM_FIRM = 0x004, /* Source of the condition is firmware. */
|
||||||
|
#define MM_FIRM MM_FIRM
|
||||||
|
MM_APPL = 0x008, /* Condition detected by application. */
|
||||||
|
#define MM_APPL MM_APPL
|
||||||
|
MM_UTIL = 0x010, /* Condition detected by utility. */
|
||||||
|
#define MM_UTIL MM_UTIL
|
||||||
|
MM_OPSYS = 0x020, /* Condition detected by operating system. */
|
||||||
|
#define MM_OPSYS MM_OPSYS
|
||||||
|
MM_RECOVER = 0x040, /* Recoverable error. */
|
||||||
|
#define MM_RECOVER MM_RECOVER
|
||||||
|
MM_NRECOV = 0x080, /* Non-recoverable error. */
|
||||||
|
#define MM_NRECOV MM_NRECOV
|
||||||
|
MM_PRINT = 0x100, /* Display message in standard error. */
|
||||||
|
#define MM_PRINT MM_PRINT
|
||||||
|
MM_CONSOLE = 0x200 /* Display message on system console. */
|
||||||
|
#define MM_CONSOLE MM_CONSOLE
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Values to be for SEVERITY parameter of `fmtmsg'. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
MM_NOSEV = 0, /* No severity level provided for the message. */
|
||||||
|
#define MM_NOSEV MM_NOSEV
|
||||||
|
MM_HALT, /* Error causing application to halt. */
|
||||||
|
#define MM_HALT MM_HALT
|
||||||
|
MM_ERROR, /* Application has encountered a non-fatal fault. */
|
||||||
|
#define MM_ERROR MM_ERROR
|
||||||
|
MM_WARNING, /* Application has detected unusual non-error
|
||||||
|
condition. */
|
||||||
|
#define MM_WARNING MM_WARNING
|
||||||
|
MM_INFO /* Informative message. */
|
||||||
|
#define MM_INFO MM_INFO
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Macros which can be used as null values for the arguments of `fmtmsg'. */
|
||||||
|
#define MM_NULLLBL NULL
|
||||||
|
#define MM_NULLSEV 0
|
||||||
|
#define MM_NULLMC ((long int) 0)
|
||||||
|
#define MM_NULLTXT NULL
|
||||||
|
#define MM_NULLACT NULL
|
||||||
|
#define MM_NULLTAG NULL
|
||||||
|
|
||||||
|
|
||||||
|
/* Possible return values of `fmtmsg'. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
MM_NOTOK = -1,
|
||||||
|
#define MM_NOTOK MM_NOTOK
|
||||||
|
MM_OK = 0,
|
||||||
|
#define MM_OK MM_OK
|
||||||
|
MM_NOMSG = 1,
|
||||||
|
#define MM_NOMSG MM_NOMSG
|
||||||
|
MM_NOCON = 4
|
||||||
|
#define MM_NOCON MM_NOCON
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Print message with given CLASSIFICATION, LABEL, SEVERITY, TEXT, ACTION
|
||||||
|
and TAG to console or standard error. */
|
||||||
|
extern int fmtmsg __P ((long int __classification, __const char *__label,
|
||||||
|
int __severity, __const char *__text,
|
||||||
|
__const char *__action, __const char *__tag));
|
||||||
|
|
||||||
|
/* Add or remove severity level. */
|
||||||
|
extern int addseverity __P ((int __severity, __const char *__string));
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* fmtmsg.h */
|
@ -128,6 +128,53 @@ extern unsigned long long int strtoull __P ((__const char *__restrict __nptr,
|
|||||||
#endif /* ISO C 9X or GCC and use MISC. */
|
#endif /* ISO C 9X or GCC and use MISC. */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
/* The concept of one static locale per category is not very well
|
||||||
|
thought out. Many applications will need to process its data using
|
||||||
|
information from several different locales. Another application is
|
||||||
|
the implementation of the internationalization handling in the
|
||||||
|
upcoming ISO C++ standard library. To support this another set of
|
||||||
|
the functions using locale data exist which have an additional
|
||||||
|
argument.
|
||||||
|
|
||||||
|
Attention: all these functions are *not* standardized in any form.
|
||||||
|
This is a proof-of-concept implementation. */
|
||||||
|
|
||||||
|
/* Structure for reentrant locale using functions. This is an
|
||||||
|
(almost) opaque type for the user level programs. */
|
||||||
|
# include <xlocale.h>
|
||||||
|
|
||||||
|
/* Special versions of the functions above which take the locale to
|
||||||
|
use as an additional parameter. */
|
||||||
|
extern long int __strtol_l __P ((__const char *__restrict __nptr,
|
||||||
|
char **__restrict __endptr, int __base,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern unsigned long int __strtoul_l __P ((__const char *__restrict __nptr,
|
||||||
|
char **__restrict __endptr,
|
||||||
|
int __base, __locale_t __loc));
|
||||||
|
|
||||||
|
extern long long int __strtoll_l __P ((__const char *__restrict __nptr,
|
||||||
|
char **__restrict __endptr, int __base,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern unsigned long long int __strtoull_l __P ((__const char *__restrict
|
||||||
|
__nptr,
|
||||||
|
char **__restrict __endptr,
|
||||||
|
int __base,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern double __strtod_l __P ((__const char *__restrict __nptr,
|
||||||
|
char **__restrict __endptr, __locale_t __loc));
|
||||||
|
|
||||||
|
extern float __strtof_l __P ((__const char *__restrict __nptr,
|
||||||
|
char **__restrict __endptr, __locale_t __loc));
|
||||||
|
|
||||||
|
extern __long_double_t __strtold_l __P ((__const char *__restrict __nptr,
|
||||||
|
char **__restrict __endptr,
|
||||||
|
__locale_t __loc));
|
||||||
|
#endif /* GNU */
|
||||||
|
|
||||||
|
|
||||||
/* The internal entry points for `strtoX' take an extra flag argument
|
/* The internal entry points for `strtoX' take an extra flag argument
|
||||||
saying whether or not to parse locale-dependent number grouping. */
|
saying whether or not to parse locale-dependent number grouping. */
|
||||||
|
107
stdlib/strtod.c
107
stdlib/strtod.c
@ -25,9 +25,17 @@
|
|||||||
# define FLOAT double
|
# define FLOAT double
|
||||||
# define FLT DBL
|
# define FLT DBL
|
||||||
# ifdef USE_WIDE_CHAR
|
# ifdef USE_WIDE_CHAR
|
||||||
# define STRTOF wcstod
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define STRTOF __wcstod_l
|
||||||
|
# else
|
||||||
|
# define STRTOF wcstod
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define STRTOF strtod
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define STRTOF __strtod_l
|
||||||
|
# else
|
||||||
|
# define STRTOF strtod
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# define MPN2FLOAT __mpn_construct_double
|
# define MPN2FLOAT __mpn_construct_double
|
||||||
# define FLOAT_HUGE_VAL HUGE_VAL
|
# define FLOAT_HUGE_VAL HUGE_VAL
|
||||||
@ -40,30 +48,6 @@
|
|||||||
u.ieee.mantissa1 = (mant) & 0xffffffff; \
|
u.ieee.mantissa1 = (mant) & 0xffffffff; \
|
||||||
} while (0)
|
} while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_WIDE_CHAR
|
|
||||||
# include <wctype.h>
|
|
||||||
# include <wchar.h>
|
|
||||||
# define STRING_TYPE wchar_t
|
|
||||||
# define CHAR_TYPE wint_t
|
|
||||||
# define L_(Ch) L##Ch
|
|
||||||
# define ISSPACE(Ch) iswspace (Ch)
|
|
||||||
# define ISDIGIT(Ch) iswdigit (Ch)
|
|
||||||
# define ISXDIGIT(Ch) iswxdigit (Ch)
|
|
||||||
# define TOLOWER(Ch) towlower (Ch)
|
|
||||||
# define STRNCASECMP(S1, S2, N) __wcsncasecmp ((S1), (S2), (N))
|
|
||||||
# define STRTOULL(S, E, B) wcstoull ((S), (E), (B))
|
|
||||||
#else
|
|
||||||
# define STRING_TYPE char
|
|
||||||
# define CHAR_TYPE char
|
|
||||||
# define L_(Ch) Ch
|
|
||||||
# define ISSPACE(Ch) isspace (Ch)
|
|
||||||
# define ISDIGIT(Ch) isdigit (Ch)
|
|
||||||
# define ISXDIGIT(Ch) isxdigit (Ch)
|
|
||||||
# define TOLOWER(Ch) tolower (Ch)
|
|
||||||
# define STRNCASECMP(S1, S2, N) __strncasecmp ((S1), (S2), (N))
|
|
||||||
# define STRTOULL(S, E, B) strtoull ((S), (E), (B))
|
|
||||||
#endif
|
|
||||||
/* End of configuration part. */
|
/* End of configuration part. */
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -88,6 +72,65 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* We use this code also for the extended locale handling where the
|
||||||
|
function gets as an additional argument the locale which has to be
|
||||||
|
used. To access the values we have to redefine the _NL_CURRENT
|
||||||
|
macro. */
|
||||||
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# undef _NL_CURRENT
|
||||||
|
# define _NL_CURRENT(category, item) \
|
||||||
|
(current->values[_NL_ITEM_INDEX (item)].string)
|
||||||
|
# define LOCALE_PARAM , loc
|
||||||
|
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||||
|
#else
|
||||||
|
# define LOCALE_PARAM
|
||||||
|
# define LOCALE_PARAM_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_WIDE_CHAR
|
||||||
|
# include <wctype.h>
|
||||||
|
# include <wchar.h>
|
||||||
|
# define STRING_TYPE wchar_t
|
||||||
|
# define CHAR_TYPE wint_t
|
||||||
|
# define L_(Ch) L##Ch
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
|
||||||
|
# define ISDIGIT(Ch) __iswdigit_l ((Ch), loc)
|
||||||
|
# define ISXDIGIT(Ch) __iswxdigit_l ((Ch), loc)
|
||||||
|
# define TOLOWER(Ch) __towlower_l ((Ch), loc)
|
||||||
|
# define STRNCASECMP(S1, S2, N) __wcsncasecmp_l ((S1), (S2), (N), loc)
|
||||||
|
# define STRTOULL(S, E, B) __wcstoull_l ((S), (E), (B), loc)
|
||||||
|
# else
|
||||||
|
# define ISSPACE(Ch) iswspace (Ch)
|
||||||
|
# define ISDIGIT(Ch) iswdigit (Ch)
|
||||||
|
# define ISXDIGIT(Ch) iswxdigit (Ch)
|
||||||
|
# define TOLOWER(Ch) towlower (Ch)
|
||||||
|
# define STRNCASECMP(S1, S2, N) __wcsncasecmp ((S1), (S2), (N))
|
||||||
|
# define STRTOULL(S, E, B) wcstoull ((S), (E), (B))
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define STRING_TYPE char
|
||||||
|
# define CHAR_TYPE char
|
||||||
|
# define L_(Ch) Ch
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define ISSPACE(Ch) __isspace_l ((Ch), loc)
|
||||||
|
# define ISDIGIT(Ch) __isdigit_l ((Ch), loc)
|
||||||
|
# define ISXDIGIT(Ch) __isxdigit_l ((Ch), loc)
|
||||||
|
# define TOLOWER(Ch) __tolower_l ((Ch), loc)
|
||||||
|
# define STRNCASECMP(S1, S2, N) __strncasecmp_l ((S1), (S2), (N), loc)
|
||||||
|
# define STRTOULL(S, E, B) __strtoull_l ((S), (E), (B), loc)
|
||||||
|
# else
|
||||||
|
# define ISSPACE(Ch) isspace (Ch)
|
||||||
|
# define ISDIGIT(Ch) isdigit (Ch)
|
||||||
|
# define ISXDIGIT(Ch) isxdigit (Ch)
|
||||||
|
# define TOLOWER(Ch) tolower (Ch)
|
||||||
|
# define STRNCASECMP(S1, S2, N) __strncasecmp ((S1), (S2), (N))
|
||||||
|
# define STRTOULL(S, E, B) strtoull ((S), (E), (B))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Constants we need from float.h; select the set for the FLOAT precision. */
|
/* Constants we need from float.h; select the set for the FLOAT precision. */
|
||||||
#define MANT_DIG PASTE(FLT,_MANT_DIG)
|
#define MANT_DIG PASTE(FLT,_MANT_DIG)
|
||||||
#define DIG PASTE(FLT,_DIG)
|
#define DIG PASTE(FLT,_DIG)
|
||||||
@ -354,10 +397,11 @@ __mpn_lshift_1 (mp_limb_t *ptr, mp_size_t size, unsigned int count,
|
|||||||
return 0.0. If the number is too big to be represented, set `errno' to
|
return 0.0. If the number is too big to be represented, set `errno' to
|
||||||
ERANGE and return HUGE_VAL with the appropriate sign. */
|
ERANGE and return HUGE_VAL with the appropriate sign. */
|
||||||
FLOAT
|
FLOAT
|
||||||
INTERNAL (STRTOF) (nptr, endptr, group)
|
INTERNAL (STRTOF) (nptr, endptr, group LOCALE_PARAM)
|
||||||
const STRING_TYPE *nptr;
|
const STRING_TYPE *nptr;
|
||||||
STRING_TYPE **endptr;
|
STRING_TYPE **endptr;
|
||||||
int group;
|
int group;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
int negative; /* The sign of the number. */
|
int negative; /* The sign of the number. */
|
||||||
MPN_VAR (num); /* MP representation of the number. */
|
MPN_VAR (num); /* MP representation of the number. */
|
||||||
@ -400,6 +444,10 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
|||||||
in the format described in <locale.h>. */
|
in the format described in <locale.h>. */
|
||||||
const char *grouping;
|
const char *grouping;
|
||||||
|
|
||||||
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
struct locale_data *current = loc->__locales[LC_NUMERIC];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (group)
|
if (group)
|
||||||
{
|
{
|
||||||
grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
|
grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
|
||||||
@ -1352,9 +1400,10 @@ FLOAT
|
|||||||
#ifdef weak_function
|
#ifdef weak_function
|
||||||
weak_function
|
weak_function
|
||||||
#endif
|
#endif
|
||||||
STRTOF (nptr, endptr)
|
STRTOF (nptr, endptr LOCALE_PARAM)
|
||||||
const STRING_TYPE *nptr;
|
const STRING_TYPE *nptr;
|
||||||
STRING_TYPE **endptr;
|
STRING_TYPE **endptr;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
return INTERNAL (STRTOF) (nptr, endptr, 0);
|
return INTERNAL (STRTOF) (nptr, endptr, 0 LOCALE_PARAM);
|
||||||
}
|
}
|
||||||
|
25
stdlib/strtod_l.c
Normal file
25
stdlib/strtod_l.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* Convert string representing a number to float value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
|
||||||
|
|
||||||
|
#include <strtod.c>
|
@ -3,7 +3,11 @@
|
|||||||
|
|
||||||
#define FLOAT float
|
#define FLOAT float
|
||||||
#define FLT FLT
|
#define FLT FLT
|
||||||
#define STRTOF strtof
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define STRTOF __strtof_l
|
||||||
|
#else
|
||||||
|
# define STRTOF strtof
|
||||||
|
#endif
|
||||||
#define MPN2FLOAT __mpn_construct_float
|
#define MPN2FLOAT __mpn_construct_float
|
||||||
#define FLOAT_HUGE_VAL HUGE_VALF
|
#define FLOAT_HUGE_VAL HUGE_VALF
|
||||||
#define SET_MANTISSA(flt, mant) \
|
#define SET_MANTISSA(flt, mant) \
|
||||||
|
25
stdlib/strtof_l.c
Normal file
25
stdlib/strtof_l.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* Convert string representing a number to float value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern float ____strtof_l_internal (const char *, char **, int, __locale_t);
|
||||||
|
|
||||||
|
#include <strtof.c>
|
121
stdlib/strtol.c
121
stdlib/strtol.c
@ -64,30 +64,62 @@ extern int errno;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Determine the name. */
|
/* Determine the name. */
|
||||||
#if UNSIGNED
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
# ifdef USE_WIDE_CHAR
|
# if UNSIGNED
|
||||||
# ifdef QUAD
|
# ifdef USE_WIDE_CHAR
|
||||||
# define strtol wcstoull
|
# ifdef QUAD
|
||||||
|
# define strtol __wcstoull_l
|
||||||
|
# else
|
||||||
|
# define strtol __wcstoul_l
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define strtol wcstoul
|
# ifdef QUAD
|
||||||
|
# define strtol __strtoull_l
|
||||||
|
# else
|
||||||
|
# define strtol __strtoul_l
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
# ifdef QUAD
|
# ifdef USE_WIDE_CHAR
|
||||||
# define strtol strtoull
|
# ifdef QUAD
|
||||||
|
# define strtol __wcstoll_l
|
||||||
|
# else
|
||||||
|
# define strtol __wcstol_l
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define strtol strtoul
|
# ifdef QUAD
|
||||||
|
# define strtol __strtoll_l
|
||||||
|
# else
|
||||||
|
# define strtol __strtol_l
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef USE_WIDE_CHAR
|
# if UNSIGNED
|
||||||
# ifdef QUAD
|
# ifdef USE_WIDE_CHAR
|
||||||
# define strtol wcstoll
|
# ifdef QUAD
|
||||||
|
# define strtol wcstoull
|
||||||
|
# else
|
||||||
|
# define strtol wcstoul
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define strtol wcstol
|
# ifdef QUAD
|
||||||
|
# define strtol strtoull
|
||||||
|
# else
|
||||||
|
# define strtol strtoul
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
# ifdef QUAD
|
# ifdef USE_WIDE_CHAR
|
||||||
# define strtol strtoll
|
# ifdef QUAD
|
||||||
|
# define strtol wcstoll
|
||||||
|
# else
|
||||||
|
# define strtol wcstol
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# ifdef QUAD
|
||||||
|
# define strtol strtoll
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -119,22 +151,51 @@ extern int errno;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* We use this code also for the extended locale handling where the
|
||||||
|
function gets as an additional argument the locale which has to be
|
||||||
|
used. To access the values we have to redefine the _NL_CURRENT
|
||||||
|
macro. */
|
||||||
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# undef _NL_CURRENT
|
||||||
|
# define _NL_CURRENT(category, item) \
|
||||||
|
(current->values[_NL_ITEM_INDEX (item)].string)
|
||||||
|
# define LOCALE_PARAM , loc
|
||||||
|
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||||
|
#else
|
||||||
|
# define LOCALE_PARAM
|
||||||
|
# define LOCALE_PARAM_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_WIDE_CHAR
|
#ifdef USE_WIDE_CHAR
|
||||||
# include <wchar.h>
|
# include <wchar.h>
|
||||||
# include <wctype.h>
|
# include <wctype.h>
|
||||||
# define L_(Ch) L##Ch
|
# define L_(Ch) L##Ch
|
||||||
# define UCHAR_TYPE wint_t
|
# define UCHAR_TYPE wint_t
|
||||||
# define STRING_TYPE wchar_t
|
# define STRING_TYPE wchar_t
|
||||||
# define ISSPACE(Ch) iswspace (Ch)
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
# define ISALPHA(Ch) iswalpha (Ch)
|
# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
|
||||||
# define TOUPPER(Ch) towupper (Ch)
|
# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
|
||||||
#else
|
# define TOUPPER(Ch) __towupper_l ((Ch), loc)
|
||||||
# define L_(Ch) Ch
|
# else
|
||||||
# define UCHAR_TYPE unsigned char
|
# define ISSPACE(Ch) iswspace (Ch)
|
||||||
# define STRING_TYPE char
|
# define ISALPHA(Ch) iswalpha (Ch)
|
||||||
# define ISSPACE(Ch) isspace (Ch)
|
# define TOUPPER(Ch) towupper (Ch)
|
||||||
# define ISALPHA(Ch) isalpha (Ch)
|
# endif
|
||||||
# define TOUPPER(Ch) toupper (Ch)
|
# else
|
||||||
|
# define L_(Ch) Ch
|
||||||
|
# define UCHAR_TYPE unsigned char
|
||||||
|
# define STRING_TYPE char
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define ISSPACE(Ch) __isspace_l ((Ch), loc)
|
||||||
|
# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
|
||||||
|
# define TOUPPER(Ch) __toupper_l ((Ch), loc)
|
||||||
|
# else
|
||||||
|
# define ISSPACE(Ch) isspace (Ch)
|
||||||
|
# define ISALPHA(Ch) isalpha (Ch)
|
||||||
|
# define TOUPPER(Ch) toupper (Ch)
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
@ -151,6 +212,7 @@ extern int errno;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
|
/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
|
||||||
If BASE is 0 the base is determined by the presence of a leading
|
If BASE is 0 the base is determined by the presence of a leading
|
||||||
zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
|
zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
|
||||||
@ -159,11 +221,12 @@ extern int errno;
|
|||||||
one converted is stored in *ENDPTR. */
|
one converted is stored in *ENDPTR. */
|
||||||
|
|
||||||
INT
|
INT
|
||||||
INTERNAL (strtol) (nptr, endptr, base, group)
|
INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM)
|
||||||
const STRING_TYPE *nptr;
|
const STRING_TYPE *nptr;
|
||||||
STRING_TYPE **endptr;
|
STRING_TYPE **endptr;
|
||||||
int base;
|
int base;
|
||||||
int group;
|
int group;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
int negative;
|
int negative;
|
||||||
register unsigned LONG int cutoff;
|
register unsigned LONG int cutoff;
|
||||||
@ -175,6 +238,9 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
|||||||
int overflow;
|
int overflow;
|
||||||
|
|
||||||
#ifdef USE_NUMBER_GROUPING
|
#ifdef USE_NUMBER_GROUPING
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
struct locale_data *current = loc->__locales[LC_NUMERIC];
|
||||||
|
# endif
|
||||||
/* The thousands character of the current locale. */
|
/* The thousands character of the current locale. */
|
||||||
wchar_t thousands;
|
wchar_t thousands;
|
||||||
/* The numeric grouping specification of the current locale,
|
/* The numeric grouping specification of the current locale,
|
||||||
@ -362,10 +428,11 @@ INT
|
|||||||
#ifdef weak_function
|
#ifdef weak_function
|
||||||
weak_function
|
weak_function
|
||||||
#endif
|
#endif
|
||||||
strtol (nptr, endptr, base)
|
strtol (nptr, endptr, base LOCALE_PARAM)
|
||||||
const STRING_TYPE *nptr;
|
const STRING_TYPE *nptr;
|
||||||
STRING_TYPE **endptr;
|
STRING_TYPE **endptr;
|
||||||
int base;
|
int base;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
return INTERNAL (strtol) (nptr, endptr, base, 0);
|
return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
|
||||||
}
|
}
|
||||||
|
26
stdlib/strtol_l.c
Normal file
26
stdlib/strtol_l.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern long int ____strtol_l_internal (const char *, char **, int, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <strtol.c>
|
@ -3,7 +3,11 @@
|
|||||||
|
|
||||||
#define FLOAT long double
|
#define FLOAT long double
|
||||||
#define FLT LDBL
|
#define FLT LDBL
|
||||||
#define STRTOF strtold
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define STRTOF __strtold_l
|
||||||
|
#else
|
||||||
|
# define STRTOF strtold
|
||||||
|
#endif
|
||||||
#define MPN2FLOAT __mpn_construct_long_double
|
#define MPN2FLOAT __mpn_construct_long_double
|
||||||
#define FLOAT_HUGE_VAL HUGE_VALL
|
#define FLOAT_HUGE_VAL HUGE_VALL
|
||||||
#define SET_MANTISSA(flt, mant) \
|
#define SET_MANTISSA(flt, mant) \
|
||||||
|
26
stdlib/strtold_l.c
Normal file
26
stdlib/strtold_l.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* Convert string representing a number to float value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern long double ____strtold_l_internal (const char *, char **, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <strtold.c>
|
26
stdlib/strtoll_l.c
Normal file
26
stdlib/strtoll_l.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern long long int ____strtoll_l_internal (const char *, char **, int, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <strtoll.c>
|
26
stdlib/strtoul_l.c
Normal file
26
stdlib/strtoul_l.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern unsigned long int ____strtoul_l_internal (const char *, char **, int,
|
||||||
|
int, __locale_t);
|
||||||
|
|
||||||
|
#include <strtoul.c>
|
26
stdlib/strtoull_l.c
Normal file
26
stdlib/strtoull_l.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern unsigned long long int ____strtoull_l_internal (const char *, char **,
|
||||||
|
int, int, __locale_t);
|
||||||
|
|
||||||
|
#include <strtoull.c>
|
@ -24,14 +24,14 @@ subdir := string
|
|||||||
headers := string.h strings.h memory.h endian.h bytesex.h \
|
headers := string.h strings.h memory.h endian.h bytesex.h \
|
||||||
argz.h envz.h
|
argz.h envz.h
|
||||||
|
|
||||||
routines := strcat strchr strcmp strcoll strcpy strcspn strverscmp \
|
routines := strcat strchr strcmp strcoll strcpy strcspn \
|
||||||
strdup strndup \
|
strverscmp strdup strndup \
|
||||||
strerror _strerror strerror_r strlen strnlen \
|
strerror _strerror strerror_r strlen strnlen \
|
||||||
strncat strncmp strncpy \
|
strncat strncmp strncpy \
|
||||||
strrchr strpbrk strsignal strspn strstr strtok \
|
strrchr strpbrk strsignal strspn strstr strtok \
|
||||||
strtok_r strxfrm memchr memcmp memmove memset \
|
strtok_r strxfrm memchr memcmp memmove memset \
|
||||||
bcopy bzero ffs stpcpy stpncpy \
|
bcopy bzero ffs stpcpy stpncpy \
|
||||||
strcasecmp strncase \
|
strcasecmp strncase strcasecmp_l strncase_l \
|
||||||
memccpy memcpy wordcopy strsep \
|
memccpy memcpy wordcopy strsep \
|
||||||
swab strfry memfrob memmem \
|
swab strfry memfrob memmem \
|
||||||
$(addprefix argz-,append count create ctsep next \
|
$(addprefix argz-,append count create ctsep next \
|
||||||
|
@ -233,6 +233,16 @@ extern int strncasecmp __P ((__const char *__s1, __const char *__s2,
|
|||||||
size_t __n));
|
size_t __n));
|
||||||
#endif /* Use BSD or X/Open Unix. */
|
#endif /* Use BSD or X/Open Unix. */
|
||||||
|
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
/* Again versions of a few functions which use the given locale instead
|
||||||
|
of the global one. */
|
||||||
|
extern int __strcasecmp_l __P ((__const char *__s1, __const char *__s2,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern int __strncasecmp_l __P ((__const char *__s1, __const char *__s2,
|
||||||
|
size_t __n, __locale_t __loc));
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __USE_BSD
|
#ifdef __USE_BSD
|
||||||
/* Return the next DELIM-delimited token from *STRINGP,
|
/* Return the next DELIM-delimited token from *STRINGP,
|
||||||
terminating it with a '\0', and update *STRINGP to point past it. */
|
terminating it with a '\0', and update *STRINGP to point past it. */
|
||||||
|
@ -112,7 +112,8 @@ program RUSERSPROG {
|
|||||||
% int uta_cnt;
|
% int uta_cnt;
|
||||||
%};
|
%};
|
||||||
%typedef struct utmparr utmparr;
|
%typedef struct utmparr utmparr;
|
||||||
%int xdr_utmparr(XDR *xdrs, struct utmparr *objp);
|
%
|
||||||
|
%extern bool_t xdr_utmparr __P ((XDR *xdrs, struct utmparr *objp));
|
||||||
%
|
%
|
||||||
%struct utmpidle {
|
%struct utmpidle {
|
||||||
% struct ru_utmp ui_utmp;
|
% struct ru_utmp ui_utmp;
|
||||||
@ -124,7 +125,7 @@ program RUSERSPROG {
|
|||||||
% int uia_cnt;
|
% int uia_cnt;
|
||||||
%};
|
%};
|
||||||
%
|
%
|
||||||
%int xdr_utmpidlearr(XDR *xdrs, struct utmpidlearr *objp);
|
%extern bool_t xdr_utmpidlearr __P ((XDR *xdrs, struct utmpidlearr *objp));
|
||||||
%
|
%
|
||||||
%#ifdef __cplusplus
|
%#ifdef __cplusplus
|
||||||
%}
|
%}
|
||||||
@ -133,6 +134,8 @@ program RUSERSPROG {
|
|||||||
|
|
||||||
|
|
||||||
#ifdef RPC_XDR
|
#ifdef RPC_XDR
|
||||||
|
%bool_t xdr_utmp (XDR *xdrs, struct ru_utmp *objp);
|
||||||
|
%
|
||||||
%bool_t
|
%bool_t
|
||||||
%xdr_utmp(xdrs, objp)
|
%xdr_utmp(xdrs, objp)
|
||||||
% XDR *xdrs;
|
% XDR *xdrs;
|
||||||
@ -161,13 +164,15 @@ program RUSERSPROG {
|
|||||||
% return (TRUE);
|
% return (TRUE);
|
||||||
%}
|
%}
|
||||||
%
|
%
|
||||||
|
%bool_t xdr_utmpptr(XDR *xdrs, struct ru_utmp **objpp);
|
||||||
|
%
|
||||||
%bool_t
|
%bool_t
|
||||||
%xdr_utmpptr(xdrs, objpp)
|
%xdr_utmpptr(xdrs, objpp)
|
||||||
% XDR *xdrs;
|
% XDR *xdrs;
|
||||||
% struct ru_utmp **objpp;
|
% struct ru_utmp **objpp;
|
||||||
%{
|
%{
|
||||||
% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp),
|
% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp),
|
||||||
% xdr_utmp)) {
|
% (xdrproc_t) xdr_utmp)) {
|
||||||
% return (FALSE);
|
% return (FALSE);
|
||||||
% }
|
% }
|
||||||
% return (TRUE);
|
% return (TRUE);
|
||||||
@ -179,12 +184,15 @@ program RUSERSPROG {
|
|||||||
% struct utmparr *objp;
|
% struct utmparr *objp;
|
||||||
%{
|
%{
|
||||||
% if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt,
|
% if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt,
|
||||||
% MAXUSERS, sizeof(struct ru_utmp *), xdr_utmpptr)) {
|
% MAXUSERS, sizeof(struct ru_utmp *),
|
||||||
|
% (xdrproc_t) xdr_utmpptr)) {
|
||||||
% return (FALSE);
|
% return (FALSE);
|
||||||
% }
|
% }
|
||||||
% return (TRUE);
|
% return (TRUE);
|
||||||
%}
|
%}
|
||||||
%
|
%
|
||||||
|
%bool_t xdr_utmpidle(XDR *xdrs, struct utmpidle *objp);
|
||||||
|
%
|
||||||
%bool_t
|
%bool_t
|
||||||
%xdr_utmpidle(xdrs, objp)
|
%xdr_utmpidle(xdrs, objp)
|
||||||
% XDR *xdrs;
|
% XDR *xdrs;
|
||||||
@ -199,13 +207,15 @@ program RUSERSPROG {
|
|||||||
% return (TRUE);
|
% return (TRUE);
|
||||||
%}
|
%}
|
||||||
%
|
%
|
||||||
|
%bool_t xdr_utmpidleptr(XDR *xdrs, struct utmpidle **objp);
|
||||||
|
%
|
||||||
%bool_t
|
%bool_t
|
||||||
%xdr_utmpidleptr(xdrs, objpp)
|
%xdr_utmpidleptr(xdrs, objpp)
|
||||||
% XDR *xdrs;
|
% XDR *xdrs;
|
||||||
% struct utmpidle **objpp;
|
% struct utmpidle **objpp;
|
||||||
%{
|
%{
|
||||||
% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle),
|
% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle),
|
||||||
% xdr_utmpidle)) {
|
% (xdrproc_t) xdr_utmpidle)) {
|
||||||
% return (FALSE);
|
% return (FALSE);
|
||||||
% }
|
% }
|
||||||
% return (TRUE);
|
% return (TRUE);
|
||||||
@ -217,7 +227,8 @@ program RUSERSPROG {
|
|||||||
% struct utmpidlearr *objp;
|
% struct utmpidlearr *objp;
|
||||||
%{
|
%{
|
||||||
% if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt,
|
% if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt,
|
||||||
% MAXUSERS, sizeof(struct utmpidle *), xdr_utmpidleptr)) {
|
% MAXUSERS, sizeof(struct utmpidle *),
|
||||||
|
% (xdrproc_t) xdr_utmpidleptr)) {
|
||||||
% return (FALSE);
|
% return (FALSE);
|
||||||
% }
|
% }
|
||||||
% return (TRUE);
|
% return (TRUE);
|
||||||
|
@ -86,7 +86,7 @@ elf_machine_load_address (void)
|
|||||||
/* Set up the loaded object described by L so its unrelocated PLT
|
/* Set up the loaded object described by L so its unrelocated PLT
|
||||||
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
||||||
|
|
||||||
static inline void
|
static inline int
|
||||||
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||||
{
|
{
|
||||||
Elf64_Addr plt;
|
Elf64_Addr plt;
|
||||||
@ -104,7 +104,13 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
|||||||
|
|
||||||
/* Identify this shared object */
|
/* Identify this shared object */
|
||||||
*(Elf64_Addr *)(plt + 24) = (Elf64_Addr) l;
|
*(Elf64_Addr *)(plt + 24) = (Elf64_Addr) l;
|
||||||
|
|
||||||
|
/* If the first instruction of the plt entry is not
|
||||||
|
"br $28, plt0", we cannot do lazy relocation. */
|
||||||
|
lazy = (*(unsigned *)(plt + 32) == 0xc39ffff7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return lazy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||||
@ -145,9 +151,11 @@ _dl_runtime_resolve:
|
|||||||
.prologue 1
|
.prologue 1
|
||||||
/* Set up the arguments for _dl_runtime_resolve. */
|
/* Set up the arguments for _dl_runtime_resolve. */
|
||||||
/* $16 = link_map out of plt0 */
|
/* $16 = link_map out of plt0 */
|
||||||
|
/* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */
|
||||||
|
subq $28, $27, $17
|
||||||
ldq $16, 8($27)
|
ldq $16, 8($27)
|
||||||
/* $17 = offset of reloc entry */
|
subq $17, 20, $17
|
||||||
mov $28, $17
|
addq $17, $17, $17
|
||||||
/* Do the fixup */
|
/* Do the fixup */
|
||||||
bsr $26, fixup..ng
|
bsr $26, fixup..ng
|
||||||
/* Move the destination address into position. */
|
/* Move the destination address into position. */
|
||||||
@ -290,14 +298,18 @@ elf_alpha_fix_plt(struct link_map *l,
|
|||||||
lo = (short)hi;
|
lo = (short)hi;
|
||||||
hi = (hi - lo) >> 16;
|
hi = (hi - lo) >> 16;
|
||||||
|
|
||||||
/* Emit "ldah $27,H($27)" */
|
|
||||||
plte[0] = 0x277b0000 | (hi & 0xffff);
|
|
||||||
|
|
||||||
/* Emit "lda $27,L($27)" */
|
/* Emit "lda $27,L($27)" */
|
||||||
plte[1] = 0x237b0000 | (lo & 0xffff);
|
plte[1] = 0x237b0000 | (lo & 0xffff);
|
||||||
|
|
||||||
/* Emit "br $31,function" */
|
/* Emit "br $31,function" */
|
||||||
plte[2] = 0xc3e00000 | (edisp & 0x1fffff);
|
plte[2] = 0xc3e00000 | (edisp & 0x1fffff);
|
||||||
|
|
||||||
|
/* Think about thread-safety -- the previous instructions must be
|
||||||
|
committed to memory before the first is overwritten. */
|
||||||
|
__asm__ __volatile__("wmb" : : : "memory");
|
||||||
|
|
||||||
|
/* Emit "ldah $27,H($27)" */
|
||||||
|
plte[0] = 0x277b0000 | (hi & 0xffff);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -310,14 +322,18 @@ elf_alpha_fix_plt(struct link_map *l,
|
|||||||
lo = (short)hi;
|
lo = (short)hi;
|
||||||
hi = (hi - lo) >> 16;
|
hi = (hi - lo) >> 16;
|
||||||
|
|
||||||
/* Emit "ldah $27,H($27)" */
|
|
||||||
plte[0] = 0x277b0000 | (hi & 0xffff);
|
|
||||||
|
|
||||||
/* Emit "ldq $27,L($27)" */
|
/* Emit "ldq $27,L($27)" */
|
||||||
plte[1] = 0xa77b0000 | (lo & 0xffff);
|
plte[1] = 0xa77b0000 | (lo & 0xffff);
|
||||||
|
|
||||||
/* Emit "jmp $31,($27)" */
|
/* Emit "jmp $31,($27)" */
|
||||||
plte[2] = 0x6bfb0000;
|
plte[2] = 0x6bfb0000;
|
||||||
|
|
||||||
|
/* Think about thread-safety -- the previous instructions must be
|
||||||
|
committed to memory before the first is overwritten. */
|
||||||
|
__asm__ __volatile__("wmb" : : : "memory");
|
||||||
|
|
||||||
|
/* Emit "ldah $27,H($27)" */
|
||||||
|
plte[0] = 0x277b0000 | (hi & 0xffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* At this point, if we've been doing runtime resolution, Icache is dirty.
|
/* At this point, if we've been doing runtime resolution, Icache is dirty.
|
||||||
|
@ -130,48 +130,3 @@ void
|
|||||||
_dl_sysdep_start_cleanup (void)
|
_dl_sysdep_start_cleanup (void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MAP_ANON
|
|
||||||
/* This is only needed if the system doesn't support MAP_ANON. */
|
|
||||||
|
|
||||||
int
|
|
||||||
_dl_sysdep_open_zero_fill (void)
|
|
||||||
{
|
|
||||||
return __open ("/dev/zero", O_RDONLY);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Read the whole contents of FILE into new mmap'd space with given
|
|
||||||
protections. *SIZEP gets the size of the file. */
|
|
||||||
|
|
||||||
void *
|
|
||||||
_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
|
|
||||||
{
|
|
||||||
void *result;
|
|
||||||
struct stat st;
|
|
||||||
int fd = __open (file, O_RDONLY);
|
|
||||||
if (fd < 0)
|
|
||||||
return NULL;
|
|
||||||
if (__fxstat (_STAT_VER, fd, &st) < 0)
|
|
||||||
result = NULL;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Map a copy of the file contents. */
|
|
||||||
result = __mmap (0, st.st_size, prot,
|
|
||||||
#ifdef MAP_COPY
|
|
||||||
MAP_COPY
|
|
||||||
#else
|
|
||||||
MAP_PRIVATE
|
|
||||||
#endif
|
|
||||||
#ifdef MAP_FILE
|
|
||||||
| MAP_FILE
|
|
||||||
#endif
|
|
||||||
, fd, 0);
|
|
||||||
if (result == (void *) -1)
|
|
||||||
result = NULL;
|
|
||||||
else
|
|
||||||
*sizep = st.st_size;
|
|
||||||
}
|
|
||||||
__close (fd);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
@ -1,311 +0,0 @@
|
|||||||
/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2, 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 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. */
|
|
||||||
|
|
||||||
#ifndef _NETINET_IN_H
|
|
||||||
|
|
||||||
#define _NETINET_IN_H 1
|
|
||||||
#include <features.h>
|
|
||||||
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
|
||||||
|
|
||||||
/* Standard well-defined IP protocols. */
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
IPPROTO_IP = 0, /* Dummy protocol for TCP. */
|
|
||||||
IPPROTO_ICMP = 1, /* Internet Control Message Protocol. */
|
|
||||||
IPPROTO_IGMP = 2, /* Internet Group Management Protocol. */
|
|
||||||
IPPROTO_TCP = 6, /* Transmission Control Protocol. */
|
|
||||||
IPPROTO_EGP = 8, /* Exterior Gateway Protocol. */
|
|
||||||
IPPROTO_PUP = 12, /* PUP protocol. */
|
|
||||||
IPPROTO_UDP = 17, /* User Datagram Protocol. */
|
|
||||||
IPPROTO_IDP = 22, /* XNS IDP protocol. */
|
|
||||||
|
|
||||||
IPPROTO_RAW = 255, /* Raw IP packets. */
|
|
||||||
IPPROTO_MAX
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Standard well-known ports. */
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
IPPORT_ECHO = 7, /* Echo service. */
|
|
||||||
IPPORT_DISCARD = 9, /* Discard transmissions service. */
|
|
||||||
IPPORT_SYSTAT = 11, /* System status service. */
|
|
||||||
IPPORT_DAYTIME = 13, /* Time of day service. */
|
|
||||||
IPPORT_NETSTAT = 15, /* Network status service. */
|
|
||||||
IPPORT_FTP = 21, /* File Transfer Protocol. */
|
|
||||||
IPPORT_TELNET = 23, /* Telnet protocol. */
|
|
||||||
IPPORT_SMTP = 25, /* Simple Mail Transfer Protocol. */
|
|
||||||
IPPORT_TIMESERVER = 37, /* Timeserver service. */
|
|
||||||
IPPORT_NAMESERVER = 42, /* Domain Name Service. */
|
|
||||||
IPPORT_WHOIS = 43, /* Internet Whois service. */
|
|
||||||
IPPORT_MTP = 57,
|
|
||||||
|
|
||||||
IPPORT_TFTP = 69, /* Trivial File Transfer Protocol. */
|
|
||||||
IPPORT_RJE = 77,
|
|
||||||
IPPORT_FINGER = 79, /* Finger service. */
|
|
||||||
IPPORT_TTYLINK = 87,
|
|
||||||
IPPORT_SUPDUP = 95, /* SUPDUP protocol. */
|
|
||||||
|
|
||||||
|
|
||||||
IPPORT_EXECSERVER = 512, /* execd service. */
|
|
||||||
IPPORT_LOGINSERVER = 513, /* rlogind service. */
|
|
||||||
IPPORT_CMDSERVER = 514,
|
|
||||||
IPPORT_EFSSERVER = 520,
|
|
||||||
|
|
||||||
/* UDP ports. */
|
|
||||||
IPPORT_BIFFUDP = 512,
|
|
||||||
IPPORT_WHOSERVER = 513,
|
|
||||||
IPPORT_ROUTESERVER = 520,
|
|
||||||
|
|
||||||
/* Ports less than this value are reserved for privileged processes. */
|
|
||||||
IPPORT_RESERVED = 1024,
|
|
||||||
|
|
||||||
/* Ports greater this value are reserved for (non-privileged) servers. */
|
|
||||||
IPPORT_USERRESERVED = 5000
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Link numbers. */
|
|
||||||
#define IMPLINK_IP 155
|
|
||||||
#define IMPLINK_LOWEXPER 156
|
|
||||||
#define IMPLINK_HIGHEXPER 158
|
|
||||||
|
|
||||||
|
|
||||||
/* Internet address. */
|
|
||||||
struct in_addr
|
|
||||||
{
|
|
||||||
unsigned int s_addr;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Definitions of the bits in an Internet address integer.
|
|
||||||
|
|
||||||
On subnets, host and network parts are found according to
|
|
||||||
the subnet mask, not these masks. */
|
|
||||||
|
|
||||||
#define IN_CLASSA(a) ((((unsigned) (a)) & 0x80000000) == 0)
|
|
||||||
#define IN_CLASSA_NET 0xff000000
|
|
||||||
#define IN_CLASSA_NSHIFT 24
|
|
||||||
#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET)
|
|
||||||
#define IN_CLASSA_MAX 128
|
|
||||||
|
|
||||||
#define IN_CLASSB(a) ((((unsigned) (a)) & 0xc0000000) == 0x80000000)
|
|
||||||
#define IN_CLASSB_NET 0xffff0000
|
|
||||||
#define IN_CLASSB_NSHIFT 16
|
|
||||||
#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET)
|
|
||||||
#define IN_CLASSB_MAX 65536
|
|
||||||
|
|
||||||
#define IN_CLASSC(a) ((((unsigned) (a)) & 0xc0000000) == 0xc0000000)
|
|
||||||
#define IN_CLASSC_NET 0xffffff00
|
|
||||||
#define IN_CLASSC_NSHIFT 8
|
|
||||||
#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
|
|
||||||
|
|
||||||
#define IN_CLASSD(a) ((((unsigned) (a)) & 0xf0000000) == 0xe0000000)
|
|
||||||
#define IN_MULTICAST(a) IN_CLASSD(a)
|
|
||||||
|
|
||||||
#define IN_EXPERIMENTAL(a) ((((unsigned) (a)) & 0xe0000000) == 0xe0000000)
|
|
||||||
#define IN_BADCLASS(a) ((((unsigned) (a)) & 0xf0000000) == 0xf0000000)
|
|
||||||
|
|
||||||
/* Address to accept any incoming messages. */
|
|
||||||
#define INADDR_ANY ((unsigned) 0x00000000)
|
|
||||||
/* Address to send to all hosts. */
|
|
||||||
#define INADDR_BROADCAST ((unsigned) 0xffffffff)
|
|
||||||
/* Address indicating an error return. */
|
|
||||||
#define INADDR_NONE ((unsigned) 0xffffffff)
|
|
||||||
|
|
||||||
/* Network number for local host loopback. */
|
|
||||||
#define IN_LOOPBACKNET 127
|
|
||||||
/* Address to loopback in software to local host. */
|
|
||||||
#ifndef INADDR_LOOPBACK
|
|
||||||
#define INADDR_LOOPBACK ((unsigned) 0x7f000001) /* Inet address 127.0.0.1. */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* IPv6 address */
|
|
||||||
struct in6_addr
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
u_int8_t u6_addr8[16];
|
|
||||||
u_int16_t u6_addr16[8];
|
|
||||||
u_int32_t u6_addr32[4];
|
|
||||||
#if (~0UL) > 0xffffffff
|
|
||||||
u_int64_t u6_addr64[2];
|
|
||||||
#endif
|
|
||||||
} in6_u;
|
|
||||||
#define s6_addr in6_u.u6_addr8
|
|
||||||
#define s6_addr16 in6_u.u6_addr16
|
|
||||||
#define s6_addr32 in6_u.u6_addr32
|
|
||||||
#define s6_addr64 in6_u.u6_addr64
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const struct in6_addr in6addr_any; /* :: */
|
|
||||||
extern const struct in6_addr in6addr_loopback; /* ::1 */
|
|
||||||
#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
|
|
||||||
#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
|
|
||||||
|
|
||||||
#define INET_ADDRSTRLEN 16
|
|
||||||
#define INET6_ADDRSTRLEN 46
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Get the definition of the macro to define the common sockaddr members. */
|
|
||||||
#include <sockaddrcom.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Structure describing an Internet socket address. */
|
|
||||||
struct sockaddr_in
|
|
||||||
{
|
|
||||||
__SOCKADDR_COMMON (sin_);
|
|
||||||
unsigned short int sin_port; /* Port number. */
|
|
||||||
struct in_addr sin_addr; /* Internet address. */
|
|
||||||
|
|
||||||
/* Pad to size of `struct sockaddr'. */
|
|
||||||
unsigned char sin_zero[sizeof(struct sockaddr) -
|
|
||||||
__SOCKADDR_COMMON_SIZE -
|
|
||||||
sizeof(unsigned short int) -
|
|
||||||
sizeof(struct in_addr)];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Ditto, for IPv6. */
|
|
||||||
struct sockaddr_in6
|
|
||||||
{
|
|
||||||
__SOCKADDR_COMMON (sin6_);
|
|
||||||
u_int16_t sin6_port; /* Transport layer port # */
|
|
||||||
u_int32_t sin6_flowinfo; /* IPv6 flow information */
|
|
||||||
struct in6_addr sin6_addr; /* IPv6 address */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* IPv6 multicast request. */
|
|
||||||
struct ipv6_mreq
|
|
||||||
{
|
|
||||||
/* IPv6 multicast address of group */
|
|
||||||
struct in6_addr ipv6mr_multiaddr;
|
|
||||||
|
|
||||||
/* local IPv6 address of interface */
|
|
||||||
int ipv6mr_ifindex;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Options for use with `getsockopt' and `setsockopt' at the IP level.
|
|
||||||
The first word in the comment at the right is the data type used;
|
|
||||||
"bool" means a boolean value stored in an `int'. */
|
|
||||||
#define IP_OPTIONS 1 /* ip_opts; IP per-packet options. */
|
|
||||||
#define IP_HDRINCL 2 /* int; Header is included with data. */
|
|
||||||
#define IP_TOS 3 /* int; IP type of service and precedence. */
|
|
||||||
#define IP_TTL 4 /* int; IP time to live. */
|
|
||||||
#define IP_RECVOPTS 5 /* bool; Receive all IP options w/datagram. */
|
|
||||||
#define IP_RECVRETOPTS 6 /* bool; Receive IP options for response. */
|
|
||||||
#define IP_RECVDSTADDR 7 /* bool; Receive IP dst addr w/datagram. */
|
|
||||||
#define IP_RETOPTS 8 /* ip_opts; Set/get IP per-packet options. */
|
|
||||||
#define IP_MULTICAST_IF 9 /* in_addr; set/get IP multicast i/f */
|
|
||||||
#define IP_MULTICAST_TTL 10 /* u_char; set/get IP multicast ttl */
|
|
||||||
#define IP_MULTICAST_LOOP 11 /* i_char; set/get IP multicast loopback */
|
|
||||||
#define IP_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */
|
|
||||||
#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop an IP group membership */
|
|
||||||
|
|
||||||
/* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
|
|
||||||
The `ip_dst' field is used for the first-hop gateway when using a
|
|
||||||
source route (this gets put into the header proper). */
|
|
||||||
struct ip_opts
|
|
||||||
{
|
|
||||||
struct in_addr ip_dst; /* First hop; zero without source route. */
|
|
||||||
char ip_opts[40]; /* Actually variable in size. */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Structure used for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. */
|
|
||||||
struct ip_mreq
|
|
||||||
{
|
|
||||||
struct in_addr imr_multiaddr; /* IP multicast address of group */
|
|
||||||
struct in_addr imr_interface; /* local IP address of interface */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Functions to convert between host and network byte order.
|
|
||||||
|
|
||||||
Please note that these functions normally take `unsigned long int' or
|
|
||||||
`unsigned short int' values as arguments and also return them. But
|
|
||||||
this was a short-sighted decision since on different systems the types
|
|
||||||
may have different representations but the values are always the same. */
|
|
||||||
|
|
||||||
extern u_int32_t ntohl __P ((u_int32_t __netlong));
|
|
||||||
extern u_int16_t ntohs __P ((u_int16_t __netshort));
|
|
||||||
extern u_int32_t htonl __P ((u_int32_t __hostlong));
|
|
||||||
extern u_int16_t htons __P ((u_int16_t __hostshort));
|
|
||||||
|
|
||||||
#include <endian.h>
|
|
||||||
|
|
||||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
||||||
/* The host byte order is the same as network byte order,
|
|
||||||
so these functions are all just identity. */
|
|
||||||
#define ntohl(x) (x)
|
|
||||||
#define ntohs(x) (x)
|
|
||||||
#define htonl(x) (x)
|
|
||||||
#define htons(x) (x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* IPV6 socket options. */
|
|
||||||
#define IPV6_ADDRFORM 1
|
|
||||||
#define IPV6_RXINFO 2
|
|
||||||
#define IPV6_RXHOPOPTS 3
|
|
||||||
#define IPV6_RXDSTOPTS 4
|
|
||||||
#define IPV6_RXSRCRT 5
|
|
||||||
#define IPV6_PKTOPTIONS 6
|
|
||||||
#define IPV6_CHECKSUM 7
|
|
||||||
#define IPV6_HOPLIMIT 8
|
|
||||||
|
|
||||||
#define IPV6_TXINFO IPV6_RXINFO
|
|
||||||
#define SCM_SRCINFO IPV6_TXINFO
|
|
||||||
#define SCM_SRCRT IPV6_RXSRCRT
|
|
||||||
|
|
||||||
#define IPV6_UNICAST_HOPS 16
|
|
||||||
#define IPV6_MULTICAST_IF 17
|
|
||||||
#define IPV6_MULTICAST_HOPS 18
|
|
||||||
#define IPV6_MULTICAST_LOOP 19
|
|
||||||
#define IPV6_ADD_MEMBERSHIP 20
|
|
||||||
#define IPV6_DROP_MEMBERSHIP 21
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_UNSPECIFIED(a) \
|
|
||||||
((((u_int32_t *)(a))[0] == 0) && ((u_int32_t *)(a))[1] == 0) && \
|
|
||||||
(((u_int32_t *)(a))[2] == 0) && ((u_int32_t *)(a))[3] == 0))
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_LOOPBACK(a) \
|
|
||||||
((((u_int32_t *)(a))[0] == 0) && ((u_int32_t *)(a))[1] == 0) && \
|
|
||||||
(((u_int32_t *)(a))[2] == 0) && ((u_int32_t *)(a))[3] == htonl(1)))
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *)(a))[0] == 0xff)
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_LINKLOCAL(a) \
|
|
||||||
((((u_int32_t *)(a))[0] & htonl(0xffc00000)) == htonl(0xfe800000))
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_SITELOCAL(a) \
|
|
||||||
((((u_int32_t *)(a))[0] & htonl(0xffc00000)) == htonl(0xfec00000))
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_V4MAPPED(a) \
|
|
||||||
((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
|
|
||||||
(((u_int32_t *)(a))[2] == htonl(0xffff)))
|
|
||||||
|
|
||||||
#define IN6_IS_ADDR_V4COMPAT(a) \
|
|
||||||
((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
|
|
||||||
(((u_int32_t *)(a))[2] == 0) && (ntohl(((u_int32_t *)(a))[3]) > 1))
|
|
||||||
|
|
||||||
|
|
||||||
__END_DECLS
|
|
||||||
|
|
||||||
#endif /* netinet/in.h */
|
|
84
sysdeps/generic/netinet/inbits.h
Normal file
84
sysdeps/generic/netinet/inbits.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/* Copyright (C) 1997 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 General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, 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 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. */
|
||||||
|
|
||||||
|
/* Generic version. */
|
||||||
|
|
||||||
|
#ifndef _NETINET_INBITS_H
|
||||||
|
#define _NETINET_INBITS_H 1
|
||||||
|
|
||||||
|
/* Link numbers. */
|
||||||
|
#define IMPLINK_IP 155
|
||||||
|
#define IMPLINK_LOWEXPER 156
|
||||||
|
#define IMPLINK_HIGHEXPER 158
|
||||||
|
|
||||||
|
|
||||||
|
/* Options for use with `getsockopt' and `setsockopt' at the IP level.
|
||||||
|
The first word in the comment at the right is the data type used;
|
||||||
|
"bool" means a boolean value stored in an `int'. */
|
||||||
|
#define IP_OPTIONS 1 /* ip_opts; IP per-packet options. */
|
||||||
|
#define IP_HDRINCL 2 /* int; Header is included with data. */
|
||||||
|
#define IP_TOS 3 /* int; IP type of service and precedence. */
|
||||||
|
#define IP_TTL 4 /* int; IP time to live. */
|
||||||
|
#define IP_RECVOPTS 5 /* bool; Receive all IP options w/datagram. */
|
||||||
|
#define IP_RECVRETOPTS 6 /* bool; Receive IP options for response. */
|
||||||
|
#define IP_RECVDSTADDR 7 /* bool; Receive IP dst addr w/datagram. */
|
||||||
|
#define IP_RETOPTS 8 /* ip_opts; Set/get IP per-packet options. */
|
||||||
|
#define IP_MULTICAST_IF 9 /* in_addr; set/get IP multicast i/f */
|
||||||
|
#define IP_MULTICAST_TTL 10 /* u_char; set/get IP multicast ttl */
|
||||||
|
#define IP_MULTICAST_LOOP 11 /* i_char; set/get IP multicast loopback */
|
||||||
|
#define IP_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */
|
||||||
|
#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop an IP group membership */
|
||||||
|
|
||||||
|
/* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
|
||||||
|
The `ip_dst' field is used for the first-hop gateway when using a
|
||||||
|
source route (this gets put into the header proper). */
|
||||||
|
struct ip_opts
|
||||||
|
{
|
||||||
|
struct in_addr ip_dst; /* First hop; zero without source route. */
|
||||||
|
char ip_opts[40]; /* Actually variable in size. */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Structure used for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. */
|
||||||
|
struct ip_mreq
|
||||||
|
{
|
||||||
|
struct in_addr imr_multiaddr; /* IP multicast address of group */
|
||||||
|
struct in_addr imr_interface; /* local IP address of interface */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* IPV6 socket options. */
|
||||||
|
#define IPV6_ADDRFORM 1
|
||||||
|
#define IPV6_RXINFO 2
|
||||||
|
#define IPV6_RXHOPOPTS 3
|
||||||
|
#define IPV6_RXDSTOPTS 4
|
||||||
|
#define IPV6_RXSRCRT 5
|
||||||
|
#define IPV6_PKTOPTIONS 6
|
||||||
|
#define IPV6_CHECKSUM 7
|
||||||
|
#define IPV6_HOPLIMIT 8
|
||||||
|
|
||||||
|
#define IPV6_TXINFO IPV6_RXINFO
|
||||||
|
#define SCM_SRCINFO IPV6_TXINFO
|
||||||
|
#define SCM_SRCRT IPV6_RXSRCRT
|
||||||
|
|
||||||
|
#define IPV6_UNICAST_HOPS 16
|
||||||
|
#define IPV6_MULTICAST_IF 17
|
||||||
|
#define IPV6_MULTICAST_HOPS 18
|
||||||
|
#define IPV6_MULTICAST_LOOP 19
|
||||||
|
#define IPV6_ADD_MEMBERSHIP 20
|
||||||
|
#define IPV6_DROP_MEMBERSHIP 21
|
||||||
|
|
||||||
|
#endif /* netinet/inbits.h */
|
@ -25,15 +25,32 @@
|
|||||||
|
|
||||||
#ifndef weak_alias
|
#ifndef weak_alias
|
||||||
# define __strcasecmp strcasecmp
|
# define __strcasecmp strcasecmp
|
||||||
|
# define TOLOWER(Ch) tolower (Ch)
|
||||||
|
#else
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define __strcasecmp __strcasecmp_l
|
||||||
|
# define TOLOWER(Ch) __tolower_l ((Ch), loc)
|
||||||
|
# else
|
||||||
|
# define TOLOWER(Ch) tolower (Ch)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define LOCALE_PARAM , loc
|
||||||
|
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||||
|
#else
|
||||||
|
# define LOCALE_PARAM
|
||||||
|
# define LOCALE_PARAM_DECL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compare S1 and S2, ignoring case, returning less than, equal to or
|
/* Compare S1 and S2, ignoring case, returning less than, equal to or
|
||||||
greater than zero if S1 is lexicographically less than,
|
greater than zero if S1 is lexicographically less than,
|
||||||
equal to or greater than S2. */
|
equal to or greater than S2. */
|
||||||
int
|
int
|
||||||
__strcasecmp (s1, s2)
|
__strcasecmp (s1, s2 LOCALE_PARAM)
|
||||||
const char *s1;
|
const char *s1;
|
||||||
const char *s2;
|
const char *s2;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
const unsigned char *p1 = (const unsigned char *) s1;
|
const unsigned char *p1 = (const unsigned char *) s1;
|
||||||
const unsigned char *p2 = (const unsigned char *) s2;
|
const unsigned char *p2 = (const unsigned char *) s2;
|
||||||
@ -44,8 +61,8 @@ __strcasecmp (s1, s2)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
c1 = tolower (*p1++);
|
c1 = TOLOWER (*p1++);
|
||||||
c2 = tolower (*p2++);
|
c2 = TOLOWER (*p2++);
|
||||||
if (c1 == '\0')
|
if (c1 == '\0')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -53,6 +70,6 @@ __strcasecmp (s1, s2)
|
|||||||
|
|
||||||
return c1 - c2;
|
return c1 - c2;
|
||||||
}
|
}
|
||||||
#ifdef weak_alias
|
#ifndef __strcasecmp
|
||||||
weak_alias (__strcasecmp, strcasecmp)
|
weak_alias (__strcasecmp, strcasecmp)
|
||||||
#endif
|
#endif
|
||||||
|
20
sysdeps/generic/strcasecmp_l.c
Normal file
20
sysdeps/generic/strcasecmp_l.c
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/* Copyright (C) 1997 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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
#include <sysdeps/generic/strcasecmp.c>
|
@ -18,11 +18,31 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#ifndef weak_alias
|
#ifndef weak_alias
|
||||||
# define __strncasecmp strncasecmp
|
# define __strncasecmp strncasecmp
|
||||||
|
# define TOLOWER(Ch) tolower (Ch)
|
||||||
|
#else
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define __strncasecmp __strncasecmp_l
|
||||||
|
# define TOLOWER(Ch) __tolower_l ((Ch), loc)
|
||||||
|
# else
|
||||||
|
# define TOLOWER(Ch) tolower (Ch)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define LOCALE_PARAM , loc
|
||||||
|
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||||
|
#else
|
||||||
|
# define LOCALE_PARAM
|
||||||
|
# define LOCALE_PARAM_DECL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compare no more than N characters of S1 and S2,
|
/* Compare no more than N characters of S1 and S2,
|
||||||
@ -30,10 +50,11 @@
|
|||||||
greater than zero if S1 is lexicographically less
|
greater than zero if S1 is lexicographically less
|
||||||
than, equal to or greater than S2. */
|
than, equal to or greater than S2. */
|
||||||
int
|
int
|
||||||
__strncasecmp (s1, s2, n)
|
__strncasecmp (s1, s2, n LOCALE_PARAM)
|
||||||
const char *s1;
|
const char *s1;
|
||||||
const char *s2;
|
const char *s2;
|
||||||
size_t n;
|
size_t n;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
const unsigned char *p1 = (const unsigned char *) s1;
|
const unsigned char *p1 = (const unsigned char *) s1;
|
||||||
const unsigned char *p2 = (const unsigned char *) s2;
|
const unsigned char *p2 = (const unsigned char *) s2;
|
||||||
@ -44,14 +65,14 @@ __strncasecmp (s1, s2, n)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
c1 = tolower (*p1++);
|
c1 = TOLOWER (*p1++);
|
||||||
c2 = tolower (*p2++);
|
c2 = TOLOWER (*p2++);
|
||||||
if (c1 == '\0' || c1 != c2)
|
if (c1 == '\0' || c1 != c2)
|
||||||
return c1 - c2;
|
return c1 - c2;
|
||||||
} while (--n > 0);
|
} while (--n > 0);
|
||||||
|
|
||||||
return c1 - c2;
|
return c1 - c2;
|
||||||
}
|
}
|
||||||
#ifdef weak_alias
|
#ifndef __strncasecmp
|
||||||
weak_alias (__strncasecmp, strncasecmp)
|
weak_alias (__strncasecmp, strncasecmp)
|
||||||
#endif
|
#endif
|
||||||
|
22
sysdeps/generic/strncase_l.c
Normal file
22
sysdeps/generic/strncase_l.c
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/* Compare at most N characters of two strings without taking care for
|
||||||
|
the case using given locale.
|
||||||
|
Copyright (C) 1997 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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
#include <sysdeps/generic/strncase.c>
|
@ -86,7 +86,7 @@ static ElfW(Addr) fixup (struct link_map *l, ElfW(Word) reloc_offset)
|
|||||||
/* Set up the loaded object described by L so its unrelocated PLT
|
/* Set up the loaded object described by L so its unrelocated PLT
|
||||||
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
||||||
|
|
||||||
static inline void __attribute__ ((unused))
|
static inline int
|
||||||
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||||
{
|
{
|
||||||
Elf32_Addr *got;
|
Elf32_Addr *got;
|
||||||
@ -105,9 +105,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
|||||||
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return lazy;
|
||||||
|
}
|
||||||
|
|
||||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||||
and then redirect to the address it returns. */
|
and then redirect to the address it returns. */
|
||||||
#ifndef PROF
|
#ifndef PROF
|
||||||
# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
||||||
.globl _dl_runtime_resolve
|
.globl _dl_runtime_resolve
|
||||||
@ -149,7 +151,6 @@ _dl_runtime_resolve:
|
|||||||
#endif
|
#endif
|
||||||
/* The PLT uses Elf32_Rel relocs. */
|
/* The PLT uses Elf32_Rel relocs. */
|
||||||
#define elf_machine_relplt elf_machine_rel
|
#define elf_machine_relplt elf_machine_rel
|
||||||
}
|
|
||||||
|
|
||||||
/* Mask identifying addresses reserved for the user program,
|
/* Mask identifying addresses reserved for the user program,
|
||||||
where the dynamic linker should not map anything. */
|
where the dynamic linker should not map anything. */
|
||||||
|
@ -430,10 +430,10 @@ __MATH_INLINE double logb (double __x);
|
|||||||
__MATH_INLINE double
|
__MATH_INLINE double
|
||||||
logb (double __x)
|
logb (double __x)
|
||||||
{
|
{
|
||||||
register double __value;
|
register double __value, __junk;
|
||||||
__asm __volatile__
|
__asm __volatile__
|
||||||
("fxtract\n\t"
|
("fxtract\n\t"
|
||||||
: "=t" (__value) : "0" (__x));
|
: "=t" (__value), "=u" (__junk) : "0" (__x));
|
||||||
|
|
||||||
return __value;
|
return __value;
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ elf_machine_load_address (void)
|
|||||||
/* Set up the loaded object described by L so its unrelocated PLT
|
/* Set up the loaded object described by L so its unrelocated PLT
|
||||||
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
||||||
|
|
||||||
static inline void
|
static inline int
|
||||||
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||||
{
|
{
|
||||||
Elf32_Addr *got;
|
Elf32_Addr *got;
|
||||||
@ -96,8 +96,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
|||||||
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
return lazy;
|
||||||
and then redirect to the address it returns. */
|
}
|
||||||
|
|
||||||
|
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||||
|
and then redirect to the address it returns. */
|
||||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
||||||
| Trampoline for _dl_runtime_resolver
|
| Trampoline for _dl_runtime_resolver
|
||||||
.globl _dl_runtime_resolve
|
.globl _dl_runtime_resolve
|
||||||
@ -120,7 +123,6 @@ _dl_runtime_resolve:
|
|||||||
#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0, long int save_a1
|
#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0, long int save_a1
|
||||||
/* The PLT uses Elf32_Rela relocs. */
|
/* The PLT uses Elf32_Rela relocs. */
|
||||||
#define elf_machine_relplt elf_machine_rela
|
#define elf_machine_relplt elf_machine_rela
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Mask identifying addresses reserved for the user program,
|
/* Mask identifying addresses reserved for the user program,
|
||||||
|
@ -209,6 +209,79 @@ _dl_sysdep_start_cleanup (void)
|
|||||||
__mach_port_deallocate (__mach_task_self (), __mach_task_self_);
|
__mach_port_deallocate (__mach_task_self (), __mach_task_self_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_dl_sysdep_fatal (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
mach_msg_type_number_t nwrote;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
|
||||||
|
break;
|
||||||
|
len -= nwrote;
|
||||||
|
msg += nwrote;
|
||||||
|
} while (nwrote > 0);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
|
_exit (127);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
_dl_sysdep_error (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
mach_msg_type_number_t nwrote;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
|
||||||
|
break;
|
||||||
|
len -= nwrote;
|
||||||
|
msg += nwrote;
|
||||||
|
} while (nwrote > 0);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
_dl_sysdep_message (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
mach_msg_type_number_t nwrote;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (__io_write (_hurd_init_dtable[1], msg, len, -1, &nwrote))
|
||||||
|
break;
|
||||||
|
len -= nwrote;
|
||||||
|
msg += nwrote;
|
||||||
|
} while (nwrote > 0);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Minimal open/close/mmap implementation sufficient for initial loading of
|
||||||
|
shared libraries. These are weak definitions so that when the
|
||||||
|
dynamic linker re-relocates itself to be user-visible (for -ldl),
|
||||||
/* Minimal open/close/mmap implementation sufficient for initial loading of
|
/* Minimal open/close/mmap implementation sufficient for initial loading of
|
||||||
shared libraries. These are weak definitions so that when the
|
shared libraries. These are weak definitions so that when the
|
||||||
dynamic linker re-relocates itself to be user-visible (for -ldl),
|
dynamic linker re-relocates itself to be user-visible (for -ldl),
|
||||||
@ -493,6 +566,76 @@ __mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
|
|||||||
(flags & MAP_SHARED) ? VM_INHERIT_SHARE : VM_INHERIT_COPY);
|
(flags & MAP_SHARED) ? VM_INHERIT_SHARE : VM_INHERIT_COPY);
|
||||||
if (err == KERN_NO_SPACE && (flags & MAP_FIXED))
|
if (err == KERN_NO_SPACE && (flags & MAP_FIXED))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
void weak_function
|
||||||
|
_dl_sysdep_fatal (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
mach_msg_type_number_t nwrote;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
|
||||||
|
break;
|
||||||
|
len -= nwrote;
|
||||||
|
msg += nwrote;
|
||||||
|
} while (nwrote > 0);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
|
_exit (127);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void weak_function
|
||||||
|
_dl_sysdep_error (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
mach_msg_type_number_t nwrote;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
|
||||||
|
break;
|
||||||
|
len -= nwrote;
|
||||||
|
msg += nwrote;
|
||||||
|
} while (nwrote > 0);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void weak_function
|
||||||
|
_dl_sysdep_message (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
mach_msg_type_number_t nwrote;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (__io_write (_hurd_init_dtable[1], msg, len, -1, &nwrote))
|
||||||
|
break;
|
||||||
|
len -= nwrote;
|
||||||
|
msg += nwrote;
|
||||||
|
} while (nwrote > 0);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
/* XXX this is not atomic as it is in unix! */
|
/* XXX this is not atomic as it is in unix! */
|
||||||
/* The region is already allocated; deallocate it first. */
|
/* The region is already allocated; deallocate it first. */
|
||||||
err = __vm_deallocate (__mach_task_self (), mapaddr, len);
|
err = __vm_deallocate (__mach_task_self (), mapaddr, len);
|
||||||
|
@ -1,107 +0,0 @@
|
|||||||
/* Operating system support for run-time dynamic linker. Hurd version.
|
|
||||||
Copyright (C) 1995, 1996, 1997 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. */
|
|
||||||
|
|
||||||
#include <hurd.h>
|
|
||||||
#include <link.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <sysdep.h>
|
|
||||||
#include <mach/mig_support.h>
|
|
||||||
#include "hurdstartup.h"
|
|
||||||
#include <mach/host_info.h>
|
|
||||||
#include "../stdio-common/_itoa.h"
|
|
||||||
#include <hurd/auth.h>
|
|
||||||
#include <hurd/term.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
void
|
|
||||||
_dl_sysdep_fatal (const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, msg);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
size_t len = strlen (msg);
|
|
||||||
mach_msg_type_number_t nwrote;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
|
|
||||||
break;
|
|
||||||
len -= nwrote;
|
|
||||||
msg += nwrote;
|
|
||||||
} while (nwrote > 0);
|
|
||||||
msg = va_arg (ap, const char *);
|
|
||||||
} while (msg);
|
|
||||||
va_end (ap);
|
|
||||||
|
|
||||||
_exit (127);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
_dl_sysdep_error (const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, msg);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
size_t len = strlen (msg);
|
|
||||||
mach_msg_type_number_t nwrote;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
|
|
||||||
break;
|
|
||||||
len -= nwrote;
|
|
||||||
msg += nwrote;
|
|
||||||
} while (nwrote > 0);
|
|
||||||
msg = va_arg (ap, const char *);
|
|
||||||
} while (msg);
|
|
||||||
va_end (ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
_dl_sysdep_message (const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, msg);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
size_t len = strlen (msg);
|
|
||||||
mach_msg_type_number_t nwrote;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (__io_write (_hurd_init_dtable[1], msg, len, -1, &nwrote))
|
|
||||||
break;
|
|
||||||
len -= nwrote;
|
|
||||||
msg += nwrote;
|
|
||||||
} while (nwrote > 0);
|
|
||||||
msg = va_arg (ap, const char *);
|
|
||||||
} while (msg);
|
|
||||||
va_end (ap);
|
|
||||||
}
|
|
@ -183,7 +183,7 @@ elf_machine_got_rel (struct link_map *map)
|
|||||||
/* Set up the loaded object described by L so its stub function
|
/* Set up the loaded object described by L so its stub function
|
||||||
will jump to the on-demand fixup code in dl-runtime.c. */
|
will jump to the on-demand fixup code in dl-runtime.c. */
|
||||||
|
|
||||||
static inline void
|
static inline int
|
||||||
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||||
{
|
{
|
||||||
ElfW(Addr) *got;
|
ElfW(Addr) *got;
|
||||||
@ -213,6 +213,8 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
|||||||
|
|
||||||
/* Relocate global offset table. */
|
/* Relocate global offset table. */
|
||||||
elf_machine_got_rel (l);
|
elf_machine_got_rel (l);
|
||||||
|
|
||||||
|
return lazy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get link_map for this object. */
|
/* Get link_map for this object. */
|
||||||
|
@ -390,7 +390,7 @@ static ElfW(Addr) _dl_preferred_address = 1
|
|||||||
calls `fixup', in dl-runtime.c, via the glue in the macro
|
calls `fixup', in dl-runtime.c, via the glue in the macro
|
||||||
ELF_MACHINE_RUNTIME_TRAMPOLINE, which resets the PLT entry to
|
ELF_MACHINE_RUNTIME_TRAMPOLINE, which resets the PLT entry to
|
||||||
be one of the above two types. These entries are set up here. */
|
be one of the above two types. These entries are set up here. */
|
||||||
static inline void
|
static inline int
|
||||||
elf_machine_runtime_setup (struct link_map *map, int lazy)
|
elf_machine_runtime_setup (struct link_map *map, int lazy)
|
||||||
{
|
{
|
||||||
if (map->l_info[DT_JMPREL])
|
if (map->l_info[DT_JMPREL])
|
||||||
@ -489,6 +489,8 @@ elf_machine_runtime_setup (struct link_map *map, int lazy)
|
|||||||
PPC_ICBI (plt + i);
|
PPC_ICBI (plt + i);
|
||||||
PPC_ISYNC;
|
PPC_ISYNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return lazy;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -220,7 +220,7 @@ elf_machine_lazy_rel (struct link_map *map, const Elf32_Rela *reloc)
|
|||||||
/* Set up the loaded object described by L so its unrelocated PLT
|
/* Set up the loaded object described by L so its unrelocated PLT
|
||||||
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
||||||
|
|
||||||
static inline void
|
static inline int
|
||||||
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||||
{
|
{
|
||||||
Elf32_Addr *plt;
|
Elf32_Addr *plt;
|
||||||
@ -253,8 +253,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
|||||||
plt[3] = (Elf32_Addr *) l;
|
plt[3] = (Elf32_Addr *) l;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
return lazy;
|
||||||
and then redirect to the address it returns. */
|
}
|
||||||
|
|
||||||
|
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||||
|
and then redirect to the address it returns. */
|
||||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
||||||
# Trampoline for _dl_runtime_resolver
|
# Trampoline for _dl_runtime_resolver
|
||||||
.globl _dl_runtime_resolve
|
.globl _dl_runtime_resolve
|
||||||
@ -274,9 +277,9 @@ _dl_runtime_resolve:
|
|||||||
#restore
|
#restore
|
||||||
.size _dl_runtime_resolve, . - _dl_runtime_resolve
|
.size _dl_runtime_resolve, . - _dl_runtime_resolve
|
||||||
");
|
");
|
||||||
|
|
||||||
/* The PLT uses Elf32_Rela relocs. */
|
/* The PLT uses Elf32_Rela relocs. */
|
||||||
#define elf_machine_relplt elf_machine_rela
|
#define elf_machine_relplt elf_machine_rela
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Mask identifying addresses reserved for the user program,
|
/* Mask identifying addresses reserved for the user program,
|
||||||
|
@ -102,19 +102,26 @@ elf_machine_rela (Elf32_Addr loadaddr, Elf32_Dyn *info[DT_NUM],
|
|||||||
/* Set up the loaded object described by L so its unrelocated PLT
|
/* Set up the loaded object described by L so its unrelocated PLT
|
||||||
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
||||||
|
|
||||||
static inline void
|
static inline int
|
||||||
elf_machine_runtime_setup (struct link_map *l)
|
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||||
{
|
{
|
||||||
extern void _dl_runtime_resolve (Elf32_Word);
|
extern void _dl_runtime_resolve (Elf32_Word);
|
||||||
/* The GOT entries for functions in the PLT have not yet been filled
|
|
||||||
in. Their initial contents will arrange when called to push an
|
if (lazy)
|
||||||
offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1],
|
{
|
||||||
and then jump to _GLOBAL_OFFSET_TABLE[2]. */
|
/* The GOT entries for functions in the PLT have not yet been filled
|
||||||
Elf32_Addr *got = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
|
in. Their initial contents will arrange when called to push an
|
||||||
got[1] = (Elf32_Addr) l; /* Identify this shared object. */
|
offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1],
|
||||||
/* This function will get called to fix up the GOT entry indicated by
|
and then jump to _GLOBAL_OFFSET_TABLE[2]. */
|
||||||
the offset on the stack, and then jump to the resolved address. */
|
Elf32_Addr *got = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
|
||||||
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
got[1] = (Elf32_Addr) l; /* Identify this shared object. */
|
||||||
|
|
||||||
|
/* This function will get called to fix up the GOT entry indicated by
|
||||||
|
the offset on the stack, and then jump to the resolved address. */
|
||||||
|
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lazy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
75
sysdeps/unix/sysv/linux/netinet/inbits.h
Normal file
75
sysdeps/unix/sysv/linux/netinet/inbits.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, 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 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. */
|
||||||
|
|
||||||
|
/* Linux version. */
|
||||||
|
|
||||||
|
#ifndef _NETINET_INBITS_H
|
||||||
|
#define _NETINET_INBITS_H 1
|
||||||
|
|
||||||
|
/* Options for use with `getsockopt' and `setsockopt' at the IP level.
|
||||||
|
The first word in the comment at the right is the data type used;
|
||||||
|
"bool" means a boolean value stored in an `int'. */
|
||||||
|
#define IP_TOS 1 /* int; IP type of service and precedence. */
|
||||||
|
#define IP_TTL 2 /* int; IP time to live. */
|
||||||
|
#define IP_HDRINCL 3 /* int; Header is included with data. */
|
||||||
|
#define IP_OPTIONS 4 /* ip_opts; IP per-packet options. */
|
||||||
|
#define IP_MULTICAST_IF 32 /* in_addr; set/get IP multicast i/f */
|
||||||
|
#define IP_MULTICAST_TTL 33 /* u_char; set/get IP multicast ttl */
|
||||||
|
#define IP_MULTICAST_LOOP 34 /* i_char; set/get IP multicast loopback */
|
||||||
|
#define IP_ADD_MEMBERSHIP 35 /* ip_mreq; add an IP group membership */
|
||||||
|
#define IP_DROP_MEMBERSHIP 36 /* ip_mreq; drop an IP group membership */
|
||||||
|
|
||||||
|
/* To select the IP level. */
|
||||||
|
#define SOL_IP 0
|
||||||
|
|
||||||
|
/* Structure used to describe IP options for IP_OPTIONS. The `ip_dst'
|
||||||
|
field is used for the first-hop gateway when using a source route
|
||||||
|
(this gets put into the header proper). */
|
||||||
|
struct ip_opts
|
||||||
|
{
|
||||||
|
struct in_addr ip_dst; /* First hop; zero without source route. */
|
||||||
|
char ip_opts[40]; /* Actually variable in size. */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Structure used for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. */
|
||||||
|
struct ip_mreq
|
||||||
|
{
|
||||||
|
struct in_addr imr_multiaddr; /* IP multicast address of group */
|
||||||
|
struct in_addr imr_interface; /* local IP address of interface */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* IPV6 socket options. */
|
||||||
|
#define IPV6_ADDRFORM 1
|
||||||
|
#define IPV6_PKTINFO 2
|
||||||
|
#define IPV6_RXHOPOPTS 3
|
||||||
|
#define IPV6_RXDSTOPTS 4
|
||||||
|
#define IPV6_RXSRCRT 5
|
||||||
|
#define IPV6_PKTOPTIONS 6
|
||||||
|
#define IPV6_CHECKSUM 7
|
||||||
|
#define IPV6_HOPLIMIT 8
|
||||||
|
|
||||||
|
#define SCM_SRCRT IPV6_RXSRCRT
|
||||||
|
|
||||||
|
#define IPV6_UNICAST_HOPS 16
|
||||||
|
#define IPV6_MULTICAST_IF 17
|
||||||
|
#define IPV6_MULTICAST_HOPS 18
|
||||||
|
#define IPV6_MULTICAST_LOOP 19
|
||||||
|
#define IPV6_ADD_MEMBERSHIP 20
|
||||||
|
#define IPV6_DROP_MEMBERSHIP 21
|
||||||
|
|
||||||
|
#endif /* netinet/inbits.h */
|
@ -184,52 +184,3 @@ _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
|
|||||||
__close (fd);
|
__close (fd);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_dl_sysdep_fatal (const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, msg);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
size_t len = strlen (msg);
|
|
||||||
__write (STDERR_FILENO, msg, len);
|
|
||||||
msg = va_arg (ap, const char *);
|
|
||||||
} while (msg);
|
|
||||||
va_end (ap);
|
|
||||||
|
|
||||||
_exit (127);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
_dl_sysdep_error (const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, msg);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
size_t len = strlen (msg);
|
|
||||||
__write (STDERR_FILENO, msg, len);
|
|
||||||
msg = va_arg (ap, const char *);
|
|
||||||
} while (msg);
|
|
||||||
va_end (ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
_dl_sysdep_message (const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, msg);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
size_t len = strlen (msg);
|
|
||||||
__write (STDOUT_FILENO, msg, len);
|
|
||||||
msg = va_arg (ap, const char *);
|
|
||||||
} while (msg);
|
|
||||||
va_end (ap);
|
|
||||||
}
|
|
||||||
|
@ -31,10 +31,12 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
|
|||||||
mbrlen mbrtowc wcrtomb mbsrtowcs wcsrtombs \
|
mbrlen mbrtowc wcrtomb mbsrtowcs wcsrtombs \
|
||||||
mbsnrtowcs wcsnrtombs \
|
mbsnrtowcs wcsnrtombs \
|
||||||
wcstol wcstoul wcstoll wcstoull wcstod wcstold wcstof \
|
wcstol wcstoul wcstoll wcstoull wcstod wcstold wcstof \
|
||||||
|
wcstol_l wcstoul_l wcstoll_l wcstoull_l \
|
||||||
|
wcstod_l wcstold_l wcstof_l \
|
||||||
wcscoll wcsxfrm \
|
wcscoll wcsxfrm \
|
||||||
wcwidth wcswidth \
|
wcwidth wcswidth \
|
||||||
wcscoll_l wcsxfrm_l \
|
wcscoll_l wcsxfrm_l \
|
||||||
wcscasecmp wcsncase
|
wcscasecmp wcsncase wcscasecmp_l wcsncase_l
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
||||||
@ -48,3 +50,10 @@ CFLAGS-wcstoull.c = -I../stdlib
|
|||||||
CFLAGS-wcstod.c = -I../stdlib
|
CFLAGS-wcstod.c = -I../stdlib
|
||||||
CFLAGS-wcstold.c = -I../stdlib
|
CFLAGS-wcstold.c = -I../stdlib
|
||||||
CFLAGS-wcstof.c = -I../stdlib
|
CFLAGS-wcstof.c = -I../stdlib
|
||||||
|
CFLAGS-wcstol_l.c = -I../stdlib
|
||||||
|
CFLAGS-wcstoul_l.c = -I../stdlib
|
||||||
|
CFLAGS-wcstoll_l.c = -I../stdlib
|
||||||
|
CFLAGS-wcstoull_l.c = -I../stdlib
|
||||||
|
CFLAGS-wcstod_l.c = -I../stdlib
|
||||||
|
CFLAGS-wcstold_l.c = -I../stdlib
|
||||||
|
CFLAGS-wcstof_l.c = -I../stdlib
|
||||||
|
@ -93,6 +93,16 @@ extern int __wcsncasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
|||||||
size_t __n));
|
size_t __n));
|
||||||
extern int wcsncasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
extern int wcsncasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
||||||
size_t __n));
|
size_t __n));
|
||||||
|
|
||||||
|
/* Similar to the two functions above but take the information from
|
||||||
|
the provided locale and not the global locale. */
|
||||||
|
# include <xlocale.h>
|
||||||
|
|
||||||
|
extern int __wcscasecmp_l __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern int __wcsncasecmp_l __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
||||||
|
size_t __n, __locale_t __loc));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compare S1 and S2, both interpreted as appropriate to the
|
/* Compare S1 and S2, both interpreted as appropriate to the
|
||||||
@ -107,7 +117,6 @@ extern size_t wcsxfrm __P ((wchar_t *__restrict __s1,
|
|||||||
#ifdef __USE_GNU
|
#ifdef __USE_GNU
|
||||||
/* Similar to the two functions above but take the information from
|
/* Similar to the two functions above but take the information from
|
||||||
the provided locale and not the global locale. */
|
the provided locale and not the global locale. */
|
||||||
# include <xlocale.h>
|
|
||||||
|
|
||||||
/* Compare S1 and S2, both interpreted as appropriate to the
|
/* Compare S1 and S2, both interpreted as appropriate to the
|
||||||
LC_COLLATE category of the given locale. */
|
LC_COLLATE category of the given locale. */
|
||||||
@ -316,6 +325,55 @@ extern unsigned long long int wcstoull __P ((__const wchar_t *
|
|||||||
int __base));
|
int __base));
|
||||||
#endif /* ISO C 9X or GCC and GNU. */
|
#endif /* ISO C 9X or GCC and GNU. */
|
||||||
|
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
/* The concept of one static locale per category is not very well
|
||||||
|
thought out. Many applications will need to process its data using
|
||||||
|
information from several different locales. Another application is
|
||||||
|
the implementation of the internationalization handling in the
|
||||||
|
upcoming ISO C++ standard library. To support this another set of
|
||||||
|
the functions using locale data exist which have an additional
|
||||||
|
argument.
|
||||||
|
|
||||||
|
Attention: all these functions are *not* standardized in any form.
|
||||||
|
This is a proof-of-concept implementation. */
|
||||||
|
|
||||||
|
/* Structure for reentrant locale using functions. This is an
|
||||||
|
(almost) opaque type for the user level programs. */
|
||||||
|
# include <xlocale.h>
|
||||||
|
|
||||||
|
/* Special versions of the functions above which take the locale to
|
||||||
|
use as an additional parameter. */
|
||||||
|
extern long int __wcstol_l __P ((__const wchar_t *__restrict __nptr,
|
||||||
|
wchar_t **__restrict __endptr, int __base,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern unsigned long int __wcstoul_l __P ((__const wchar_t *__restrict __nptr,
|
||||||
|
wchar_t **__restrict __endptr,
|
||||||
|
int __base, __locale_t __loc));
|
||||||
|
|
||||||
|
extern long long int __wcstoll_l __P ((__const wchar_t *__restrict __nptr,
|
||||||
|
wchar_t **__restrict __endptr,
|
||||||
|
int __base, __locale_t __loc));
|
||||||
|
|
||||||
|
extern unsigned long long int __wcstoull_l __P ((__const wchar_t *__restrict
|
||||||
|
__nptr,
|
||||||
|
wchar_t **__restrict __endptr,
|
||||||
|
int __base,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern double __wcstod_l __P ((__const wchar_t *__restrict __nptr,
|
||||||
|
wchar_t **__restrict __endptr,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern float __wcstof_l __P ((__const wchar_t *__restrict __nptr,
|
||||||
|
wchar_t **__restrict __endptr,
|
||||||
|
__locale_t __loc));
|
||||||
|
|
||||||
|
extern __long_double_t __wcstold_l __P ((__const wchar_t *__restrict __nptr,
|
||||||
|
wchar_t **__restrict __endptr,
|
||||||
|
__locale_t __loc));
|
||||||
|
#endif /* GNU */
|
||||||
|
|
||||||
|
|
||||||
/* The internal entry points for `wcstoX' take an extra flag argument
|
/* The internal entry points for `wcstoX' take an extra flag argument
|
||||||
saying whether or not to parse locale-dependent number grouping. */
|
saying whether or not to parse locale-dependent number grouping. */
|
||||||
|
@ -25,15 +25,32 @@
|
|||||||
|
|
||||||
#ifndef weak_alias
|
#ifndef weak_alias
|
||||||
# define __wcscasecmp wcscasecmp
|
# define __wcscasecmp wcscasecmp
|
||||||
|
# define TOLOWER(Ch) towlower (Ch)
|
||||||
|
#else
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define __wcscasecmp __wcscasecmp_l
|
||||||
|
# define TOLOWER(Ch) __towlower_l ((Ch), loc)
|
||||||
|
# else
|
||||||
|
# define TOLOWER(Ch) towlower (Ch)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define LOCALE_PARAM , loc
|
||||||
|
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||||
|
#else
|
||||||
|
# define LOCALE_PARAM
|
||||||
|
# define LOCALE_PARAM_DECL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compare S1 and S2, ignoring case, returning less than, equal to or
|
/* Compare S1 and S2, ignoring case, returning less than, equal to or
|
||||||
greater than zero if S1 is lexicographically less than,
|
greater than zero if S1 is lexicographically less than,
|
||||||
equal to or greater than S2. */
|
equal to or greater than S2. */
|
||||||
int
|
int
|
||||||
__wcscasecmp (s1, s2)
|
__wcscasecmp (s1, s2 LOCALE_PARAM)
|
||||||
const wchar_t *s1;
|
const wchar_t *s1;
|
||||||
const wchar_t *s2;
|
const wchar_t *s2;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
wint_t c1, c2;
|
wint_t c1, c2;
|
||||||
|
|
||||||
@ -42,15 +59,15 @@ __wcscasecmp (s1, s2)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
c1 = towlower (*s1++);
|
c1 = TOLOWER (*s1++);
|
||||||
c2 = towlower (*s2++);
|
c2 = TOLOWER (*s2++);
|
||||||
if (c1 == '\0')
|
if (c1 == L'\0')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
while (c1 == c2);
|
while (c1 == c2);
|
||||||
|
|
||||||
return c1 - c2;
|
return c1 - c2;
|
||||||
}
|
}
|
||||||
#ifdef weak_alias
|
#ifndef __wcscasecmp
|
||||||
weak_alias (__wcscasecmp, wcscasecmp)
|
weak_alias (__wcscasecmp, wcscasecmp)
|
||||||
#endif
|
#endif
|
||||||
|
21
wcsmbs/wcscasecmp_l.c
Normal file
21
wcsmbs/wcscasecmp_l.c
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
#include <wcscasecmp.c>
|
@ -18,11 +18,31 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#include <wctype.h>
|
#include <wctype.h>
|
||||||
|
|
||||||
#ifndef weak_alias
|
#ifndef weak_alias
|
||||||
# define __wcsncasecmp wcsncasecmp
|
# define __wcsncasecmp wcsncasecmp
|
||||||
|
# define TOLOWER(Ch) towlower (Ch)
|
||||||
|
#else
|
||||||
|
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define __wcsncasecmp __wcsncasecmp_l
|
||||||
|
# define TOLOWER(Ch) __towlower_l ((Ch), loc)
|
||||||
|
# else
|
||||||
|
# define TOLOWER(Ch) towlower (Ch)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define LOCALE_PARAM , loc
|
||||||
|
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||||
|
#else
|
||||||
|
# define LOCALE_PARAM
|
||||||
|
# define LOCALE_PARAM_DECL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compare no more than N wide characters of S1 and S2,
|
/* Compare no more than N wide characters of S1 and S2,
|
||||||
@ -30,10 +50,11 @@
|
|||||||
greater than zero if S1 is lexicographically less
|
greater than zero if S1 is lexicographically less
|
||||||
than, equal to or greater than S2. */
|
than, equal to or greater than S2. */
|
||||||
int
|
int
|
||||||
__wcsncasecmp (s1, s2, n)
|
__wcsncasecmp (s1, s2, n LOCALE_PARAM)
|
||||||
const wchar_t *s1;
|
const wchar_t *s1;
|
||||||
const wchar_t *s2;
|
const wchar_t *s2;
|
||||||
size_t n;
|
size_t n;
|
||||||
|
LOCALE_PARAM_DECL
|
||||||
{
|
{
|
||||||
wint_t c1, c2;
|
wint_t c1, c2;
|
||||||
|
|
||||||
@ -42,14 +63,14 @@ __wcsncasecmp (s1, s2, n)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
c1 = (wint_t) towlower (*s1++);
|
c1 = (wint_t) TOLOWER (*s1++);
|
||||||
c2 = (wint_t) towlower (*s2++);
|
c2 = (wint_t) TOLOWER (*s2++);
|
||||||
if (c1 == L'\0' || c1 != c2)
|
if (c1 == L'\0' || c1 != c2)
|
||||||
return c1 - c2;
|
return c1 - c2;
|
||||||
} while (--n > 0);
|
} while (--n > 0);
|
||||||
|
|
||||||
return c1 - c2;
|
return c1 - c2;
|
||||||
}
|
}
|
||||||
#ifdef weak_alias
|
#ifndef __wcsncasecmp
|
||||||
weak_alias (__wcsncasecmp, wcsncasecmp)
|
weak_alias (__wcsncasecmp, wcsncasecmp)
|
||||||
#endif
|
#endif
|
||||||
|
21
wcsmbs/wcsncase_l.c
Normal file
21
wcsmbs/wcsncase_l.c
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
#include <wcsncase.c>
|
29
wcsmbs/wcstod_l.c
Normal file
29
wcsmbs/wcstod_l.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <wcstod.c>
|
@ -22,8 +22,12 @@
|
|||||||
These macros tell it to produce the `float' version, `wcstof'. */
|
These macros tell it to produce the `float' version, `wcstof'. */
|
||||||
|
|
||||||
#define FLOAT float
|
#define FLOAT float
|
||||||
#define FLT LDBL
|
#define FLT FLT
|
||||||
#define STRTOF wcstof
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define STRTOF __wcstof_l
|
||||||
|
#else
|
||||||
|
# define STRTOF wcstof
|
||||||
|
#endif
|
||||||
#define MPN2FLOAT __mpn_construct_float
|
#define MPN2FLOAT __mpn_construct_float
|
||||||
#define FLOAT_HUGE_VAL HUGE_VALF
|
#define FLOAT_HUGE_VAL HUGE_VALF
|
||||||
#define USE_WIDE_CHAR 1
|
#define USE_WIDE_CHAR 1
|
||||||
|
29
wcsmbs/wcstof_l.c
Normal file
29
wcsmbs/wcstof_l.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <wcstof.c>
|
29
wcsmbs/wcstol_l.c
Normal file
29
wcsmbs/wcstol_l.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern long int ____wcstol_l_internal (const wchar_t *, wchar_t **, int, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <wcstol.c>
|
@ -23,7 +23,11 @@
|
|||||||
|
|
||||||
#define FLOAT long double
|
#define FLOAT long double
|
||||||
#define FLT LDBL
|
#define FLT LDBL
|
||||||
#define STRTOF wcstold
|
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||||
|
# define STRTOF __wcstold_l
|
||||||
|
#else
|
||||||
|
# define STRTOF wcstold
|
||||||
|
#endif
|
||||||
#define MPN2FLOAT __mpn_construct_long_double
|
#define MPN2FLOAT __mpn_construct_long_double
|
||||||
#define FLOAT_HUGE_VAL HUGE_VALL
|
#define FLOAT_HUGE_VAL HUGE_VALL
|
||||||
#define USE_WIDE_CHAR 1
|
#define USE_WIDE_CHAR 1
|
||||||
|
29
wcsmbs/wcstold_l.c
Normal file
29
wcsmbs/wcstold_l.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <wcstold.c>
|
29
wcsmbs/wcstoll_l.c
Normal file
29
wcsmbs/wcstoll_l.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern long long int ____wcstoll_l_internal (const wchar_t *, wchar_t **,
|
||||||
|
int, int, __locale_t);
|
||||||
|
|
||||||
|
#include <wcstoll.c>
|
29
wcsmbs/wcstoul_l.c
Normal file
29
wcsmbs/wcstoul_l.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern unsigned long int ____wcstoul_l_internal (const wchar_t *, wchar_t **,
|
||||||
|
int, int, __locale_t);
|
||||||
|
|
||||||
|
#include <wcstoul.c>
|
30
wcsmbs/wcstoull_l.c
Normal file
30
wcsmbs/wcstoull_l.c
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||||
|
|
||||||
|
extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||||
|
wchar_t **, int, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
|
#include <wcstoull.c>
|
Reference in New Issue
Block a user