diff options
author | rafan <rafan@FreeBSD.org> | 2007-01-20 07:32:02 +0000 |
---|---|---|
committer | rafan <rafan@FreeBSD.org> | 2007-01-20 07:32:02 +0000 |
commit | de9cbef68d4c3ea6cd003ce086e2d3487600ace7 (patch) | |
tree | 1c6c3b549401156e1dbd96b9a6b18521f63ffb58 /contrib/ncurses/form/fty_regex.c | |
parent | 377d0def80a85cb3dcd2eb1f80cd65a577eef9de (diff) | |
download | FreeBSD-src-de9cbef68d4c3ea6cd003ce086e2d3487600ace7.zip FreeBSD-src-de9cbef68d4c3ea6cd003ce086e2d3487600ace7.tar.gz |
Import ncurses 5.6-20061217 onto the vender branch
Approved by: delphij
Diffstat (limited to 'contrib/ncurses/form/fty_regex.c')
-rw-r--r-- | contrib/ncurses/form/fty_regex.c | 170 |
1 files changed, 108 insertions, 62 deletions
diff --git a/contrib/ncurses/form/fty_regex.c b/contrib/ncurses/form/fty_regex.c index b575487..087ff11 100644 --- a/contrib/ncurses/form/fty_regex.c +++ b/contrib/ncurses/form/fty_regex.c @@ -1,43 +1,67 @@ +/**************************************************************************** + * Copyright (c) 1998-2004,2006 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ -/* - * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. - * You may freely copy it for use as a template for your own field types. - * If you develop a field type that might be of general use, please send - * it back to the ncurses maintainers for inclusion in the next version. - */ /*************************************************************************** * * -* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net * +* Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" -MODULE_ID("$Id: fty_regex.c,v 1.15 2000/12/09 23:46:12 tom Exp $") +MODULE_ID("$Id: fty_regex.c,v 1.19 2006/04/22 21:33:05 tom Exp $") -#if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */ +#if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */ #include <regex.h> typedef struct -{ - regex_t *pRegExp; - unsigned long *refCount; -} RegExp_Arg; + { + regex_t *pRegExp; + unsigned long *refCount; + } +RegExp_Arg; #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS #undef RETURN static int reg_errno; -static char *RegEx_Init(char *instring) +static char * +RegEx_Init(char *instring) { - reg_errno = 0; - return instring; + reg_errno = 0; + return instring; } -static char *RegEx_Error(int code) +static char * +RegEx_Error(int code) { - reg_errno = code; - return 0; + reg_errno = code; + return 0; } #define INIT register char *sp = RegEx_Init(instring); @@ -57,7 +81,8 @@ typedef struct { char *compiled_expression; unsigned long *refCount; -} RegExp_Arg; +} +RegExp_Arg; /* Maximum Length we allow for a compiled regular expression */ #define MAX_RX_LEN (2048) @@ -73,20 +98,23 @@ typedef struct | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ -static void *Make_RegularExpression_Type(va_list * ap) +static void * +Make_RegularExpression_Type(va_list *ap) { #if HAVE_REGEX_H_FUNCS - char *rx = va_arg(*ap,char *); + char *rx = va_arg(*ap, char *); RegExp_Arg *preg; - preg = (RegExp_Arg*)malloc(sizeof(RegExp_Arg)); + preg = (RegExp_Arg *)malloc(sizeof(RegExp_Arg)); + if (preg) { - if (((preg->pRegExp = (regex_t*)malloc(sizeof(regex_t))) != (regex_t*)0) - && !regcomp(preg->pRegExp,rx, - (REG_EXTENDED | REG_NOSUB | REG_NEWLINE) )) + if (((preg->pRegExp = (regex_t *) malloc(sizeof(regex_t))) != 0) + && !regcomp(preg->pRegExp, rx, + (REG_EXTENDED | REG_NOSUB | REG_NEWLINE))) { preg->refCount = (unsigned long *)malloc(sizeof(unsigned long)); + *(preg->refCount) = 1; } else @@ -94,12 +122,12 @@ static void *Make_RegularExpression_Type(va_list * ap) if (preg->pRegExp) free(preg->pRegExp); free(preg); - preg = (RegExp_Arg*)0; + preg = (RegExp_Arg *)0; } } - return((void *)preg); + return ((void *)preg); #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS - char *rx = va_arg(*ap,char *); + char *rx = va_arg(*ap, char *); RegExp_Arg *pArg; pArg = (RegExp_Arg *)malloc(sizeof(RegExp_Arg)); @@ -107,38 +135,44 @@ static void *Make_RegularExpression_Type(va_list * ap) if (pArg) { int blen = RX_INCREMENT; + pArg->compiled_expression = NULL; pArg->refCount = (unsigned long *)malloc(sizeof(unsigned long)); + *(pArg->refCount) = 1; - do { - char *buf = (char *)malloc(blen); - if (buf) - { + do + { + char *buf = (char *)malloc(blen); + + if (buf) + { #if HAVE_REGEXP_H_FUNCS - char *last_pos = compile (rx, buf, &buf[blen], '\0'); + char *last_pos = compile(rx, buf, &buf[blen], '\0'); + #else /* HAVE_REGEXPR_H_FUNCS */ - char *last_pos = compile (rx, buf, &buf[blen]); + char *last_pos = compile(rx, buf, &buf[blen]); #endif - if (reg_errno) - { - free(buf); - if (reg_errno==50) - blen += RX_INCREMENT; - else - { - free(pArg); - pArg = NULL; - break; - } - } - else - { - pArg->compiled_expression = buf; - break; - } - } - } while( blen <= MAX_RX_LEN ); + if (reg_errno) + { + free(buf); + if (reg_errno == 50) + blen += RX_INCREMENT; + else + { + free(pArg); + pArg = NULL; + break; + } + } + else + { + pArg->compiled_expression = buf; + break; + } + } + } + while (blen <= MAX_RX_LEN); } if (pArg && !pArg->compiled_expression) { @@ -160,7 +194,8 @@ static void *Make_RegularExpression_Type(va_list * ap) | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ -static void *Copy_RegularExpression_Type(const void * argp) +static void * +Copy_RegularExpression_Type(const void *argp) { #if (HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS) const RegExp_Arg *ap = (const RegExp_Arg *)argp; @@ -185,10 +220,12 @@ static void *Copy_RegularExpression_Type(const void * argp) | | Return Values : - +--------------------------------------------------------------------------*/ -static void Free_RegularExpression_Type(void * argp) +static void +Free_RegularExpression_Type(void *argp) { #if HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS RegExp_Arg *ap = (RegExp_Arg *)argp; + if (ap) { if (--(*(ap->refCount)) == 0) @@ -223,24 +260,33 @@ static void Free_RegularExpression_Type(void * argp) | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ -static bool Check_RegularExpression_Field(FIELD * field, const void * argp) +static bool +Check_RegularExpression_Field(FIELD *field, const void *argp) { bool match = FALSE; + #if HAVE_REGEX_H_FUNCS - const RegExp_Arg *ap = (const RegExp_Arg*)argp; + const RegExp_Arg *ap = (const RegExp_Arg *)argp; + if (ap && ap->pRegExp) - match = (regexec(ap->pRegExp,field_buffer(field,0),0,NULL,0) ? FALSE:TRUE); + match = (regexec(ap->pRegExp, field_buffer(field, 0), 0, NULL, 0) + ? FALSE + : TRUE); #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS RegExp_Arg *ap = (RegExp_Arg *)argp; + if (ap && ap->compiled_expression) - match = (step(field_buffer(field,0),ap->compiled_expression) ? TRUE:FALSE); + match = (step(field_buffer(field, 0), ap->compiled_expression) + ? TRUE + : FALSE); #endif return match; } -static FIELDTYPE typeREGEXP = { +static FIELDTYPE typeREGEXP = +{ _HAS_ARGS | _RESIDENT, - 1, /* this is mutable, so we can't be const */ + 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, Make_RegularExpression_Type, |