mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-30 15:02:18 +01:00
15228: AC_CHECK_LIB->AC_SEARCH_LIBS, set pparams with capture buffers
This commit is contained in:
parent
a65fea58a5
commit
38833690cb
3 changed files with 43 additions and 6 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2001-07-03 Clint Adams <clint@zsh.org>
|
||||||
|
|
||||||
|
* 15228: zshconfig.ac, Src/Modules/pcre.c:
|
||||||
|
switch AC_CHECK_LIB to AC_SEARCH_LIBS for pcre.
|
||||||
|
Have pcre_match set positional parameters
|
||||||
|
with the contents of capture buffers.
|
||||||
|
|
||||||
2001-07-03 Clint Adams <clint@zsh.org>
|
2001-07-03 Clint Adams <clint@zsh.org>
|
||||||
|
|
||||||
* unposted: Doc/Makefile.in: add mod_pcre.yo to makefile.
|
* unposted: Doc/Makefile.in: add mod_pcre.yo to makefile.
|
||||||
|
|
|
@ -27,11 +27,12 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**/
|
|
||||||
#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
|
|
||||||
|
|
||||||
#include "pcre.mdh"
|
#include "pcre.mdh"
|
||||||
#include "pcre.pro"
|
#include "pcre.pro"
|
||||||
|
|
||||||
|
/**/
|
||||||
|
#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
|
||||||
#include <pcre.h>
|
#include <pcre.h>
|
||||||
|
|
||||||
static pcre *pcre_pattern;
|
static pcre *pcre_pattern;
|
||||||
|
@ -49,6 +50,8 @@ bin_pcre_compile(char *nam, char **args, char *ops, int func)
|
||||||
if(ops['m']) pcre_opts |= PCRE_MULTILINE;
|
if(ops['m']) pcre_opts |= PCRE_MULTILINE;
|
||||||
if(ops['x']) pcre_opts |= PCRE_EXTENDED;
|
if(ops['x']) pcre_opts |= PCRE_EXTENDED;
|
||||||
|
|
||||||
|
pcre_hints = NULL; /* Is this necessary? */
|
||||||
|
|
||||||
pcre_pattern = pcre_compile(*args, pcre_opts, &pcre_error, &pcre_errptr, NULL);
|
pcre_pattern = pcre_compile(*args, pcre_opts, &pcre_error, &pcre_errptr, NULL);
|
||||||
|
|
||||||
if (pcre_pattern == NULL)
|
if (pcre_pattern == NULL)
|
||||||
|
@ -86,11 +89,38 @@ bin_pcre_study(char *nam, char **args, char *ops, int func)
|
||||||
static int
|
static int
|
||||||
bin_pcre_match(char *nam, char **args, char *ops, int func)
|
bin_pcre_match(char *nam, char **args, char *ops, int func)
|
||||||
{
|
{
|
||||||
#define PCRE_OVEC_SIZE 50
|
int ret, capcount, *ovec, ovecsize;
|
||||||
|
char **captures;
|
||||||
|
|
||||||
int ovec[PCRE_OVEC_SIZE]; /* throwing this away now, but will be useful someday */
|
if (pcre_fullinfo(pcre_pattern, pcre_hints, PCRE_INFO_CAPTURECOUNT, &capcount))
|
||||||
|
{
|
||||||
|
zwarnnam(nam, "error in fullinfo", NULL, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return !(pcre_exec(pcre_pattern, pcre_hints, *args, strlen(*args), 0, 0, ovec, PCRE_OVEC_SIZE) >= 0);
|
ovecsize = (capcount+1)*3;
|
||||||
|
ovec = zalloc(ovecsize*sizeof(int));
|
||||||
|
|
||||||
|
ret = pcre_exec(pcre_pattern, pcre_hints, *args, strlen(*args), 0, 0, ovec, ovecsize);
|
||||||
|
|
||||||
|
if (ret==0) return 0;
|
||||||
|
else if (ret==PCRE_ERROR_NOMATCH) return 1; /* no match */
|
||||||
|
else if (ret>0) {
|
||||||
|
if(!pcre_get_substring_list(*args, ovec, ret, (const char ***)&captures)) {
|
||||||
|
|
||||||
|
freearray(pparams);
|
||||||
|
pparams = zarrdup(&captures[1]); /* first one would be entire string */
|
||||||
|
|
||||||
|
pcre_free_substring_list((const char **)captures);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
zwarnnam(nam, "error in pcre_exec", NULL, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct builtin bintab[] = {
|
static struct builtin bintab[] = {
|
||||||
|
|
|
@ -644,7 +644,7 @@ AC_CHECK_LIB(cap, cap_get_proc)
|
||||||
AC_CHECK_LIB(socket, socket)
|
AC_CHECK_LIB(socket, socket)
|
||||||
|
|
||||||
dnl pcre-config should probably be employed here
|
dnl pcre-config should probably be employed here
|
||||||
AC_CHECK_LIB(pcre, pcre_compile)
|
AC_SEARCH_LIBS(pcre_compile, pcre)
|
||||||
|
|
||||||
dnl ---------------------
|
dnl ---------------------
|
||||||
dnl CHECK TERMCAP LIBRARY
|
dnl CHECK TERMCAP LIBRARY
|
||||||
|
|
Loading…
Reference in a new issue