X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffty_regex.c;h=247779f28c1d49ae6b2f19aae5dd8fde81d12b14;hp=6cb69d04675254dfe3547b3382b01151123feef3;hb=920d493ac02ed9bbbe1e5472e665c718bfdee471;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/form/fty_regex.c b/form/fty_regex.c index 6cb69d04..247779f2 100644 --- a/form/fty_regex.c +++ b/form/fty_regex.c @@ -1,44 +1,67 @@ +/**************************************************************************** + * Copyright (c) 1998-2006,2007 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 * -* Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * * * ***************************************************************************/ #include "form.priv.h" -MODULE_ID("$Id: fty_regex.c,v 1.16 2002/07/06 15:33:27 juergen Exp $") +MODULE_ID("$Id: fty_regex.c,v 1.21 2007/10/13 19:33:50 tom Exp $") -#if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */ +#if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */ #include 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); @@ -58,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) @@ -74,20 +98,25 @@ 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 = typeMalloc(RegExp_Arg, 1); + if (preg) { - if (((preg->pRegExp = (regex_t*)malloc(sizeof(regex_t))) != (regex_t*)0) - && !regcomp(preg->pRegExp,rx, - (REG_EXTENDED | REG_NOSUB | REG_NEWLINE) )) + T((T_CREATE("RegExp_Arg %p"), preg)); + if (((preg->pRegExp = typeMalloc(regex_t, 1)) != 0) + && !regcomp(preg->pRegExp, rx, + (REG_EXTENDED | REG_NOSUB | REG_NEWLINE))) { - preg->refCount = (unsigned long *)malloc(sizeof(unsigned long)); + T((T_CREATE("regex_t %p"), preg->pRegExp)); + preg->refCount = typeMalloc(unsigned long, 1); + *(preg->refCount) = 1; } else @@ -95,51 +124,58 @@ 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)); + pArg = typeMalloc(RegExp_Arg, 1); if (pArg) { int blen = RX_INCREMENT; + + T((T_CREATE("RegExp_Arg %p"), pArg)); pArg->compiled_expression = NULL; - pArg->refCount = (unsigned long *)malloc(sizeof(unsigned long)); + pArg->refCount = typeMalloc(unsigned long, 1); + *(pArg->refCount) = 1; - do { - char *buf = (char *)malloc(blen); - if (buf) - { + do + { + char *buf = typeMalloc(char, 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) { @@ -161,7 +197,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; @@ -186,10 +223,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) @@ -224,24 +263,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,