X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=pcrs.c;h=83ea4be7d9281977efd5d56080b2b8eb663b5b86;hp=aecf206456b7edc53fc920a28fc8be16dfa56227;hb=47bc727e644937b3d3cf8df692815038b169f7a6;hpb=e1fcf9e251441c56e4a81962a268feee59568dfa diff --git a/pcrs.c b/pcrs.c index aecf2064..83ea4be7 100644 --- a/pcrs.c +++ b/pcrs.c @@ -1,43 +1,54 @@ -const char pcrs_rcs[] = "$Id: pcrs.c,v 1.11 2001/08/15 15:32:03 oes Exp $"; +const char pcrs_rcs[] = "$Id: pcrs.c,v 1.14 2001/09/09 21:41:57 oes Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/pcrs.c,v $ * - * Purpose : pcrs is a supplement to the brilliant pcre library by Philip - * Hazel and adds Perl-style substitution. That - * is, it mimics Perl's 's' operator. + * Purpose : pcrs is a supplement to the pcre library by Philip Hazel + * and adds Perl-style substitution. That + * is, it mimics Perl's 's' operator. See pcrs(3) for details. * - * Currently, there's no documentation besides comments and the - * source itself :-( - * - * Note: In addition to perl's options, 'U' for ungreedy and 'T' - * for trivial (i.e.: ignore backrefs in the substitute) are - * supported. * * Copyright : Written and Copyright (C) 2000, 2001 by Andreas S. Oesterhelt * * * This program is free software; you can redistribute it - * and/or modify it under the terms of the GNU General - * Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at - * your option) any later version. + * and/or modify it under the terms of the GNU Lesser + * General Public License (LGPL), version 2.1, which should + * be included in this distribution (see LICENSE.txt), with + * the exception that the permission to replace that license + * with the GNU General Public License (GPL) given in section + * 3 is restricted to version 2 of the GPL. * * This program 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 General Public - * License for more details. + * PARTICULAR PURPOSE. See the license for more details. * - * The GNU General Public License should be included with - * this file. If not, you can view it at - * http://www.gnu.org/copyleft/gpl.html + * The GNU Lesser General Public License should be included + * with this file. If not, you can view it at + * http://www.gnu.org/licenses/lgpl.html * or write to the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Revisions : * $Log: pcrs.c,v $ + * Revision 1.14 2001/09/09 21:41:57 oes + * Fixing yet another silly bug + * + * Revision 1.13 2001/09/06 14:05:59 oes + * Fixed silly bug + * + * Revision 1.12 2001/08/18 11:35:00 oes + * - Introduced pcrs_strerror() + * - made some NULL arguments non-fatal + * - added support for \n \r \e \b \t \f \a \0 in substitute + * - made quoting adhere to standard rules + * - added warning for bad backrefs + * - added pcrs_execute_list() + * - fixed comments + * - bugfix & cosmetics + * * Revision 1.11 2001/08/15 15:32:03 oes * - Added support for Perl's special variables $+, $' and $` * - Improved the substitute parser @@ -103,10 +114,11 @@ const char pcrs_rcs[] = "$Id: pcrs.c,v 1.11 2001/08/15 15:32:03 oes Exp $"; #include #include +#include + #include "pcrs.h" -#include -const char pcrs_h_rcs[] = PCRS_H_VERSION; +const char pcrs_h_rcs[] = PCRS_H_VERSION; /********************************************************************* * @@ -150,7 +162,7 @@ const char *pcrs_strerror(const int error) default: return "Unknown error"; } } - /* error > 0: No error */ + /* error >= 0: No error */ return "(pcrs:) Everything's just fine. Thanks for asking."; } @@ -262,7 +274,7 @@ pcrs_substitute *pcrs_compile_replacement(const char *replacement, int trivialfl *errptr = PCRS_ERR_NOMEM; return NULL; } - memset(r, '\0', length + 1); + memset(text, '\0', length + 1); /* @@ -335,9 +347,9 @@ pcrs_substitute *pcrs_compile_replacement(const char *replacement, int trivialfl r->block_length[l] = k - r->block_offset[l]; /* Numerical backreferences */ - if (isdigit(replacement[i + 1])) + if (isdigit((int) replacement[i + 1])) { - while (i < length && isdigit(replacement[++i])) + while (i < length && isdigit((int) replacement[++i])) { r->backref[l] = r->backref[l] * 10 + replacement[i] - 48; } @@ -689,15 +701,16 @@ int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, c old = subject; *result_length = subject_length; - hits = 0; + hits = total_hits = 0; for (job = joblist; job != NULL; job = job->next) { hits = pcrs_execute(job, old, *result_length, &new, result_length); + if (old != subject) free(old); + if (hits < 0) { - *result = NULL; return(hits); } else @@ -708,7 +721,8 @@ int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, c } *result = new; - return(hits); + return(total_hits); + }