bug-grep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#24323: "regcomp.c", line 467: error: syntax error before or at: preg


From: Dennis Clarke
Subject: bug#24323: "regcomp.c", line 467: error: syntax error before or at: preg
Date: Sun, 28 Aug 2016 12:56:50 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0


POSIX requires a 'restrict' here; see
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/regcomp.html>. 
(Whether
a compiler takes advantage of 'restrict' is not something under our
control....)

Maybe the first coffee has not hit yet but why is there a redefined
"int regcomp" function inside lib/regcomp.c at all??  This is provided
via the standard C lib and regex.h and so this really is not needed.

I see in lib/regcomp.c : ( complete with the new page control char )


^L
/* Entry point for POSIX code.  */
/* regcomp takes a regular expression as a string and compiles it.

   PREG is a regex_t *.  We do not expect any fields to be initialized,
   since POSIX says we shouldn't.  Thus, we set

     'buffer' to the compiled pattern;
     'used' to the length of the compiled pattern;
     'syntax' to RE_SYNTAX_POSIX_EXTENDED if the
       REG_EXTENDED bit in CFLAGS is set; otherwise, to
       RE_SYNTAX_POSIX_BASIC;
     'newline_anchor' to REG_NEWLINE being set in CFLAGS;
     'fastmap' to an allocated space for the fastmap;
     'fastmap_accurate' to zero;
     're_nsub' to the number of subexpressions in PATTERN.

   PATTERN is the address of the pattern string.

   CFLAGS is a series of bits which affect compilation.

     If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
     use POSIX basic syntax.

     If REG_NEWLINE is set, then . and [^...] don't match newline.
     Also, regexec will try a match beginning after every newline.

     If REG_ICASE is set, then we considers upper- and lowercase
     versions of letters to be equivalent when matching.

     If REG_NOSUB is set, then when PREG is passed to regexec, that
     routine will report only success or failure, and nothing about the
     registers.

   It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
   the return codes and their meanings.)  */

int
regcomp (regex_t *restrict preg, const char *restrict pattern, int cflags)
{
.
.
.


Not needed at all.

I see in lib/regex.c this :

#ifdef _LIBC
/* We have to keep the namespace clean.  */
.
.
.
# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
.
.
.
#include "regcomp.c"


The only places that use "regcomp" are :

    ./lib/exclude.c ./lib/regex.c

So really these can all use the standarc C library function provided and not use the thing in regexec.c at all.

Hold on a sec here ... are we re-writing the POSIX standard C library
 functions for some reason ?


Dennis





reply via email to

[Prev in Thread] Current Thread [Next in Thread]