/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: lib_tparm.c,v 1.128 2020/10/10 21:18:09 tom Exp $")
+MODULE_ID("$Id: lib_tparm.c,v 1.131 2021/04/03 22:05:59 tom Exp $")
/*
* char *
{
#if HAVE_TSEARCH
if (MyCount != 0) {
- delete_tparm = typeMalloc(TPARM_DATA *, MyCount);
+ delete_tparm = typeCalloc(TPARM_DATA *, MyCount);
which_tparm = 0;
twalk(MyCache, visit_nodes);
for (which_tparm = 0; which_tparm < MyCount; ++which_tparm) {
TPARM_DATA *ptr = delete_tparm[which_tparm];
- tdelete(ptr, &MyCache, cmp_format);
- free((char *) ptr->format);
- free(ptr);
+ if (ptr != NULL) {
+ tdelete(ptr, &MyCache, cmp_format);
+ free((char *) ptr->format);
+ free(ptr);
+ }
}
which_tparm = 0;
twalk(MyCache, visit_nodes);
* may be cases that we cannot see the explicit parameter numbers.
*/
NCURSES_EXPORT(int)
-_nc_tparm_analyze(const char *string, char *p_is_s[NUM_PARM], int *popcount)
+_nc_tparm_analyze(const char *string, char **p_is_s, int *popcount)
{
size_t len2;
int i;
if ((fs = typeCalloc(TPARM_DATA, 1)) != 0) {
*fs = *result;
if ((fs->format = strdup(string)) != 0) {
- if ((ft = tsearch(fs, &MyCache, cmp_format)) != 0) {
+ if (tsearch(fs, &MyCache, cmp_format) != 0) {
++MyCount;
} else {
+ free(fs);
rc = ERR;
}
} else {
+ free(fs);
rc = ERR;
}
} else {
tparm(const char *string, ...)
{
TPARM_DATA myData;
- va_list ap;
char *result = NULL;
_nc_tparm_err = 0;
#endif /* TRACE */
if (tparm_setup(string, &myData) == OK) {
+ va_list ap;
va_start(ap, string);
tparm_copy_valist(&myData, TRUE, ap);
tiparm(const char *string, ...)
{
TPARM_DATA myData;
- va_list ap;
char *result = NULL;
_nc_tparm_err = 0;
#endif /* TRACE */
if (tparm_setup(string, &myData) == OK) {
+ va_list ap;
va_start(ap, string);
tparm_copy_valist(&myData, FALSE, ap);
_nc_tiparm(int expected, const char *string, ...)
{
TPARM_DATA myData;
- va_list ap;
char *result = NULL;
_nc_tparm_err = 0;
if (tparm_setup(string, &myData) == OK
&& myData.num_actual <= expected
&& myData.tparm_type == 0) {
+ va_list ap;
va_start(ap, string);
tparm_copy_valist(&myData, FALSE, ap);