2004-01-15  Paolo Bonzini  <bonzini@gnu.org>

	* posix/regex.h (REG_STARTEND): Define.
	* posix/regexec.c (regexec): Check for REG_STARTEND.
This commit is contained in:
Ulrich Drepper 2004-03-04 23:37:01 +00:00
parent 4c595adb60
commit 6fefb4e0b1
3 changed files with 25 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2004-01-15 Paolo Bonzini <bonzini@gnu.org>
* posix/regex.h (REG_STARTEND): Define.
* posix/regexec.c (regexec): Check for REG_STARTEND.
2004-02-29 Paolo Bonzini <bonzini@gnu.org>
* posix/regexec.c (transit_state): Don't handle state == NULL.

View File

@ -298,6 +298,10 @@ extern reg_syntax_t re_syntax_options;
/* Like REG_NOTBOL, except for the end-of-line. */
#define REG_NOTEOL (1 << 1)
/* Use PMATCH[0] to delimit the start and end of the search in the
buffer. */
#define REG_STARTEND (1 << 2)
/* If any error codes are removed, changed, or added, update the
`re_error_msg' table in regex.c. */

View File

@ -215,13 +215,23 @@ regexec (preg, string, nmatch, pmatch, eflags)
int eflags;
{
reg_errcode_t err;
int length = strlen (string);
if (preg->no_sub)
err = re_search_internal (preg, string, length, 0, length, length, 0,
NULL, eflags);
int start, length;
if (eflags & REG_STARTEND)
{
start = pmatch[0].rm_so;
length = pmatch[0].rm_eo;
}
else
err = re_search_internal (preg, string, length, 0, length, length, nmatch,
pmatch, eflags);
{
start = 0;
length = strlen (string);
}
if (preg->no_sub)
err = re_search_internal (preg, string, length, start, length - start,
length, 0, NULL, eflags);
else
err = re_search_internal (preg, string, length, start, length - start,
length, nmatch, pmatch, eflags);
return err != REG_NOERROR;
}
#ifdef _LIBC