summaryrefslogtreecommitdiff
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));