From c89043538330fec60b01a5a1a6b3282eee1baf90 Mon Sep 17 00:00:00 2001 From: h_vogt Date: Mon, 12 Jun 2017 00:09:31 +0200 Subject: [PATCH] clarify pointers to data structures for event nodes --- src/include/ngspice/sharedspice.h | 2 +- src/xspice/evt/evtshared.c | 33 ++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/include/ngspice/sharedspice.h b/src/include/ngspice/sharedspice.h index e853cf0e8..19adde5e9 100644 --- a/src/include/ngspice/sharedspice.h +++ b/src/include/ngspice/sharedspice.h @@ -188,7 +188,7 @@ typedef struct evt_data /* a list of all data points of the node selected by the char* argument to ngGet_Evt_NodeInfo */ typedef struct evt_shared_data { - pevt_data evt_dect; /* array of data */ + pevt_data *evt_dect; /* array of data */ int num_steps; /* length of the array */ } evt_shared_data, *pevt_shared_data; #endif diff --git a/src/xspice/evt/evtshared.c b/src/xspice/evt/evtshared.c index 3963849da..c8c70c5fc 100644 --- a/src/xspice/evt/evtshared.c +++ b/src/xspice/evt/evtshared.c @@ -64,18 +64,19 @@ typedef struct evt_shared_data { } evt_shared_data, *pevt_shared_data; */ -pevt_data return_node; +pevt_data *return_node; pevt_shared_data return_all; /* delete the information return structures */ void delete_ret(void) { - if (return_node) { - tfree(return_node->node_value); - tfree(return_node); - } + int i; if (return_all) + for (i = 0; i < return_all->num_steps; i++) { + tfree(return_all->evt_dect[i]->node_value); + tfree(return_all->evt_dect[i]); + } tfree(return_all); } @@ -107,6 +108,10 @@ EVTshareddata( delete_ret(); + /* just return if only deletion of previous data is requested */ + if (!node_name) + return NULL; + /* Get needed pointers */ ckt = g_mif_info.ckt; if (!ckt) { @@ -162,10 +167,12 @@ EVTshareddata( } /* Store the data */ - return_node = TMALLOC(evt_data, num_points + 1); - return_node[0].dcop = dcop; - return_node[0].node_value = copy(value); - return_node[0].step = step; + return_node = TMALLOC(pevt_data, num_points + 1); + pevt_data newnode = TMALLOC(evt_data, 1); + newnode->dcop = dcop; + newnode->node_value = copy(value); + newnode->step = step; + return_node[0] = newnode; /* While there is more data, get the next values and print */ i = 1; @@ -190,9 +197,11 @@ EVTshareddata( } /* end if node_data not NULL */ - return_node[i].dcop = dcop; - return_node[i].node_value = copy(value); - return_node[i].step = this_step; + newnode = TMALLOC(evt_data, 1); + newnode->dcop = dcop; + newnode->node_value = copy(value); + newnode->step = this_step; + return_node[i] = newnode; i++; } /* end while there is more data */ return_all = TMALLOC(evt_shared_data, 1);