2019-01-01 08:11:28 +08:00
|
|
|
/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
|
2001-07-06 12:58:11 +08:00
|
|
|
This file is part of the GNU C Library.
|
1996-12-20 09:39:50 +08:00
|
|
|
Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
|
1995-02-18 09:27:10 +08:00
|
|
|
with help from Dan Sahlin (dan@sics.se) and
|
|
|
|
bug fix and commentary by Jim Blandy (jimb@ai.mit.edu);
|
|
|
|
adaptation to strchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
|
|
|
|
and implemented by Roland McGrath (roland@ai.mit.edu).
|
|
|
|
|
1996-12-20 09:39:50 +08:00
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 12:58:11 +08:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1996-12-20 09:39:50 +08:00
|
|
|
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
|
2001-07-06 12:58:11 +08:00
|
|
|
Lesser General Public License for more details.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
2001-07-06 12:58:11 +08:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-10 07:18:22 +08:00
|
|
|
License along with the GNU C Library; if not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
#include <string.h>
|
2000-07-05 23:38:00 +08:00
|
|
|
#include <stdlib.h>
|
1995-02-18 09:27:10 +08:00
|
|
|
|
Update.
1997-09-11 04:36 Ulrich Drepper <drepper@cygnus.com>
* db2/db_int.h: Define __set_errno if not yet available.
* db2/btree/bt_rec.c: Use __set_errno to set errno value.
* db2/clib/getlong.c: Likewise.
* db2/db185/db185.c: Likewise.
* db2/db185/db185_int.h: Likewise.
* db2/dbm/dbm.c: Likewise.
* db2/lock/lock_deadlock.c: Likewise.
* db2/log/log_archive.c: Likewise.
* elf/dl-profile.c: Implement mcount function.
* gmon/gmon.c: Use __profil not profil because of namespace pollution.
* gmon/mcount.c: Remove BSD kernel code.
Use compare&swap instruction if possible to change state variable.
Optimize frompc folding.
* gmon/sys/gmon.h (struct gmonparam): Change state field to long int.
* sysdeps/i386/i486/atomicity.h: New file.
* sysdeps/stub/atomicity.h: New file.
* sysdeps/mach/hurd/profil.c: Define function as __profil and make
profil weak alias.
* sysdeps/posix/profil.c: Likewise.
* string/bits/string2.h: New file.
* include/bits/string2.h: New file.
* string/Makefile (routines): Add mempcpy.
(tests): Add inl-tester.
Remove _D__NO_STRING_INLINES from CFLAGS-* variables.
* sysdeps/generic/mempcpy.c: New file.
* sysdeps/generic/memccpy.c: Undef function name to enable definition
as macro.
* sysdeps/generic/memchr.c: Likewise.
* sysdeps/generic/memcmp.c: Likewise.
* sysdeps/generic/memmem.c: Likewise.
* sysdeps/generic/memmove.c: Likewise.
* sysdeps/generic/strcat.c: Likewise.
* sysdeps/generic/strchr.c: Likewise.
* sysdeps/generic/strcmp.c: Likewise.
* sysdeps/generic/strcpy.c: Likewise.
* sysdeps/generic/strcspn.c: Likewise.
* sysdeps/generic/strlen.c: Likewise.
* sysdeps/generic/strncat.c: Likewise.
* sysdeps/generic/strncmp.c: Likewise.
* sysdeps/generic/strncpy.c: Likewise.
* sysdeps/generic/strpbrk.c: Likewise.
* sysdeps/generic/strrchr.c: Likewise.
* sysdeps/generic/strsep.c: Likewise.
* sysdeps/generic/strspn.c: Likewise.
* sysdeps/generic/strstr.c: Likewise.
* sysdeps/generic/strtok.c: Likewise.
* sysdeps/generic/strtok_r.c: Likewise.
* sysdeps/i386/memset.c: Likewise.
* sysdeps/i386/bits/string.h: Correct a few types and constraints.
* sysdeps/i386/i486/bits/string.h: Heavy rewrites and optimizations.
* string/stratcliff.c: Undefine __USE_STRING_INLINES.
* string/tst-strlen.c: Likewise.
* string/string.h: Add prototype for mempcpy. Include bits/string2.h
header always if optimizing.
* intl/dcgettext.c: Don't unconditionally define stpcpy, only if not
yet defined.
* intl/l10nflist.c: Likewise.
* string/tester.c: Add copyright and make little cleanups.
* inet/test_ifindex.c: Change type of ni variable to unsigned int.
* locale/programs/ld-ctype.c (struct locale_ctype_t): Change type
of fields map_collection_max and map_collection_act to size_t.
* nss/libnss_files.map: Group entries.
* posix/unistd.h: Add prototype for __setpgid and __profil.
* sysdeps/generic/crypt.h: Declare __crypt_r.
* sysdeps/i386/bits/select.h: Fix fatal bugs, use correct casts now.
* sysdeps/i386/fpu/bits/mathinline.h (isgreater, isgreaterequal,
isless, islessequal, islessgreater, isunordered): Optimize a bit.
* sysdeps/stub/ftruncate.c: Include missing header for prototype.
* sysdeps/stub/getdents.c: Likewise.
* sysdeps/stub/reboot.c: Likewise.
* sysdeps/stub/swapon.c: Likewise.
* sysdeps/stub/syscall.c: Likewise.
* sysdeps/stub/ualarm.c: Likewise.
* sysdeps/stub/usleep.c: Likewise.
* sysdeps/unix/sysv/linux/if_index.c: Don't compile or use opensock
if SIOGIFINDEX and SIOGIFNAME are not defined.
* sysdeps/unix/sysv/linux/net/if.h: Add IFF_PORTSEL and IFF_AUTOMEDIA
according to recent kernel changes.
1997-09-10 21:32 Klaus Espenlaub <kespenla@student.informatik.uni-ulm.de>
* Makeconfig: Use $(have-initfini) instead of $(elf) to figure out
the installed name of the startup code.
(common-generated): Add version.mk.
* Makefile (distclean-1): Add glibcbug.
* Makerules: Replace -lgcc by $(gnulib).
* catgets/Makefile (generated): Add xmalloc.o.
* csu/Makefile (generated): Replace align.h and end.h by defs.h to
match the generated file.
* manual/Makefile (mostlyclean): Add stub-manual and stamp.o.
(realclean): Changed to remove chapters-incl[12].
* po/Makefile (realclean): New rule to remove the generated .mo files.
* time/Makefile: Only include zonefile dependencies if $(no_deps) is
not true to avoid make clean failure when directory time doesn't exist
yet.
(generated): Add tzselect.
* stdio/fgets.c (fgets): Add casts to reduce gcc warning noise.
* stdio/internals.c (flushbuf): Likewise.
* stdio/linewrap.c (lwupdate): Likewise.
* stdio/memstream.c (enlarge_buffer): Likewise.
* stdio-common/vfscanf.c (_IO_vfscanf): Likewise.
* time/tzset.c (compute_change): Likewise.
* misc/init-misc.c (__init_misc): Only declare static if HAVE_GNU_LD
is defined.
* sysdeps/posix/pipestream.c (FUNC): Change to generate ANSI C style
functions.
* sysdeps/stub/init-posix.c: Likewise.
* sysdeps/stub/profil.c: Likewise.
* munch-tmpl.c (__libc_init): Convert to ANSI C style declaration to
reduce gcc warning noise.
* stdio/glue.c (_filbuf, _flsbuf): Likewise.
* stdio/obstream.c (grow, seek, input, init_obstream): Likewise.
* stdio/vasprintf.c (enlarge_buffer): Likewise.
* sysdeps/generic/sysd-stdio.c (__stdio_read, __stdio_write,
__stdio_seek, __stdio_close, __stdio_fileno, __stdio_open,
__stdio_reopen): Likewise.
* sysdeps/posix/defs.c (_cleanup): Likewise.
* time/offtime.c (__offtime): Add cast.
* posix/getopt.c: Don't use text_set_element if not defined.
* configure.in: Provide a check for underscores before user labels
that works even when the compiler used for building doesn't work
(like when there is no C library). Use the old way if the compiler
works.
1997-09-10 05:08 David S. Miller <davem@caip.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: The TC* ioctls use
'T' not 't' on SparcLinux.
* sysdeps/unix/sysv/linux/sparc/bits/termios.h: tcflag_t is 32 bits.
* sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Add aliases for
_longjmp and siglongjmp.
1997-09-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libio/stdio.h: Add format attributes to the extra printf and
scanf like functions.
* stdio/stdio.h: Likewise.
1997-09-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyaddr_r):
Print tablename_val, not tablename_len.
* nis/nss_nisplus/nisplus-ethers.c (_nss_nisplus_getntohost_r):
Use sprintf instead of sprintf, the string always fits.
* nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_gethostbyaddr_r):
Likewise.
* nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyaddr_r):
Likewise.
* nis/nss_nisplus/nisplus-proto.c
(_nss_nisplus_getprotobynumber_r): Likewise.
* nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_getrpcbynumber_r):
Likewise.
* nis/nss_nisplus/nisplus-service.c
(_nss_nisplus_getservbynumber_r): Likewise.
* nis/nss_nisplus/nisplus-alias.c (_nss_create_tablename): Use
__stpcpy, __stpncpy and __strdup instead of public names.
* nis/nss_nisplus/nisplus-ethers.c (_nss_create_tablename):
Likewise.
* nis/nss_nisplus/nisplus-grp.c (_nss_create_tablename): Likewise.
* nis/nss_nisplus/nisplus-hosts.c (_nss_create_tablename):
Likewise.
* nis/nss_nisplus/nisplus-netgrp.c (_nss_nisplus_parse_netgroup):
Likewise.
* nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent):
Likewise.
(_nss_create_tablename): Likewise.
* nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent):
Likewise.
(_nss_create_tablename): Likewise.
* nis/nss_nisplus/nisplus-pwd.c (_nss_create_tablename):
Likewise.
* nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent):
Likewise.
(_nss_create_tablename): Likewise.
* nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent):
Likewise.
(_nss_create_tablename): Likewise.
* nis/nss_nisplus/nisplus-spwd.c (_nss_create_tablename):
Likewise.
* libc.map: Export __stpcpy and __strdup.
1997-09-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* math/Makefile (CFLAGS-test-float.c, CFLAGS-test-double.c,
CFLAGS-test-ldouble.c): Pass -ffloat-store to avoid excessive
precision.
1997-09-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* include/rpc/auth_des.h: New file.
1997-09-09 Paul Eggert <eggert@twinsun.com>
* time/mktime.c (__mktime_internal): Declare sec_requested even if
!LEAP_SECONDS_POSSIBLE, since it's needed at the end when checking
for time_t overflow.
1997-09-09 22:11 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/posix/getcwd.c: Correct test for too small buffer.
Reported by Erik Troan <ewt@redhat.com>.
* elf/dl-close.c: Include <bits/libc-lock.h>, not <libc-lock.h>.
* elf/dl-open.c: Likewise.
1997-09-07 17:09 Richard Henderson <rth@cygnus.com>
* sysdeps/alpha/Makefile: Kill setjmp_aux.
* sysdeps/alpha/bits/setjmp.h: Rewrite in terms of an array.
* sysdeps/alpha/__longjmp.c: Remove.
* sysdeps/alpha/setjmp_aux.c: Remove.
* sysdeps/alpha/__longjmp.S: New file.
* sysdeps/alpha/bsd-_setjmp.S: Stub out.
* sysdeps/alpha/bsd-setjmp.S: Likewise.
* sysdeps/alpha/setjmp.S: Do the work; don't call __setjmp_aux.
Move _setjmp and setjmp from bsd-*.S.
1997-09-06 20:20 Ulrich Drepper <drepper@cygnus.com>
* include/rpc/auth.h: New file.
* include/rpc/auth_unix.h: New file.
1997-09-06 Paul Eggert <eggert@twinsun.com>
Fix gmtime so that it reports leap seconds when TZ
indicates that leap seconds are desired.
* time/gmtime.c (<stddef.h>): Remove unnecessary include.
(gmtime): Put after gmtime_r, to help the compiler inline.
(__tz_convert): New decl.
(gmtime_r): Use __tz_convert instead of __offtime,
so that leap seconds are handled correctly.
* time/localtime.c (<errno.h>, <libc-lock.h>): Remove includes that
are now unnecessary.
(__tzset_internal, __tz_compute, __tzfile_compute, __use_tzfile,
__tzset_lock): Remove extern decls that are now unnecessary.
(localtime_internal): Moved to __tz_convert in tzset.c.
so that localtime and gmtime can both use it easily.
(localtime): Put after localtime_r, to help the compiler inline.
(localtime_r): Use __tz_convert instead of localtime_internal.
* time/strftime.c (__tz_compute): Remove unused (and now incorrect)
decl.
* time/tzfile.c (__tzfile_compute): New arg USE_LOCALTIME.
* time/tzset.c (<errno.h>): Include.
(_tmbuf): New decl.
(__tzfile_compute): New function.
(tz_compute): Renamed from __tz_compute. No longer extern.
Remove redundant call to tzset_internal.
(tzset_internal): Renamed from __tzset_internal. No longer extern.
(tzset_lock): Renamed from __tzset_lock. No longer extern.
(__tz_convert): New function, containing functionality of old
localtime_internal function, plus locking and optional UTC.
1997-09-06 Paul Eggert <eggert@twinsun.com>
* time/tzfile.c (__tzfile_read): Don't read a file if TZ is the empty
string, just use UTC without leap seconds. This is for compatibility
with the Olson code.
1997-09-06 Paul Eggert <eggert@twinsun.com>
* time/tzset.c (__tzname_max): Lock tz data structures before
invoking tzset_internal.
* time/tzfile.c: Define compute_tzname_max statically.
1997-09-07 10:57 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* nis/nis_call.c: Remove not longer necessary HAVE_SECURE_RPC ifdefs.
* nis/nis_intern.h: Likewise.
* nis/nss_nis/nis-publickey.c: Likewise.
* nis/nss_nisplus/nisplus-publickey.c: Likewise.
* nis/ypclnt.c: Likewise.
* sunrpc/auth_des.c: Don't dereference NULL pointer,
initialize ad->ad_timediff.
* sunrpc/auth_none.c: Don't define our own prototypes, use the one
from the header files.
* sunrpc/auth_unix.c: Likewise.
* sunrpc/clnt_raw.c: Likewise.
* sunrpc/clnt_tcp.c: Likewise.
* sunrpc/rpc_cmsg.c: Likewise.
* sunrpc/key_call.c: Fix signal handling.
* sunrpc/openchild.c: Don't use /bin/sh to start /usr/etc/keyenvoy,
or we will get a deadlock with NIS+.
* sunrpc/rpc/auth.h: Add prototype for xdr_opaque_auth, don't define
HAVE_SECURE_RPC.
1997-09-07 15:51 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/bits/select.h [__GNUC__] (__FD_ZERO, __FD_SET, __FD_CLR,
__FD_ISSET): Use correct casts to address array correctly.
Reported by urbanw@cs.umu.se.
1997-09-07 05:07 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-close.c: Include <bits/libc-lock.h>, not <libc-lock.h>.
* elf/dl-open.c: Likewise.
* sysdeps/i386/memset.c: Undefine memset in case the header with the
optimized functions is included.
Patches by NIIBE Yutaka <gniibe@mri.co.jp>.
* sysdeps/i386/bits/string.h [__PIC__] (strcspn, strspn, strpbrk,
strsep): Use register for second parameter.
* sysdeps/i386/i486/bits/string.h: Likewise.
Reported by NIIBE Yutaka <gniibe@mri.co.jp>.
1997-09-03 09:48 Geoff Keating <geoffk@ozemail.com.au>
* math/libm-test.c: Change various tolerances to match what the
tested routines can actually provide.
* math/Makefile: Add new tests.
* math/atest-sincos.c: New file.
* math/atest-exp.c: New file.
* csu/Makefile: Give initfini.s and initfiniS.s their own
CFLAGS-* macros so they can be overridden.
* sysdeps/powerpc/Makefile [subdir=csu]: Override flags for
initfiniS.s to use -fpic instead of -fPIC, because the sed script
breaks otherwise.
* sysdeps/powerpc/Makefile [build-shared]: Use -fpic not -fPIC for
efficiency.
* sysdeps/powerpc/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
Don't use register 0, to let _mcount be in a shared object.
* sysdeps/powerpc/dl-machine.h: Use full sentences in comments.
Generally clean up. Suppress some code we don't need when relocating
ld.so.
* sysdeps/powerpc/test-arith.c: Change loop indices to size_t when
appropriate to suppress gcc warning.
* resolv/res_send.c: Suppress warning.
* sunrpc/xdr_sizeof.c: Suppress warning.
* FAQ: Add ppc-linux.
* manual/maint.texi: Add ppc-linux. Explain that gcc can't build it
yet.
* sysdeps/unix/sysv/linux/powerpc/profil-counter.h: Correct for
current kernels.
1997-08-15 07:45 Geoff Keating <geoffk@ozemail.com.au>
* stdlib/fmtmsg.c: Use two parameters for __libc_once_define.
* sysdeps/i386/machine-gmon.h: Correct typo.
* sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Change to match
kernel.
* sysdeps/generic/dl-sysdep.c: Add hook for bizzare PPC argument hack.
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Rewrite to use
sysdeps/linux/dl-sysdep.c.
* sysdeps/powerpc/Makefile [subdir=gmon]: Compile ppc-mcount.
* sysdeps/powerpc/machine-gmon.h: Use ppc-mcount.
* sysdeps/powerpc/ppc-mcount: New file.
The following are mostly changes to allow profiling:
* sysdeps/powerpc/add_n.S: Added.
* sysdeps/powerpc/add_n.s: Removed.
* sysdeps/powerpc/addmul_1.S: Added.
* sysdeps/powerpc/addmul_1.s: Removed.
* sysdeps/powerpc/bsd-_setjmp.S: Use JUMPTARGET macro.
* sysdeps/powerpc/bsd-setjmp.S: Use JUMPTARGET macro.
* sysdeps/powerpc/lshift.S: Added.
* sysdeps/powerpc/lshift.s: Removed.
* sysdeps/powerpc/memset.S: Added.
* sysdeps/powerpc/memset.s: Removed.
* sysdeps/powerpc/mul_1.S: Added.
* sysdeps/powerpc/mul_1.s: Removed.
* sysdeps/powerpc/rshift.S: Added.
* sysdeps/powerpc/rshift.s: Removed.
* sysdeps/powerpc/s_copysign.S: Use ENTRY, END, weak_alias macros.
* sysdeps/powerpc/s_fabs.S: Use ENTRY, END, weak_alias macros.
* sysdeps/powerpc/setjmp.S: Use JUMPTARGET macro.
* sysdeps/powerpc/strchr.S: Added.
* sysdeps/powerpc/strchr.s: Removed.
* sysdeps/powerpc/strcmp.S: Added.
* sysdeps/powerpc/strcmp.s: Removed.
* sysdeps/powerpc/strlen.S: Added.
* sysdeps/powerpc/strlen.s: Removed.
* sysdeps/powerpc/sub_n.S: Added.
* sysdeps/powerpc/sub_n.s: Removed.
* sysdeps/powerpc/submul_1.S: Added.
* sysdeps/powerpc/submul_1.s: Removed.
* sysdeps/unix/sysv/linux/powerpc/_exit.S: Removed.
* sysdeps/unix/sysv/linux/powerpc/brk.S: Added.
* sysdeps/unix/sysv/linux/powerpc/brk.c: Removed.
* sysdeps/unix/sysv/linux/powerpc/clone.S: Use new macros. Fix
various bugs. Document that it isn't tested.
* sysdeps/unix/sysv/linux/powerpc/sigreturn.S: Make look like
sysdeps/unix/_exit.S.
* sysdeps/unix/sysv/linux/powerpc/socket.S: Use new macros.
* sysdeps/unix/sysv/linux/powerpc/syscall.S: Use new macros.
* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Define some new macros
to make assembler (possibly) more portable, allow profiling, etc.
1997-09-11 20:09:10 +08:00
|
|
|
#undef strchr
|
1995-02-18 09:27:10 +08:00
|
|
|
|
2015-08-26 16:26:23 +08:00
|
|
|
#ifndef STRCHR
|
|
|
|
# define STRCHR strchr
|
|
|
|
#endif
|
|
|
|
|
1996-12-20 09:39:50 +08:00
|
|
|
/* Find the first occurrence of C in S. */
|
1995-02-18 09:27:10 +08:00
|
|
|
char *
|
2015-08-26 16:26:23 +08:00
|
|
|
STRCHR (const char *s, int c_in)
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
1997-02-15 12:31:36 +08:00
|
|
|
const unsigned char *char_ptr;
|
|
|
|
const unsigned long int *longword_ptr;
|
1995-02-18 09:27:10 +08:00
|
|
|
unsigned long int longword, magic_bits, charmask;
|
2012-04-19 07:19:10 +08:00
|
|
|
unsigned char c;
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1999-06-14 17:25:22 +08:00
|
|
|
c = (unsigned char) c_in;
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
/* Handle the first few characters by reading one character at a time.
|
|
|
|
Do this until CHAR_PTR is aligned on a longword boundary. */
|
2006-08-22 14:47:33 +08:00
|
|
|
for (char_ptr = (const unsigned char *) s;
|
|
|
|
((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
|
1995-02-18 09:27:10 +08:00
|
|
|
++char_ptr)
|
|
|
|
if (*char_ptr == c)
|
1997-02-15 12:31:36 +08:00
|
|
|
return (void *) char_ptr;
|
1995-02-18 09:27:10 +08:00
|
|
|
else if (*char_ptr == '\0')
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
/* All these elucidatory comments refer to 4-byte longwords,
|
|
|
|
but the theory applies equally well to 8-byte longwords. */
|
|
|
|
|
|
|
|
longword_ptr = (unsigned long int *) char_ptr;
|
|
|
|
|
|
|
|
/* Bits 31, 24, 16, and 8 of this number are zero. Call these bits
|
|
|
|
the "holes." Note that there is a hole just to the left of
|
|
|
|
each byte, with an extra at the end:
|
1996-12-20 09:39:50 +08:00
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
bits: 01111110 11111110 11111110 11111111
|
1996-12-20 09:39:50 +08:00
|
|
|
bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
The 1-bits make sure that carries propagate to the next 0-bit.
|
|
|
|
The 0-bits provide holes for carries to fall into. */
|
2015-07-22 13:50:29 +08:00
|
|
|
magic_bits = -1;
|
|
|
|
magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
/* Set up a longword, each of whose bytes is C. */
|
|
|
|
charmask = c | (c << 8);
|
|
|
|
charmask |= charmask << 16;
|
|
|
|
if (sizeof (longword) > 4)
|
Update.
1997-10-12 05:09 Ulrich Drepper <drepper@cygnus.com>
* libio/Makefile (routines): Remove iofprintf.
* stdio-common/fprintf.c [USE_IN_LIBIO]: Define _IO_fprintf.
* libio/filedoalloc.c: Use _G_stat64 instead of stat.
* libio/fileops.c (_IO_file_open): Change to take extra argument
indicating whether 32 or 64 bit mode is wanted.
* libio/iofopen.c: Call _IO_file_open with extra argument set to 0.
* libio/iofopen64.c: Call _IO_file_open with extra argument set to 0.
* libio/iolibio.h (_IO_freopen, _IO_freopen64): Likewise.
* libio/iofgetpos.c: Pretty print.
* libio/iofgetpos64.c: Use _IO_fpos64_t for local variable `pos'.
* manual/conf.texi: Document all the _SC_ and _CS_ constants.
* manual/creature.texi: Document _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE
and _FILE_OFFSET_BITS.
* manual/llio.texi: Document truncate and ftruncate.
* manual/stdio.texi: Document positional parameters for printf.
* math/Makefile (headers): Add tgmath.h.
(libm-support): Remove s_lrint, s_llrint, s_lround, and s_llround and
move to ...
(libm-calls): ... here. Add scalbln, s_nextafterx and s_fma.
* math/libm-test.c (lround_test, llround_test): Test for all FP formats
by using FUNC().
* math/libm.map: Add fma, fmaf, fmal, nextafterx, nextafterxf,
nextafterxl, scalbln, scalblnf, scalblnl, lrintf, lrintl, llrintf,
llrintl, lroundf, lroundl, llroundf, and llroundl.
* math/math.h: Document new platform specific macros from mathdef.h.
Remove declaration of lrint, llrint, lround, and llround.
* math/test-double.c: Define TEST_DOUBLE.
* math/test-idouble.c: Likewise.
* math/test-float.c: Define TEST_FLOAT.
* math/test-ifloat.c: Likewise.
* math/tgmath.h: New file.
* math/bits/mathcalls.h: Add nextafterx, scalbln, fma, lrint, llrint,
lround, and llround.
Change second argument of scalbn to `int'.
* sysdeps/libm-ieee754/s_fma.S: New file.
* sysdeps/libm-ieee754/s_fmaf.S: New file.
* sysdeps/libm-ieee754/s_fmal.S: New file.
* sysdeps/libm-i387/s_fma.S: New file.
* sysdeps/libm-i387/s_fmaf.S: New file.
* sysdeps/libm-i387/s_fmal.S: New file.
* sysdeps/libm-i387/s_llrint.S: Change to take double argument.
* sysdeps/libm-i387/s_lrint.S: Likewise.
* sysdeps/libm-i387/s_llrintf.S: New file.
* sysdeps/libm-i387/s_llrintl.S: New file.
* sysdeps/libm-i387/s_lrintf.S: New file.
* sysdeps/libm-i387/s_lrintl.S: New file.
* sysdeps/libm-ieee754/s_llrint.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lrint.c: Likewise.
* sysdeps/libm-ieee754/s_llrintf.S: New file.
* sysdeps/libm-ieee754/s_llrintl.S: New file.
* sysdeps/libm-ieee754/s_lrintf.S: New file.
* sysdeps/libm-ieee754/s_lrintl.S: New file.
* sysdeps/libm-i387/s_scalbln.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnf.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnl.c: New file. Empty file.
* sysdeps/libm-i387/s_scalbn.c: Add scalbln as alias.
* sysdeps/libm-i387/s_scalbnf.c: Add scalblnf as alias.
* sysdeps/libm-i387/s_scalbnl.c: Add scalblnl as alias.
* sysdeps/libm-ieee754/s_llround.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lround.c: Likewise.
* sysdeps/libm-ieee754/s_llroundf.c: Likewise.
* sysdeps/libm-ieee754/s_llroundl.c: Likewise.
* sysdeps/libm-ieee754/s_lroundf.c: Likewise.
* sysdeps/libm-ieee754/s_lroundl.c: Likewise.
* sysdeps/libm-ieee754/s_nextafterl.c: Add alias fo nextafterxl.
* sysdeps/libm-ieee754/s_nextafterx.c: New file.
* sysdeps/libm-ieee754/s_nextafterxf.c: New file.
* sysdeps/libm-ieee754/s_nextafterxl.c: New file.
* sysdeps/libm-ieee754/s_scalbln.c: New file.
* sysdeps/libm-ieee754/s_scalblnf.c: New file.
* sysdeps/libm-ieee754/s_scalblnl.c: New file.
* sysdeps/libm-ieee754/s_scalbn.c: Change to take `int' as second arg.
* sysdeps/libm-ieee754/s_scalbnf.c: Likewise.
* sysdeps/libm-ieee754/s_scalbnl.c: Likewise.
* stdlib/stdlib.h: Protect declarations of __strto*l_internal functions
by #ifdefs since they are duplicated in inttypes.h.
* sysdeps/wordsize-32/inttypes.h: Add definition of strtoimax and
strtoumax plus needed declarations.
* sysdeps/generic/confname.h (_SC_AIO_LISTIO_MAX): Fix typo.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* locale/programs/locfile.c (locfile_read): Correct while loop.
* db2/makedb.c (main): Add missing parameter for error output.
(process_input): Likewise.
* resolv/gethnamaddr.c (getanswer): Rewrite a bit to avoid warning.
1997-10-12 05:05 Ulrich Drepper <drepper@cygnus.com>
* libc-map: Add __bzero, __mempcpy.
1997-10-10 18:51 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Remove dependencies
on kernel_termios.h
1997-10-09 10:24 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
Add the changes from the Solaris 2.6 header files, use the new public
defines/functions.
* nis/nis_addmember.c: Updated.
* nis/nis_checkpoint.c: Updated.
* nis/nis_creategroup.c: updated.
* nis/nis_destroygroup.c: Updated.
* nis/nis_getservlist.c: Updated.
* nis/nis_ismember.c: Updated.
* nis/nis_lookup.c: Updated.
* nis/nis_modify.c: Updated.
* nis/nis_ping.c: Updated.
* nis/nis_print.c: Updated.
* nis/nis_print_group_entry.c: Updated.
* nis/nis_remove.c: Updated.
* nis/nis_removemember.c: Updated.
* nis/nis_xdr.c: Updated.
* nis/nss_nisplus/nisplus-alias.c: Updated.
* nis/nss_nisplus/nisplus-ethers.c: Updated.
* nis/nss_nisplus/nisplus-hosts.c: Updated.
* nis/nss_nisplus/nisplus-network.c: Updated.
* nis/nss_nisplus/nisplus-parser.c: Updated.
* nis/nss_nisplus/nisplus-proto.c: Updated.
* nis/nss_nisplus/nisplus-rpc.c: Updated.
* nis/nss_nisplus/nisplus-service.c: Updated.
* nis/rpcsvc/nis.h: Updated.
* nis/rpcsvc/nis.x: Updated.
* nis/rpcsvc/nis_object.x: Updated.
* nis/rpcsvc/nis_tags.h: Updated.
* nis/rpcsvc/nislib.h: Updated.
* nis/lckcache.c: Removed, since Sun has dropped the directory
signatures. The old cache version is now a security risk and not
longer supported by Sun.
* nis/nis_cache.c: Likewise.
* nis/rpcsvc/nis_cache.h: Likewise.
* nis/rpcsvc/nis_cache.x: Likewise.
* nis/nis_call.c: Remove calls to the cache functions.
* nis/libnsl.map: Remove cache and depending functions.
* nis/nis_intern.h: Likewise.
* nis/nis_add.c: Remove #include <rpcsvc/nislib.h>.
* nis/nis_domain_of.c: Likewise.
* nis/nis_domain_of_r.c: Likewise.
* nis/nis_error.c: Likewise.
* nis/nis_file.c: Likewise.
* nis/nis_local_names.c: Likewise.
* nis/nis_mkdir.c: Likewise.
* nis/nis_rmdir.c: Likewise.
* nis/nis_subr.c: Likewise.
* nis/nis_verifygroup.c: Likewise.
* nis/nis_clone.c: Removed, replaced by ...
* nis/nis_clone_dir.c: New.
* nis/nis_clone_obj.c: New.
* nis/nis_clone_res.c: New.
* nis/nis_table.c: Fixed bugs shown through the new clone functions.
* nis/nis_defaults.c: Fixed a lot of race conditions.
* nis/nis_free.c: Rewritten.
* sunrpc/auth_des.c: Fix use of free'ed pointer.
* nis/Makefile (libnsl-routines): Remove nis_clone, nis_cache and
lckcache. Add nis_clone_dir, nis_clone_obj, and nis_clone_res.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* wctype/test_wctype.c (TEST): Add parens to avoid ambiguity.
1997-10-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* include/features.h: Don't crash if _XOPEN_SOURCE is defined to
be empty.
1997-10-09 05:54 Ulrich Drepper <drepper@cygnus.com>
* nss/digits_dots.c: Place `result' in resbuf and not in `buffer'.
* nss/getXXbyYY_r.c: Make sure digits_dots.c sees `resbuf' as
struct and not a pointer. Little optimizations.
1997-10-09 05:00 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getenv.c: Remove unused file.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/stub/morecore.c: Likewise.
* sysdeps/stub/putenv.c: Likewise.
* sysdeps/stub/sbrk.c: Likewise.
* sysdeps/stub/setenv.c: Likewise.
* sysdeps/stub/sysd-stdio.c: Likewise.
* sysdeps/stub/sysdep.h: Likewise.
Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.
1997-10-09 04:58 Ulrich Drepper <drepper@cygnus.com>
* configure.in: Add __bzero definition to DWARF2 unwind test.
Reported by David S. Miller <davem@caip.rutgers.edu>.
1997-10-07 Paul Eggert <eggert@twinsun.com>
* intl/loadmsgcat.c (_nl_load_domain):
Fix &&/|| typo when checking file size.
Check for overflow when stuffing off_t into size_t.
1997-10-07 18:11 Ulrich Drepper <drepper@cygnus.com>
* time/africa: Update from tzdata1997i.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* posix/globtest.sh: Add arguments for name of dynamic linker and
call dynamic linker to execute globtest.
* posix/Makefile (tests): Supply arguments to globtest.sh.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* nis/rpcsvc/ypupd.h: Add missing __END_DECLS.
1997-10-03 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libc.map: Add mempcpy, prctl.
1997-09-30 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/generic/memcmp.c: Avoid warnings.
* sysdeps/generic/memset.c: Likewise.
* sysdeps/generic/strchr.c: Likewise.
* sysdeps/generic/strlen.c: Likewise.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* malloc/Makefile ($(objpfx)mtrace): Fix typo.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix last change.
The R_68K_GLOB_DAT and R_68K_JMP_SLOT relocations really ignore
the addend, Richard.
(elf_machine_fixup_plt): Don't add the addend.
(elf_machine_plt_value): New function.
* sysdeps/alpha/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/powerpc/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/i386/dl-machine.h (elf_machine_plt_value): New
function.
* elf/dl-runtime.c (fixup, profile_fixup): Don't add in the
addend, instead let the machine dependent setup decide.
1997-09-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/m68020/bits/string.h: New file.
1997-10-07 04:27 Richard Henderson <rth@cygnus.com>
* Makeconfig (+includes): Add -I$(objpfx).
* stdlib/longlong.h [__sparc__]: Prototype __udiv_qrnnd.
* sysdeps/alpha/setjmp.S: __setjmp is the same as _setjmp. Make
the former a strong symbol and the later a weak alias.
* sysdeps/sparc/sparc32/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Likewise.
1997-10-06 21:01 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Make ino_t
64-bits.
* sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h: Make st_ino
member 64-bits as well, to match the kernel.
1997-10-06 19:35 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/sparc/sparc64/sub_n.S: Fix typo.
Patch by Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>.
1997-10-06 01:09 Zack Weinberg <zack@rabi.phys.columbia.edu>
* time/README: Correct list of files from tzcode package. Add
contact information for tzcode/tzdata maintainers. Correct
spelling of author's name. Compact lists.
1997-10-06 01:48 Ulrich Drepper <drepper@cygnus.com>
* malloc/malloc.h: Remove hook definition without caller argument.
* malloc/malloc.c: Likewise.
* string/tester.c: Correct strsep test.
* string/bits/string2.h: Define __string2_1bptr_p and use it.
Patch by David S. Miller <davem@tanya.rutgers.edu>.
* math/Makefile (routines): Add s_clog10.
* math/libm-test.c: Add test for clog10.
* math/libm.map: Add clog10{,f,l}.
* math/bits/cmathcalls.h [__USE_GNU]: Add clog10.
* sysdeps/libm-ieee754/s_clog10.c: New file.
* sysdeps/libm-ieee754/s_clog10f.c: New file.
* sysdeps/libm-ieee754/s_clog10l.c: New file.
* manual/math.texi: Describe clog10.
* config.h.in: Add USE_REGPARMS and define internal_function based on
this.
* configure.in: Define USE_REGPARMS for ix86 machines.
* gmon/gmon.c: Mark write_hist, write_call_graph and write_bb_counts
as internal functions.
* inet/getnameinfo.c: Likewise for nrl_domainname.
* inet/getnetgrent_r.c: Likewise for __internal_setnetgrent_reuse.
* inet/rcmd.c: Likewise for __icheckhost.
* intl/dcgettext.c: Likewise for category_to_name and
guess_category_value.
* intl/localealias.c: Likewise for read_alias_file.
* io/fts.c: Likewise for fts_alloc, fts_build, fts_lfree,
fts_maxarglen, fts_padjust, fts_palloc, fts_sort, and fts_stat.
* libio/genops.c: Likewise for save_for_backup.
* malloc/malloc.c (chunk_free, chunk_alloc, chunk_realloc, chunk_align,
main_trim, heap_trim): Likewise.
* malloc/mtrace.c (tr_where): Likewise.
* misc/fstab.c (mnt2fs): Likewise.
* misc/getttyent.c (skip, value): Likewise.
* misc/syslog.c (openlog_internal): Likewise.
* misc/tsearch.c (trecurse, tdestroy_internal): Likewise.
* nss/nsswitch.c (nss_lookup_function, nss_parse_file, nss_getline,
nss_parse_service_list, nss_new_service): Likewise.
* posix/wordexp.c (parse_dollars, parse_backtick, eval_expr): Likewise.
* resolv/inet_ntop.c (inet_ntop4, inet_ntop6): Likewise.
* resolv/inet_pton.c (inet_pton4, inet_pton6): Likewise.
* resolv/res_init.c (res_setoptions): Likewise.
* stdio-common/printf_fp.c (group_number): Likewise.
* stdio-common/vfprintf.c (buffered_vfprintf, group_number): Likewise.
* stdlib/fmtmsg.c (internal_addseverity): Likewise.
* sunrpc/auth_des.c (synchronize): Likewise.
* sunrpc/auth_unix.c (marshal_new_auth): Likewise.
* sunrpc/clnt_perr.c (auth_errmsg): Likewise.
* sunrpc/key_call.c (key_call): Likewise.
* sunprc/pmap_rmt.c (getbroadcastnets): Likewise.
* sunrpc/svc_tcp.c (makefd_xprt): Likewise.
* sunrpc/svcauth_des.c (cache_init, cache_spot, cache_ref, invalidate):
Likewise.
* sunrpc/xdr_rec.c (fix_buf_size, skip_input_bytes, flush_out,
set_input_fragment, get_input_bytes): Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path,
phys_pages_info): Likewise.
* sysdeps/unix/sysv/linux/if_index.c (opensock): Likewise.
* sysdeps/unix/sysv/linux/poll.c (__emulate_poll): Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_readv_replacement):
Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_writev_replacement):
Likewise.
* time/strptime.c (strptime_internal): Likewise.
* time/tzfile.c (find_transition, compute_tzname_max): Likewise.
* time/tzset.c (compute_change, tz_compute, tzset_internal): Likewise.
* libc.map: Remove _libio_using_thunks, add _fp_hw and _dl_addr.
* ctype/ctype.h: Pretty print.
* grp/grp.h: Likewise.
* include/libc-symbols.h: Likewise.
* include/limits.h: Likewise.
* include/values.h: Likewise.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* libio/stdio.h: Likewise.
* malloc/malloc.h: Likewise.
* misc/err.h: Likewise.
* misc/regexp.h: Likewise.
* misc/sys/cdefs.h: Likewise.
* misc/sys/file.h: Likewise.
* posix/sys/utsname.h: Likewise.
* posix/sys/wait.h: Likewise.
* pwd/pwd.h: Likewise.
* resolv/netdb.h: Likewise.
* signal/signal.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/endian.h: Likewise.
* string/memory.h: Likewise.
* sysdeps/mach/hurd/bits/fcntl.h: Likewise.
* sysdeps/mach/hurd/sys/param.h: Likewise.
* sysdeps/unix/sysv/linux/sys/param.h: Likewise.
* termios/termios.h: Likewise.
* wcsmbs/wchar.h: Likewise.
* wctype/wctype.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/wait3.c: Use __WAIT_STATUS in definition.
Implement Large File Support API.
* include/features.h: Add suuport for _LARGEFILE_SOURCE,
_LARGEFILE64_SOURCE, and _FILE_OFFSET_BITS.
* libc.map: Add new functions for LFS.
* dirent/Makefile (routines): Add readdir64 and readdir64_r.
* dirent/dirent.h: Update readdir prototype for LFS and add new
prototypes for above functions.
* io/Makefile (routines): Add xstat64, fxstat64, lxstat64,
statfs64, fstatfs64, lstat64, open64, lseek64, creat64, and ftw64.
* io/creat64.c: New file.
* io/fstat64.c: New file.
* io/lstat64.c: New file.
* io/stat64.c: New file.
* io/ftw64.c: New file.
* io/ftw.c: Rewrite to allow easy definition of ftw64.
* io/ftw.h: Add LFS interface.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* io/sys/statfs.h: Likewise.
* libio/Makefile (routines): Add iofgetpos64, iofopen64, iofsetpos64,
freopen64, fseeko64, and ftello64.
* libcio/fseeko64.c: New file.
* libio/ftello64.c: New file.
* libio/iofgetpos64.c: New file.
* libio/iofopen64.c: New file.
* libio/iofsetpos64.c: New file.
* libio/fileops.c (_IO_file_fopen): Change to use _IO_off64_t.
(_IO_file_attach): Likewise.
(_IO_do_write): Likewise.
(_IO_file_sync): Likewise.
(_IO_file_seek): Likewise.
(_IO_file_seekoff): Likewise. Use _G_stat64.
(_IO_file_fopen64): New function.
(_IO_file_jumps): Initialize showmanyc and imbue.
* libio/genops.c (_IO_default_seekpos): Change to use _IO_fpos64_t.
(_IO_default_seekoff): Likewise.
(_IO_default_seek): Likewise.
(_IO_default_showmanyc, _IO_default_imbue): New functions.
* libio/iofopncook.c (_IO_cookie_seek): Change to use _IO_off64_t.
* libio/iolibio.h: Add prototypes for LFS functions.
* libio/ioseekoff.c: Change to use _IO_fpos64_t.
* libio/ioseekpos.c: Likewise.
* libio/libio.h: Define _IO_fpos64_t and _IO_off64_t.
(_IO_FILE): Move _offset field to end and change type to _IO_off64_t.
(_IO_seekoff, _IO_seekpos): Change prototype.
* libio/libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Change
to use _IO_off64_t.
Change prototypes for function from the *ops.c files.
* libio/stdio.h: Add LFS interface definition.
* libio/strops.c (_IO_str_seekoff): Change to use _IO_fpos64_t.
* posix/Makefile (routines): Add pread64 and pwrite64.
* posix/confstr.c: Handle _CS_LFS* requests.
* posix/getconf.c: Handle LFS* requests.
* sysdeps/generic/confname.h: Add _CS_LFS* constants.
* posix/unistd.h: Document _LFS64_LARGEFILE and _LFS64_STDIO.
Define off_t and off64_t appropriately. Change prototypes of
LFS functions.
* posix/sys/types.h: Add LFS types.
* resources/Makefile (routines): Add getrlimit64 and setlimit64.
* resource/sys/resource.h: Change prototypes of LFS functions.
* stdio-common/Makefile (routines): Add tmpfile64.
* stdio-common/tmpfile64.c: New file.
* sysdeps/generic/_G_config.h: Define _G_fpos64_t and _G_off64_t.
Define _G_OPEN64, _G_LSEEK64, _G_FSTAT64.
* sysdeps/unix/sysv/linux/_G_config.h: Likewise.
* sysdeps/generic/bits/resource.h: Add LFS definitions.
* sysdeps/unix/bsd/sun/sunos4/bits/resource.h: Likewise.
* sysdeps/unix/sysv/linux/bits/resource.h: Likewise.
* sysdeps/generic/statfs.h: Use __fsblkcnt_t for some of the fields.
* sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
* sysdeps/generic/types.h: Define LFS types.
* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
* sysdeps/generic/sys/mman.h: Add LFS definitions.
* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
* sysdeps/generic/mach/hurd/bits/fcntl.h: Add flock LFS extensions.
* sysdeps/unix/bsd/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
* sysdeps/generic/mach/hurd/bits/stat.h: Add stat LFS extensions.
* sysdeps/unix/bsd/bits/stat.h: Likewise.
* sysdeps/unix/bsd/osf/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/i386/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h: Likewise.
* sysdeps/posix/open64.c: New file.
* sysdeps/stub/fstatfs64.c: New file.
* sysdeps/stub/fxstat64.c: New file.
* sysdeps/stub/getrlimit64.c: New file.
* sysdeps/stub/lseek64.c: New file.
* sysdeps/stub/lxstat64.c: New file.
* sysdeps/stub/open64.c: New file.
* sysdeps/stub/pread64.c: New file.
* sysdeps/stub/pwrite64.c: New file.
* sysdeps/stub/readdir64.c: New file.
* sysdeps/stub/readdir64_r.c: New file.
* sysdeps/stub/setrlimit64.c: New file.
* sysdeps/stub/statfs64.c: New file.
* sysdeps/stub/xstat64.c: New file.
* sysdeps/unix/sysv/linux/llseek.c: Define as __llseek and make
llseek and lseek64 weak aliases.
* sysdeps/unix/sysv/linux/lseek64.c: New file. Empty.
* sysdeps/unix/sysv/linux/alpha/bits/dirent.h: New file.
* sysdeps/unix/sysv/linux/bits/dirent.h: Add LFS definitions.
* sysdeps/posix/tempname.c: Add extra argument to trigger use of
open64.
* sysdeps/stub/tempname.c: Likewise.
* stdio-common/tempnam.c: Call __stdio_gen_tempname with extra
argument.
* stdio-common/tmpfile.c: Likewise.
* stdio-common/tmpnam.c: Likewise.
* stdio-common/tmpnam_r.c: Likewise.
* libio/libioP.h: Add definition ofr showmanyc and imbue callbacks.
* libio/fileops.c (_IO_file_jumps): Initialize showmanyc and imbue.
* libio/iofopncook.c (_IO_cookie_jumps): Likewise.
* libio/iopopen.c (_IO_proc_jumps): Likewise.
* libio/memstream.c (_IO_mem_jumps): Likewise.
* libio/obprintf.c (_IO_obstack_jumps): Likewise.
* libio/vsnprintf.c (_IO_strn_jumps): Likewise.
* libio/strops.c (_IO_str_jumps): Likewise.
* manual/arith.texi: Add a few words why cabs should be used.
* manual/llio.texi: Describe sync, fsync, fdatasync.
Tell about cleanup handlers & fcntl,lseek,write,read,close,open.
* manual/process.texi: Tell about cleanup handlers & system,waitpid,
wait.
* manual/signal.texi: Likewise for pause.
* manual/terminal.texi: Likewise for tcdrain.
* manual/time.texi: Document nanosleep.
* posix/exevp.c: Don't use nested function.
* stdlib/ucontext.h: New file.
* sysdeps/i386/sys/ucontext.h: New file. SysV/i386 API definitions.
* sunrpc/xcrypt.c (hexval): Make a macro for efficiency.
* sysdeps/i386/setjmp.h: Make `here` label local.
* sysdeps/i386/elf/start.S: Define _fp_hw "variable".
* sysdeps/stub/fstatfs.c: Correct warning.
* sysdeps/stub/fxstat.c: Likewise.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/unix/sysv/i386/i686/time.S: New file.
1997-10-03 20:56 Jason Merrill <jason@yorick.cygnus.com>
* malloc/obstack.h (obstack_empty_p): New macro.
1997-10-04 17:41 Philip Blundell <Philip.Blundell@pobox.com>
* inet/getnameinfo.c (getnameinfo): Remove spurious `#if INET6'.
1997-09-30 Zack Weinberg <zack@rabi.phys.columbia.edu>
* maint.texi: Add copyright terms for libdb (Sleepycat, Harvard).
Document new --with-binutils switch; delete reference to
--with-gnu-as, --with-gnu-ld, --with-gnu-binutils.
Add to description of --without-fp: a kernel FPU emulator
is adequate (from FAQ)
* INSTALL: Regenerated.
1997-09-30 17:29 Richard Henderson <rth@cygnus.com>
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Move
_dl_hwcap declaration to ...
(elf_machine_fixup_plt): ... here.
1997-10-12 12:05:44 +08:00
|
|
|
/* Do the shift in two steps to avoid a warning if long has 32 bits. */
|
|
|
|
charmask |= (charmask << 16) << 16;
|
1995-02-18 09:27:10 +08:00
|
|
|
if (sizeof (longword) > 8)
|
|
|
|
abort ();
|
|
|
|
|
|
|
|
/* Instead of the traditional loop which tests each character,
|
|
|
|
we will test a longword at a time. The tricky part is testing
|
|
|
|
if *any of the four* bytes in the longword in question are zero. */
|
|
|
|
for (;;)
|
|
|
|
{
|
|
|
|
/* We tentatively exit the loop if adding MAGIC_BITS to
|
|
|
|
LONGWORD fails to change any of the hole bits of LONGWORD.
|
|
|
|
|
|
|
|
1) Is this safe? Will it catch all the zero bytes?
|
|
|
|
Suppose there is a byte with all zeros. Any carry bits
|
|
|
|
propagating from its left will fall into the hole at its
|
|
|
|
least significant bit and stop. Since there will be no
|
|
|
|
carry from its most significant bit, the LSB of the
|
|
|
|
byte to the left will be unchanged, and the zero will be
|
|
|
|
detected.
|
|
|
|
|
|
|
|
2) Is this worthwhile? Will it ignore everything except
|
|
|
|
zero bytes? Suppose every byte of LONGWORD has a bit set
|
|
|
|
somewhere. There will be a carry into bit 8. If bit 8
|
|
|
|
is set, this will carry into bit 16. If bit 8 is clear,
|
|
|
|
one of bits 9-15 must be set, so there will be a carry
|
|
|
|
into bit 16. Similarly, there will be a carry into bit
|
|
|
|
24. If one of bits 24-30 is set, there will be a carry
|
|
|
|
into bit 31, so all of the hole bits will be changed.
|
|
|
|
|
|
|
|
The one misfire occurs when bits 24-30 are clear and bit
|
|
|
|
31 is set; in this case, the hole at bit 31 is not
|
|
|
|
changed. If we had access to the processor carry flag,
|
|
|
|
we could close this loophole by putting the fourth hole
|
|
|
|
at bit 32!
|
|
|
|
|
|
|
|
So it ignores everything except 128's, when they're aligned
|
|
|
|
properly.
|
|
|
|
|
|
|
|
3) But wait! Aren't we looking for C as well as zero?
|
|
|
|
Good point. So what we do is XOR LONGWORD with a longword,
|
|
|
|
each of whose bytes is C. This turns each byte that is C
|
|
|
|
into a zero. */
|
|
|
|
|
|
|
|
longword = *longword_ptr++;
|
|
|
|
|
|
|
|
/* Add MAGIC_BITS to LONGWORD. */
|
|
|
|
if ((((longword + magic_bits)
|
1996-12-20 09:39:50 +08:00
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
/* Set those bits that were unchanged by the addition. */
|
|
|
|
^ ~longword)
|
1996-12-20 09:39:50 +08:00
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
/* Look at only the hole bits. If any of the hole bits
|
|
|
|
are unchanged, most likely one of the bytes was a
|
|
|
|
zero. */
|
|
|
|
& ~magic_bits) != 0 ||
|
|
|
|
|
|
|
|
/* That caught zeroes. Now test for C. */
|
|
|
|
((((longword ^ charmask) + magic_bits) ^ ~(longword ^ charmask))
|
|
|
|
& ~magic_bits) != 0)
|
|
|
|
{
|
|
|
|
/* Which of the bytes was C or zero?
|
|
|
|
If none of them were, it was a misfire; continue the search. */
|
|
|
|
|
1997-02-15 12:31:36 +08:00
|
|
|
const unsigned char *cp = (const unsigned char *) (longword_ptr - 1);
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
if (*cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
if (*++cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
if (*++cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
if (*++cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
if (sizeof (longword) > 4)
|
|
|
|
{
|
|
|
|
if (*++cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
if (*++cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
if (*++cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
if (*++cp == c)
|
|
|
|
return (char *) cp;
|
|
|
|
else if (*cp == '\0')
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef weak_alias
|
2015-08-26 16:26:23 +08:00
|
|
|
# undef index
|
1995-02-18 09:27:10 +08:00
|
|
|
weak_alias (strchr, index)
|
|
|
|
#endif
|
Update.
* sysdeps/i386/fpu/ftestexcept.c: Also check SSE status word.
* include/signal.h: Use libc_hidden_proto for sigaddset and sigdelset.
* signal/sigaddset.c: Add libc_hidden_def.
* signal/sigdelset.c: Likewise.
2003-04-29 Jakub Jelinek <jakub@redhat.com>
* sysdeps/i386/i486/string-inlines.c (__memcpy_g, __strchr_g): Move
to the end of the file.
* configure.in: Change __oline__ to $LINENO.
(HAVE_BUILTIN_REDIRECTION): New check.
* config.h.in (HAVE_BUILTIN_REDIRECTION): Add.
* include/libc-symbols.h (libc_hidden_builtin_proto,
libc_hidden_builtin_def, libc_hidden_builtin_weak,
libc_hidden_builtin_ver): Define.
* include/string.h (memchr, memcpy, memmove, memset, strcat, strchr,
strcmp, strcpy, strcspn, strlen, strncmp, strncpy, strpbrk, strrchr,
strspn, strstr): Add libc_hidden_builtin_proto.
* intl/plural.y: Include string.h.
* sysdeps/alpha/alphaev6/memchr.S (memchr): Add
libc_hidden_builtin_def.
* sysdeps/alpha/alphaev6/memcpy.S (memcpy): Likewise.
* sysdeps/alpha/alphaev6/memset.S (memset): Likewise.
* sysdeps/alpha/alphaev67/strcat.S (strcat): Likewise.
* sysdeps/alpha/alphaev67/strchr.S (strchr): Likewise.
* sysdeps/alpha/alphaev67/strlen.S (strlen): Likewise.
* sysdeps/alpha/alphaev67/strrchr.S (strrchr): Likewise.
* sysdeps/alpha/memchr.S (memchr): Likewise.
* sysdeps/alpha/memset.S (memset): Likewise.
* sysdeps/alpha/strcat.S (strcat): Likewise.
* sysdeps/alpha/strchr.S (strchr): Likewise.
* sysdeps/alpha/strcmp.S (strcmp): Likewise.
* sysdeps/alpha/strcpy.S (strcpy): Likewise.
* sysdeps/alpha/strlen.S (strlen): Likewise.
* sysdeps/alpha/strncmp.S (strncmp): Likewise.
* sysdeps/alpha/strncpy.S (strncpy): Likewise.
* sysdeps/alpha/strrchr.S (strrchr): Likewise.
* sysdeps/arm/memset.S (memset): Likewise.
* sysdeps/arm/strlen.S (strlen): Likewise.
* sysdeps/generic/memchr.c (memchr): Likewise.
* sysdeps/generic/memcpy.c (memcpy): Likewise.
* sysdeps/generic/memmove.c (memmove): Likewise.
* sysdeps/generic/memset.c (memset): Likewise.
* sysdeps/generic/strcat.c (strcat): Likewise.
* sysdeps/generic/strchr.c (strchr): Likewise.
* sysdeps/generic/strcmp.c (strcmp): Likewise.
* sysdeps/generic/strcpy.c (strcpy): Likewise.
* sysdeps/generic/strcspn.c (strcspn): Likewise.
* sysdeps/generic/strlen.c (strlen): Likewise.
* sysdeps/generic/strncmp.c (strncmp): Likewise.
* sysdeps/generic/strncpy.c (strncpy): Likewise.
* sysdeps/generic/strpbrk.c (strpbrk): Likewise.
* sysdeps/generic/strrchr.c (strrchr): Likewise.
* sysdeps/generic/strspn.c (strspn): Likewise.
* sysdeps/generic/strstr.c (strstr): Likewise.
* sysdeps/i386/i486/strcat.S (strcat): Likewise.
* sysdeps/i386/i486/strlen.S (strlen): Likewise.
* sysdeps/i386/i586/memcpy.S (memcpy): Likewise.
* sysdeps/i386/i586/memset.S (memset): Likewise.
* sysdeps/i386/i586/strchr.S (strchr): Likewise.
* sysdeps/i386/i586/strcpy.S (strcpy): Likewise.
* sysdeps/i386/i586/strlen.S (strlen): Likewise.
* sysdeps/i386/i686/memcpy.S (memcpy): Likewise.
* sysdeps/i386/i686/memmove.S (memmove): Likewise.
* sysdeps/i386/i686/memset.S (memset): Likewise.
* sysdeps/i386/i686/strcmp.S (strcmp): Likewise.
* sysdeps/i386/memchr.S (memchr): Likewise.
* sysdeps/i386/memset.c (memset): Likewise.
* sysdeps/i386/strchr.S (strchr): Likewise.
* sysdeps/i386/strcspn.S (strcspn): Likewise.
* sysdeps/i386/strlen.c (strlen): Likewise.
* sysdeps/i386/strpbrk.S (strpbrk): Likewise.
* sysdeps/i386/strrchr.S (strrchr): Likewise.
* sysdeps/i386/strspn.S (strspn): Likewise.
* sysdeps/ia64/memchr.S (memchr): Likewise.
* sysdeps/ia64/memcpy.S (memcpy): Likewise.
* sysdeps/ia64/memmove.S (memmove): Likewise.
* sysdeps/ia64/memset.S (memset): Likewise.
* sysdeps/ia64/strcat.S (strcat): Likewise.
* sysdeps/ia64/strchr.S (strchr): Likewise.
* sysdeps/ia64/strcmp.S (strcmp): Likewise.
* sysdeps/ia64/strcpy.S (strcpy): Likewise.
* sysdeps/ia64/strlen.S (strlen): Likewise.
* sysdeps/ia64/strncmp.S (strncmp): Likewise.
* sysdeps/ia64/strncpy.S (strncpy): Likewise.
* sysdeps/m68k/memchr.S (memchr): Likewise.
* sysdeps/m68k/strchr.S (strchr): Likewise.
* sysdeps/mips/mips64/memcpy.S (memcpy): Likewise.
* sysdeps/mips/mips64/memset.S (memset): Likewise.
* sysdeps/mips/memcpy.S (memcpy): Likewise.
* sysdeps/mips/memset.S (memset): Likewise.
* sysdeps/powerpc/powerpc32/memset.S (memset): Likewise.
* sysdeps/powerpc/powerpc32/strchr.S (strchr): Likewise.
* sysdeps/powerpc/powerpc32/strcmp.S (strcmp): Likewise.
* sysdeps/powerpc/powerpc32/strcpy.S (strcpy): Likewise.
* sysdeps/powerpc/powerpc32/strlen.S (strlen): Likewise.
* sysdeps/powerpc/powerpc64/memcpy.S (memcpy): Likewise.
* sysdeps/powerpc/powerpc64/memset.S (memset): Likewise.
* sysdeps/powerpc/powerpc64/strchr.S (strchr): Likewise.
* sysdeps/powerpc/powerpc64/strcmp.S (strcmp): Likewise.
* sysdeps/powerpc/powerpc64/strcpy.S (strcpy): Likewise.
* sysdeps/powerpc/powerpc64/strlen.S (strlen): Likewise.
* sysdeps/powerpc/strcat.c (strcat): Likewise.
* sysdeps/sparc/sparc32/memchr.S (memchr): Likewise.
* sysdeps/sparc/sparc32/memcpy.S (memcpy): Likewise.
* sysdeps/sparc/sparc32/memset.S (memset): Likewise.
* sysdeps/sparc/sparc32/strcat.S (strcat): Likewise.
* sysdeps/sparc/sparc32/strchr.S (strchr, strrchr): Likewise.
* sysdeps/sparc/sparc32/strcmp.S (strcmp): Likewise.
* sysdeps/sparc/sparc32/strcpy.S (strcpy): Likewise.
* sysdeps/sparc/sparc32/strlen.S (strlen): Likewise.
* sysdeps/sparc/sparc64/sparcv9b/memcpy.S (memcpy, memmove): Likewise.
* sysdeps/sparc/sparc64/memchr.S (memchr): Likewise.
* sysdeps/sparc/sparc64/memcpy.S (memcpy, memmove): Likewise.
* sysdeps/sparc/sparc64/memset.S (memset): Likewise.
* sysdeps/sparc/sparc64/strcat.S (strcat): Likewise.
* sysdeps/sparc/sparc64/strchr.S (strchr, strrchr): Likewise.
* sysdeps/sparc/sparc64/strcmp.S (strcmp): Likewise.
* sysdeps/sparc/sparc64/strcpy.S (strcpy): Likewise.
* sysdeps/sparc/sparc64/strcspn.S (strcspn): Likewise.
* sysdeps/sparc/sparc64/strlen.S (strlen): Likewise.
* sysdeps/sparc/sparc64/strncmp.S (strncmp): Likewise.
* sysdeps/sparc/sparc64/strncpy.S (strncpy): Likewise.
* sysdeps/sparc/sparc64/strpbrk.S (strpbrk): Likewise.
* sysdeps/sparc/sparc64/strspn.S (strspn): Likewise.
* sysdeps/sh/memcpy.S (memcpy): Likewise.
* sysdeps/sh/memset.S (memset): Likewise.
* sysdeps/sh/strlen.S (strlen): Likewise.
* sysdeps/s390/s390-32/memchr.S (memchr): Likewise.
* sysdeps/s390/s390-32/memcpy.S (memcpy): Likewise.
* sysdeps/s390/s390-32/memset.S (memset): Likewise.
* sysdeps/s390/s390-32/strcmp.S (strcmp): Likewise.
* sysdeps/s390/s390-32/strcpy.S (strcpy): Likewise.
* sysdeps/s390/s390-32/strncpy.S (strncpy): Likewise.
* sysdeps/s390/s390-64/memchr.S (memchr): Likewise.
* sysdeps/s390/s390-64/memcpy.S (memcpy): Likewise.
* sysdeps/s390/s390-64/memset.S (memset): Likewise.
* sysdeps/s390/s390-64/strcmp.S (strcmp): Likewise.
* sysdeps/s390/s390-64/strcpy.S (strcpy): Likewise.
* sysdeps/s390/s390-64/strncpy.S (strncpy): Likewise.
* sysdeps/x86_64/memcpy.S (memcpy): Likewise.
* sysdeps/x86_64/memset.S (memset): Likewise.
* sysdeps/x86_64/strcat.S (strcat): Likewise.
* sysdeps/x86_64/strchr.S (strchr): Likewise.
* sysdeps/x86_64/strcmp.S (strcmp): Likewise.
* sysdeps/x86_64/strcpy.S (strcpy): Likewise.
* sysdeps/x86_64/strcspn.S (strcspn): Likewise.
* sysdeps/x86_64/strlen.S (strlen): Likewise.
* sysdeps/x86_64/strspn.S (strspn): Likewise.
* string/string-inlines.c: Move...
* sysdeps/generic/string-inlines.c: ...here.
(__memcpy_g, __strchr_g): Remove.
(__NO_INLINE__): Define before including <string.h>,
undefine after. Include bits/string.h and bits/string2.h.
* sysdeps/i386/i486/string-inlines.c: New file.
* sysdeps/i386/string-inlines.c: New file.
* sysdeps/i386/i486/Versions: Remove.
All GLIBC_2.1.1 symbols moved...
* sysdeps/i386/Versions (libc): ...here.
2003-04-29 Ulrich Drepper <drepper@redhat.com>
2003-04-30 06:49:58 +08:00
|
|
|
libc_hidden_builtin_def (strchr)
|