summary refs log tree commit diff
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/Makefile11
-rw-r--r--misc/regexp.c76
-rw-r--r--misc/regexp.h213
-rw-r--r--misc/search.h2
-rw-r--r--misc/sys/cdefs.h4
-rw-r--r--misc/sys/uio.h8
6 files changed, 302 insertions, 12 deletions
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 <regexp.h> interface.
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 <regexp.h>
+
+/* 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 <drepper@cygnus.com>, 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 <regex.h> for portable applications and a reasonable interface.  */
+
+#include <alloca.h>
+#include <regex.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* 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 <features.h>
 
-__BEGIN_DECLS
-
 #include <sys/types.h>
 
+__BEGIN_DECLS
+
 /* This file defines `struct iovec'.  */
 #include <iovec.h>
 
@@ -34,7 +34,7 @@ __BEGIN_DECLS
    The buffers are filled in the order specified.
    Operates just like `read' (see <unistd.h>) 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 <unistd.h>) 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));