X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=form%2Ffty_regex.c;h=616b383ad49ef2d5febd99e9f9cffde4424ae8d6;hb=56a81c7e79f73d397cc8074401d039f59c34cad5;hp=2a95c126a5197009cae778b4bda9a1210f32bc13;hpb=f5da57ad7eb397b1001e2fca9cb0e278a6564716;p=ncurses.git diff --git a/form/fty_regex.c b/form/fty_regex.c index 2a95c126..616b383a 100644 --- a/form/fty_regex.c +++ b/form/fty_regex.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2007,2009 Free Software Foundation, Inc. * + * Copyright 2018,2020 Thomas E. Dickey * + * Copyright 1998-2012,2015 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 * @@ -34,10 +35,17 @@ #include "form.priv.h" -MODULE_ID("$Id: fty_regex.c,v 1.23 2009/11/07 20:17:58 tom Exp $") +MODULE_ID("$Id: fty_regex.c,v 1.32 2020/12/12 01:15:37 tom Exp $") -#if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */ +#if HAVE_REGEX_H_FUNCS || HAVE_LIB_PCRE2 /* We prefer POSIX regex */ + +#if HAVE_PCRE2POSIX_H +#include +#elif HAVE_PCREPOSIX_H +#include +#else #include +#endif typedef struct { @@ -113,19 +121,18 @@ Generic_RegularExpression_Type(void *arg MAYBE_UNUSED) if (rx) { - preg = typeMalloc(RegExp_Arg, 1); + preg = typeCalloc(RegExp_Arg, 1); if (preg) { - T((T_CREATE("RegExp_Arg %p"), preg)); + T((T_CREATE("RegExp_Arg %p"), (void *)preg)); if (((preg->pRegExp = typeMalloc(regex_t, 1)) != 0) && !regcomp(preg->pRegExp, rx, (REG_EXTENDED | REG_NOSUB | REG_NEWLINE))) { - T((T_CREATE("regex_t %p"), preg->pRegExp)); - preg->refCount = typeMalloc(unsigned long, 1); - - *(preg->refCount) = 1; + T((T_CREATE("regex_t %p"), (void *)preg->pRegExp)); + if ((preg->refCount = typeMalloc(unsigned long, 1)) != 0) + *(preg->refCount) = 1; } else { @@ -151,9 +158,8 @@ Generic_RegularExpression_Type(void *arg MAYBE_UNUSED) T((T_CREATE("RegExp_Arg %p"), pArg)); pArg->compiled_expression = NULL; - pArg->refCount = typeMalloc(unsigned long, 1); - - *(pArg->refCount) = 1; + if ((pArg->refCount = typeMalloc(unsigned long, 1)) != 0) + *(pArg->refCount) = 1; do { @@ -266,6 +272,7 @@ Free_RegularExpression_Type(void *argp MAYBE_UNUSED) { free(ap->refCount); regfree(ap->pRegExp); + free(ap->pRegExp); } #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS if (ap->compiled_expression) @@ -333,14 +340,14 @@ static FIELDTYPE typeREGEXP = #endif }; -NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_REGEXP = &typeREGEXP; +FORM_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP = &typeREGEXP; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from - programming languages with restictions on interop with C level + programming languages with restrictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ -NCURSES_EXPORT(FIELDTYPE *) +FORM_EXPORT(FIELDTYPE *) _nc_TYPE_REGEXP(void) { return TYPE_REGEXP;