(libc) [GLIBC_PRIVATE]: Add __libc_readv and __libc_writev.
[kopensolaris-gnu/glibc.git] / misc / regexp.h
index 9ab2549..bb1c401 100644 (file)
@@ -1,21 +1,21 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999 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.
+   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.
 
    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.
+   Lesser 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.  */
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; 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
@@ -28,6 +28,7 @@
    included only for compatibility reasons.  Use the POSIX definition
    in <regex.h> for portable applications and a reasonable interface.  */
 
+#include <features.h>
 #include <alloca.h>
 #include <regex.h>
 #include <stdlib.h>
    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
+   The user has to provide six macros before this header file can be
    included:
 
+   INIT                Declarations vor variables which can be used by the
+               other macros.
+
    GETC()      Return the value of the next character in the regular
                expression pattern.  Successive calls should return
                successive characters.
@@ -89,45 +93,47 @@ 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.
+   placed in the buffer starting at EXPBUF 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)
+compile (char *__restrict instring, char *__restrict expbuf,
+        __const char *__restrict endbuf, int eof)
 {
   char *__input_buffer = NULL;
   size_t __input_size = 0;
-  size_t __current_size;
+  size_t __current_size = 0;
   int __ch;
   int __error;
+  INIT
 
   /* 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
+# if defined __GNUC__ && __GNUC__ >= 2
   const size_t __req = __alignof__ (regex_t *);
-#else
+# 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))
+# endif
+  expbuf += __req;
+  expbuf -= (expbuf - ((char *) 0)) % __req;
+  if (endbuf < expbuf + sizeof (regex_t))
     {
       ERROR (50);
     }
-  __expr_ptr = (regex_t *) __expbuf;
+  __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;
+  __expr_ptr->buffer = expbuf + sizeof (regex_t);
+  __expr_ptr->allocated = endbuf -  (char *) __expr_ptr->buffer;
 
-  while ((__ch = (GETC ())) != __eof)
+  while ((__ch = (GETC ())) != eof)
     {
-      if (__ch == '\0' || __ch == 'n')
+      if (__ch == '\0' || __ch == '\n')
        {
          UNGETC (__ch);
          break;
@@ -136,21 +142,21 @@ compile (char *__instring, char *__expbuf, __const char *__endbuf, int __eof)
       if (__current_size + 1 >= __input_size)
        {
          size_t __new_size = __input_size ? 2 * __input_size : 128;
-         char *__new_room = __alloca (__new_size);
+         char *__new_room = (char *) 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);
+             __input_buffer = (char *) 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 = (char *) memcpy (__new_room, __input_buffer,
+                                               __current_size);
            }
        }
       __input_buffer[__current_size++] = __ch;
@@ -200,12 +206,14 @@ compile (char *__instring, char *__expbuf, __const char *__endbuf, int __eof)
    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));
+extern int step (__const char *__restrict __string,
+                __const char *__restrict __expbuf) __THROW;
 
 /* 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));
+extern int advance (__const char *__restrict __string,
+                   __const char *__restrict __expbuf) __THROW;
 
 
 __END_DECLS