From 84384f5b6aaa622236ada8c9a7ff51f40b91fc20 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 20 Nov 1996 03:45:51 +0000 Subject: update from main archive 961119 Wed Nov 20 02:04:11 1996 Ulrich Drepper * sysdeps/unix/sysv/linux/sigsuspend.c: Make sigsuspend a weak alias of __sigsuspend. * grp/grp.h: Correct comment about POSIX compliance. * pwd/pwd.h: Likewise. * login/utmp.h: Update copyright and pretty-print prototypes. * sysdeps/generic/paths.h: Add _PATH_LASTLOG, _PATH_UTMP and _PATH_WTMP from utmpbits.h. * sysdeps/unix/sysv/linux/paths.h: Likewise. * sysdeps/generic/utmpbits.h: Remove here. * sysdeps/gnu/utmpbits.h: Likewise. * misc/sys/uio.h: Place __BEGIN_DECLS correctly. Pretty-print prototypes. * sysdeps/unix/sysv/linux/sparc/clone.S: New file. Taken from LinuxThreads-0.5. Tue Nov 19 13:43:07 1996 Richard Henderson * inet/ether_hton.c: Include . * inet/ether_ntoh.c: Likewise. * inet/rexec.c: Get errno, index, getpass, getlogin from headers. * misc/search.h: Fix hcreate_r argument type (unsigned -> size_t). * misc/sys/cdefs.h: Change __long_double_t definition from typedef to define. Jim Nance reports problems building XEmacs otherwise. * resolv/gethnamaddr.c: Protect h_errno redefinition. * resolv/getnetnamadr.c: Likewise. * resolv/herror.c: Likewise. * sysdeps/generic/sigset.h (__SIGSETFN): Operator ## doesn't work with -traditional. Reported by Eric Youngdale. While we're at this, don't do error checking in the __ functions. This is consistent with the sysv4 definitions and seems Right. * signal/signal.h: Don't __OPTIMIZE__ sigops to __ versions. Add prototype for __sigsuspend. * sysdeps/posix/sigblock.c: Optimize sigmask <-> sigset_t conversions for sigset_t == unsigned long. De-ansidecl-ify. Reformat copyright. * sysdeps/posix/sigpause.c: Likewise. * sysdeps/posix/sigsetmask.c: Likewise. * sysdeps/posix/sigvec.c: Likewise. * sysdeps/posix/sigintr.c: Reformat copyright. * sysdeps/posix/signal.c: Check signal number out of range since __sigismember doesn't anymore. Reformat copyright. * sysdeps/posix/sigwait.c: Use __ versions of sigfillset, sigismember, sigdelset, sigaction, and sigsuspend. * stdlib/drand48-iter.c (__drand48_iterate): Cast state fragments to the wider type before shifting. * sysdeps/alpha/bsd-_setjmp.S: Silence assembler warning "$at used without .set noat" in profiling hook. * sysdeps/alpha/bsd-setjmp.S: Likewise. * sysdeps/alpha/htonl.S: Likewise. * sysdeps/alpha/htons.S: Likewise. * sysdeps/alpha/s_copysign.S: Likewise. * sysdeps/alpha/setjmp.S: Likewise. * sysdeps/alpha/stpcpy.S: Likewise. * sysdeps/alpha/strcat.S: Likewise. * sysdeps/alpha/strcpy.S: Likewise. * sysdeps/alpha/strncat.S: Likewise. * sysdeps/unix/sysv/linux/alpha/brk.S: Likewise. * sysdeps/unix/sysv/linux/alpha/clone.S: Likewise. * sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S: Likewise. * sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S: Likewise. * sysdeps/unix/sysv/linux/alpha/llseek.S: Likewise. * sysdeps/unix/sysv/linux/alpha/sigsuspend.S: Likewise. Rename function to __sigsuspend and add weak alias. * sysdeps/unix/sysv/linux/alpha/syscall.S: Likewise. Add missing END. * sysdeps/alpha/w_sqrt.S: Define _ERRNO_H so defines EDOM. * sysdeps/unix/execve.S: Match PSEUDO_END symbol with the symbol SYSCALL__ actually generated. * sysdeps/unix/sysv/linux/errnos.h [_LIBC_REENTRANT]: Reflexively #define __set_errno, as several imported subsystems (eg. BIND) check that the symbol is defined. * sysdeps/unix/sysv/linux/getsysstats.c: Include . * sysdeps/alpha/memcpy.S: Temporarily remove until I can find a bug that manifests in GCC. Tue Nov 19 11:10:05 1996 Thomas Bushnell, n/BSG * sysdeps/posix/writev.c (writev): COUNT parm is now int. * sysdeps/posix/readv.c (readv): Likewise. Tue Nov 19 15:28:29 1996 Ulrich Drepper * nss/nss_dns/dns-network.c: Change return type of all functions to enum nss_status. Reported by NIIBE Yutaka. * nss/nss_dns/dns-host.c: Update copyright. Fri Nov 15 20:16:38 1996 Andreas Schwab * config.make.in: Remove definition of top_absdir. * configure.in: Likewise. Use $(..) instead. * Makerules (make-link): Use $(..) to find rellns-sh script. Sat Nov 16 15:52:29 1996 Andreas Schwab * manual/nss.texi (Name Service Switch): Fix reference to `frobnicate'. Fri Nov 15 22:08:33 1996 Andreas Schwab * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add sys/mtio.h. Mon Nov 18 05:51:13 1996 Ulrich Drepper * sysdeps/generic/waitstatus.h (__WIFSIGNALED): Rename local variable from __stat to __status to prevent shadowing. * sunrpc/rpc/clnt.h (clntudp_create, clntudp_bufcreate): Likewise for parameter __wait. Reported by NIIBE Yutaka. Mon Nov 18 02:05:38 1996 Ulrich Drepper * misc/regexp.c: New file. Implementation of obsolete interface to regular expression matcher (required in XPG4.2). * misc/regexp.h: New file. Header for above. * misc/Makefile (headers): Add regexp.h. (routines): Add regexp.c. Update copyright. Sun Nov 17 21:50:24 1996 Andreas Jaeger * stdlib/tst-strtod.c (main): Add arguments for main. * stdlib/tst-strtol.c (main): Likewise. Sun Nov 17 21:15:05 1996 Ulrich Drepper * configure.in: Substitute libc_cv_slibdir and libc_cv_sysconfdir in output files. * sysdepes/unix/sysv/linux/configure: Define libc_cv_slibdir to /lib and sysconfdir to /etc if $prefix is /usr. * config.make.in: Add slibdir, sysconfdir and BASH to be replaced. * elf/Makefile ($(objpfx)ldd): Install ldd.bash.in if $(have-bash2) is yes. * elf/ldd.bash.in: Add copyright and various cleanups. * elf/ldd.sh.in: Likewise. Implement RTLD_NEXT. * elf/dlfcn.h: Define RTLD_NEXT. * elf/dl-deps.c: Build second searchlist which contains duplicates. * elf/dl-lookup.c (_dl_lookup_symbol_skip): New function. Used for RTLD_NEXT lookup. Rewrite _dl_lookup_symbol to put common parts for both lookup functions in a separate function. * elf/dlsym.c: Handle RTLD_NEXT by calling _dl_lookup_symbol_skip. * elf/link.h (struct link_map): Add l_dupsearchlist and l_ndupsearchlist. Add prototype for _dl_lookup_symbol_skip. * sunrpc/Makefile (rpcsvc): Add rusers. * sunrpc/rpcsvc/rnusers.x: Remove. Obsolteted by rusers.x. * sunrpc/rpcsvc/rusers.x: New file. Sun Nov 17 04:24:35 1996 Ulrich Drepper * stdio-common/vfprintf.c [USE_IN_LIBIO] (buffered_vfprintf): Call __libc_lock_init for local lock. Reported by a sun . [!USE_IN_LIBIO] (PAD): Optimize a bit. --- misc/Makefile | 11 +-- misc/regexp.c | 76 ++++++++++++++++++++ misc/regexp.h | 213 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ misc/search.h | 2 +- misc/sys/cdefs.h | 4 +- misc/sys/uio.h | 8 +-- 6 files changed, 302 insertions(+), 12 deletions(-) create mode 100644 misc/regexp.c create mode 100644 misc/regexp.h (limited to 'misc') diff --git a/misc/Makefile b/misc/Makefile index 46b078c081..74e0a736e7 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -12,9 +12,9 @@ # 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., 675 Mass Ave, -# Cambridge, MA 02139, USA. +# 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. # # Sub-makefile for misc portion of the library. @@ -28,7 +28,8 @@ headers := sys/uio.h iovec.h sys/ioctl.h ioctls.h ioctl-types.h \ ttyent.h syslog.h sys/syslog.h paths.h sys/reboot.h \ sys/mman.h sys/param.h fstab.h mntent.h search.h err.h error.h\ sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \ - sys/select.h ustat.h sys/ustat.h ustatbits.h sys/sysinfo.h + sys/select.h ustat.h sys/ustat.h ustatbits.h sys/sysinfo.h \ + regexp.h routines := brk sbrk sstk ioctl \ readv writev \ @@ -55,7 +56,7 @@ routines := brk sbrk sstk ioctl \ efgcvt efgcvt_r qefgcvt qefgcvt_r \ hsearch hsearch_r tsearch lsearch \ err error ustat \ - getsysstats dirname + getsysstats dirname regexp aux := init-misc distribute := bsd-compat.c extra-objs := bsd-compat.o diff --git a/misc/regexp.c b/misc/regexp.c new file mode 100644 index 0000000000..34019aeb1a --- /dev/null +++ b/misc/regexp.c @@ -0,0 +1,76 @@ +/* Define function and variables for the obsolete interface. + Copyright (C) 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 1996. + + 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 __DO_NOT_DEFINE_COMPILE +#include + +/* Define the variables used for the interface. */ +char *loc1; +char *loc2; + +/* Although we do not support the use we define this variable as well. */ +char *locs; + + +/* Find the next match in STRING. The compiled regular expression is + found in the buffer starting at EXPBUF. `loc1' will return the + first character matched and `loc2' points to the next unmatched + character. */ +int +__step (const char *string, const char *expbuf) +{ + regmatch_t match; /* We only need info about the full match. */ + + expbuf += __alignof (regex_t *); + expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *); + + if (regexec ((regex_t *) expbuf, string, 1, &match, REG_NOTEOL) + == REG_NOMATCH) + return 0; + + loc1 = (char *) string + match.rm_so; + loc2 = (char *) string + match.rm_eo; + return 1; +} +weak_alias (__step, step) + + +/* Match the beginning of STRING with the compiled regular expression + in EXPBUF. If the match is successful `loc2' will contain the + position of the first unmatched character. */ +int +__advance (const char *string, const char *expbuf) +{ + regmatch_t match; /* We only need info about the full match. */ + + expbuf += __alignof__ (regex_t *); + expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *); + + if (regexec ((regex_t *) expbuf, string, 1, &match, REG_NOTEOL) + == REG_NOMATCH + /* We have to check whether the check is at the beginning of the + buffer. */ + || match.rm_so != 0) + return 0; + + loc2 = (char *) string + match.rm_eo; + return 1; +} +weak_alias (__advance, advance) diff --git a/misc/regexp.h b/misc/regexp.h new file mode 100644 index 0000000000..e31407e6ed --- /dev/null +++ b/misc/regexp.h @@ -0,0 +1,213 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 1996. + + 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 _REGEXP_H +#define _REGEXP_H 1 + +/* The contents of this header file was first standardized in X/Open + System Interface and Headers Issue 2, originally coming from SysV. + In issue 4, version 2, it is marked as TO BE WITDRAWN. + + This code shouldn't be used in any newly written code. It is + included only for compatibility reasons. Use the POSIX definition + in for portable applications and a reasonable interface. */ + +#include +#include +#include +#include + +/* The implementation provided here emulates the needed functionality + by mapping to the POSIX regular expression matcher. The interface + for the here included function is weird (this really is a harmless + word). + + The user has to provide five macros before this header file can be + included: + + GETC() Return the value of the next character in the regular + expression pattern. Successive calls should return + successive characters. + + PEEKC() Return the value of the next character in the regular + expression pattern. Immediately successive calls to + PEEKC() should return the same character which should + also be the next character returned by GETC(). + + UNGETC(c) Cause `c' to be returned by the next call to GETC() and + PEEKC(). + + RETURN(ptr) Used for normal exit of the `compile' function. `ptr' + is a pointer to the character after the last character of + the compiled regular expression. + + ERROR(val) Used for abnormal return from `compile'. `val' is the + error number. The error codes are: + 11 Range endpoint too large. + 16 Bad number. + 25 \digit out of range. + 36 Illegal or missing delimiter. + 41 No remembered search string. + 42 \( \) imbalance. + 43 Too many \(. + 44 More tan two numbers given in \{ \}. + 45 } expected after \. + 46 First number exceeds second in \{ \}. + 49 [ ] imbalance. + 50 Regular expression overflow. + + */ + +__BEGIN_DECLS + +/* Interface variables. They contain the results of the successful + calls to `setp' and `advance'. */ +extern char *loc1; +extern char *loc2; + +/* The use of this variable in the `advance' function is not + supported. */ +extern char *locs; + + +#ifndef __DO_NOT_DEFINE_COMPILE +/* Get and compile the user supplied pattern up to end of line or + string or until EOF is seen, whatever happens first. The result is + placed in the buffer starting at EXPBUG and delimited by ENDBUF. + + This function cannot be defined in the libc itself since it depends + on the macros. */ +char * +compile (char *__instring, char *__expbuf, __const char *__endbuf, int __eof) +{ + char *__input_buffer = NULL; + size_t __input_size = 0; + size_t __current_size; + int __ch; + int __result; + + /* Align the expression buffer according to the needs for an object + of type `regex_t'. Then check for minimum size of the buffer for + the compiled regular expression. */ + regex_t *__expr_ptr; +#if defined __GNUC__ && __GNUC__ >= 2 + const size_t __req = __alignof__ (regex_t *); +#else + /* How shall we find out? We simply guess it and can change it is + this really proofs to be wrong. */ + const size_t __req = 8; +#endif + __expbuf += __req; + __expbuf -= (__expbuf - ((char *) 0)) % __req; + if (__endbuf < __expbuf + sizeof (regex_t)) + { + ERROR (50); + } + __expr_ptr = (regex_t *) __expbuf; + /* The remaining space in the buffer can be used for the compiled + pattern. */ + __expr_ptr->buffer = __expbuf + sizeof (regex_t); + __expr_ptr->allocated = __endbuf - (char *) __expr_ptr->buffer; + + while ((__ch = (GETC ())) != __eof) + { + if (__ch == '\0' || __ch == 'n') + { + UNGETC (__ch); + break; + } + + if (__current_size + 1 >= __input_size) + { + size_t __new_size = __input_size ? 2 * __input_size : 128; + char *__new_room = __alloca (__new_size); + /* See whether we can use the old buffer. */ + if (__new_room + __new_size == __input_buffer) + { + __input_size += __new_size; + __input_buffer = memcpy (__new_room, __input_buffer, + __current_size); + } + else if (__input_buffer + __input_size == __new_room) + __input_size += __new_size; + else + { + __input_size = __new_size; + __input_buffer = memcpy (__new_room, __input_buffer, + __current_size); + } + } + __input_buffer[__current_size++] = __ch; + } + __input_buffer[__current_size++] = '\0'; + + /* Now compile the pattern. */ + __error = regcomp (__expr_ptr, __input_buffer, REG_NEWLINE); + if (__error != 0) + /* Oh well, we have to translate POSIX error codes. */ + switch (__error) + { + case REG_BADPAT: + case REG_ECOLLATE: + case REG_ECTYPE: + case REG_EESCAPE: + case REG_BADRPT: + case REG_EEND: + case REG_RPAREN: + default: + /* There is no matching error code. */ + RETURN (36); + case REG_ESUBREG: + RETURN (25); + case REG_EBRACK: + RETURN (49); + case REG_EPAREN: + RETURN (42); + case REG_EBRACE: + RETURN (44); + case REG_BADBR: + RETURN (46); + case REG_ERANGE: + RETURN (11); + case REG_ESPACE: + case REG_ESIZE: + ERROR (50); + } + + /* Everything is ok. */ + RETURN ((char *) (__expr_ptr->buffer + __expr->used)); +} +#endif + + +/* Find the next match in STRING. The compiled regular expression is + found in the buffer starting at EXPBUF. `loc1' will return the + first character matched and `loc2' points to the next unmatched + character. */ +extern int step __P ((__const char *__string, __const char *__expbuf)); + +/* Match the beginning of STRING with the compiled regular expression + in EXPBUF. If the match is successful `loc2' will contain the + position of the first unmatched character. */ +extern int advance __P ((__const char *__string, __const char *__expbuf)); + + +__END_DECLS + +#endif /* regexp.h */ diff --git a/misc/search.h b/misc/search.h index 2103d66cbe..221546d2ba 100644 --- a/misc/search.h +++ b/misc/search.h @@ -88,7 +88,7 @@ extern void hdestroy __P ((void)); extern int hsearch_r __P ((ENTRY __item, ACTION __action, ENTRY **__retval, struct hsearch_data *__htab)); -extern int hcreate_r __P ((unsigned int __nel, struct hsearch_data *htab)); +extern int hcreate_r __P ((size_t __nel, struct hsearch_data *htab)); extern void hdestroy_r __P ((struct hsearch_data *htab)); diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index b4a2fd285d..e90dd0f220 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -63,7 +63,7 @@ /* This is not a typedef so `const __ptr_t' does the right thing. */ #define __ptr_t void * -typedef long double __long_double_t; +#define __long_double_t long double #else @@ -71,7 +71,7 @@ typedef long double __long_double_t; #define __STRING(x) "x" #define __ptr_t char * -typedef double __long_double_t; +#define __long_double_t long double /* The BSD header files use the ANSI keywords unmodified (this means that old programs may lose if they use the new keywords as identifiers), but diff --git a/misc/sys/uio.h b/misc/sys/uio.h index 0127efba14..bc49324cc5 100644 --- a/misc/sys/uio.h +++ b/misc/sys/uio.h @@ -21,10 +21,10 @@ #define _SYS_UIO_H 1 #include -__BEGIN_DECLS - #include +__BEGIN_DECLS + /* This file defines `struct iovec'. */ #include @@ -34,7 +34,7 @@ __BEGIN_DECLS The buffers are filled in the order specified. Operates just like `read' (see ) except that data are put in VECTOR instead of a contiguous buffer. */ -extern ssize_t readv __P ((int __fd, __const struct iovec * __vector, +extern ssize_t readv __P ((int __fd, __const struct iovec *__vector, int __count)); /* Write data pointed by the buffers described by VECTOR, which @@ -42,7 +42,7 @@ extern ssize_t readv __P ((int __fd, __const struct iovec * __vector, The data is written in the order specified. Operates just like `write' (see ) except that the data are taken from VECTOR instead of a contiguous buffer. */ -extern ssize_t writev __P ((int __fd, __const struct iovec * __vector, +extern ssize_t writev __P ((int __fd, __const struct iovec *__vector, int __count)); -- cgit v1.2.3