[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[8105] parsetexi valgrind fixes
From: |
gavinsmith0123 |
Subject: |
[8105] parsetexi valgrind fixes |
Date: |
Sat, 18 Aug 2018 10:27:06 -0400 (EDT) |
Revision: 8105
http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=8105
Author: gavin
Date: 2018-08-18 10:27:06 -0400 (Sat, 18 Aug 2018)
Log Message:
-----------
parsetexi valgrind fixes
Modified Paths:
--------------
trunk/tp/Texinfo/XS/parsetexi/end_line.c
trunk/tp/Texinfo/XS/parsetexi/labels.c
trunk/tp/Texinfo/XS/parsetexi/labels.h
trunk/tp/Texinfo/XS/parsetexi/separator.c
trunk/tp/Texinfo/XS/parsetexi/tree.c
trunk/tp/Texinfo/XS/parsetexi/tree.h
Modified: trunk/tp/Texinfo/XS/parsetexi/end_line.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/end_line.c 2018-08-18 13:04:38 UTC (rev
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/end_line.c 2018-08-18 14:27:06 UTC (rev
8105)
@@ -1152,7 +1152,9 @@
float_label = parse_node_manual (args_child_by_index (f, 1));
check_internal_node (float_label);
- register_label (f, float_label);
+ register_label (f, float_label->node_content);
+ free_node_contents (float_label->manual_content);
+ free (float_label);
}
parse_float_type (f);
k = lookup_extra_key (f, "type");
@@ -1800,7 +1802,7 @@
{
add_extra_contents (current, "node_content",
nodes_manuals[0]->node_content);
- register_label (current, nodes_manuals[0]);
+ register_label (current, nodes_manuals[0]->node_content);
}
current_node = current;
Modified: trunk/tp/Texinfo/XS/parsetexi/labels.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/labels.c 2018-08-18 13:04:38 UTC (rev
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/labels.c 2018-08-18 14:27:06 UTC (rev
8105)
@@ -29,7 +29,7 @@
and must be unique in the document. Corresponds to @node, @anchor, and
second arg of @float. */
void
-register_label (ELEMENT *current, NODE_SPEC_EXTRA *label)
+register_label (ELEMENT *current, ELEMENT *label)
{
if (labels_number == labels_space)
{
@@ -41,8 +41,8 @@
}
labels_list[labels_number++].target = current;
- if (label->node_content)
- add_extra_contents (current, "node_content", label->node_content);
+ if (label)
+ add_extra_contents (current, "node_content", label);
}
void
Modified: trunk/tp/Texinfo/XS/parsetexi/labels.h
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/labels.h 2018-08-18 13:04:38 UTC (rev
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/labels.h 2018-08-18 14:27:06 UTC (rev
8105)
@@ -25,7 +25,7 @@
extern LABEL *labels_list;
extern size_t labels_number;
-void register_label (ELEMENT *current, NODE_SPEC_EXTRA *label);
+void register_label (ELEMENT *current, ELEMENT *label);
void reset_labels (void);
Modified: trunk/tp/Texinfo/XS/parsetexi/separator.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/separator.c 2018-08-18 13:04:38 UTC (rev
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/separator.c 2018-08-18 14:27:06 UTC (rev
8105)
@@ -334,10 +334,12 @@
parsed_anchor = parse_node_manual (current);
if (check_node_label (parsed_anchor, CM_anchor))
{
- register_label (current->parent, parsed_anchor);
+ register_label (current->parent, parsed_anchor->node_content);
if (current_region ())
add_extra_element (current, "region", current_region ());
+ free_node_contents (parsed_anchor->manual_content);
}
+ free (parsed_anchor);
}
else if (command_data(closed_command).flags & CF_ref) // 5062
{
@@ -368,7 +370,11 @@
if (nse && (nse->manual_content || nse->node_content))
add_extra_node_spec (ref, "node_argument", nse);
else
- free (nse);
+ {
+ free_node_contents (nse->manual_content);
+ free_node_contents (nse->node_content);
+ free (nse);
+ }
if (closed_command != CM_inforef
&& (ref->args.number <= 3
|| ref->args.number <= 4
Modified: trunk/tp/Texinfo/XS/parsetexi/tree.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/tree.c 2018-08-18 13:04:38 UTC (rev
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/tree.c 2018-08-18 14:27:06 UTC (rev
8105)
@@ -47,6 +47,22 @@
}
void
+free_node_contents (ELEMENT *e)
+{
+ int i;
+ if (e)
+ {
+ for (i = 0; i < e->contents.number; i++)
+ {
+ if (e->contents.list[i]->parent_type
+ == route_not_in_tree)
+ destroy_element (e->contents.list[i]);
+ }
+ free (e);
+ }
+}
+
+void
destroy_element (ELEMENT *e)
{
int i;
@@ -65,11 +81,20 @@
free (e->extra[i].value);
break;
case extra_element_contents:
- destroy_element ((ELEMENT *) e->extra[i].value);
+ if (e->extra[i].value)
+ destroy_element ((ELEMENT *) e->extra[i].value);
break;
case extra_element_contents_array:
/* TODO */
break;
+ case extra_node_spec:
+ {
+ NODE_SPEC_EXTRA *nse = (NODE_SPEC_EXTRA *) e->extra[i].value;
+
+ free_node_contents (nse->manual_content);
+ free_node_contents (nse->node_content);
+ free (nse);
+ }
default:
/* TODO: need to check if the element is in the main tree or not. */
break;
Modified: trunk/tp/Texinfo/XS/parsetexi/tree.h
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/tree.h 2018-08-18 13:04:38 UTC (rev
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/tree.h 2018-08-18 14:27:06 UTC (rev
8105)
@@ -26,6 +26,7 @@
ELEMENT *pop_element_from_contents (ELEMENT *parent);
ELEMENT *contents_child_by_index (ELEMENT *e, int index);
ELEMENT *args_child_by_index (ELEMENT *e, int index);
+void free_node_contents (ELEMENT *e);
void destroy_element (ELEMENT *e);
void destroy_element_and_children (ELEMENT *e);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [8105] parsetexi valgrind fixes,
gavinsmith0123 <=