[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
From: |
Patrice Dumas |
Date: |
Sun, 29 Sep 2024 06:16:29 -0400 (EDT) |
branch: master
commit c95d4885bc16e86e8312d0f0fd6d43350f59fbe8
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Mon Jun 17 00:00:56 2024 +0200
* tp/Texinfo/XS/main/document.c
(destroy_document_information_except_tree),
tp/Texinfo/XS/main/output_unit.c (destroy_output_unit)
(free_output_unit_list, free_output_units_lists): free output units.
---
ChangeLog | 7 +++++++
tp/Texinfo/OutputUnits.pm | 1 +
tp/Texinfo/XS/main/document.c | 4 ++++
tp/Texinfo/XS/main/output_unit.c | 37 +++++++++++++++++++++++++++++++++++++
tp/Texinfo/XS/main/output_unit.h | 1 +
5 files changed, 50 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index bbb2681446..c620218015 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,13 @@
* tp/Texinfo/XS/convert/convert_html.c (html_command_description):
update for move of cmd to CONTAINER.
+2024-06-16 Patrice Dumas <pertusus@free.fr>
+
+ * tp/Texinfo/XS/main/document.c
+ (destroy_document_information_except_tree),
+ tp/Texinfo/XS/main/output_unit.c (destroy_output_unit)
+ (free_output_unit_list, free_output_units_lists): free output units.
+
2024-06-16 Patrice Dumas <pertusus@free.fr>
Associate output units lists with document in XS
diff --git a/tp/Texinfo/OutputUnits.pm b/tp/Texinfo/OutputUnits.pm
index cd1f991015..07ba5f4cc6 100644
--- a/tp/Texinfo/OutputUnits.pm
+++ b/tp/Texinfo/OutputUnits.pm
@@ -74,6 +74,7 @@ my %XS_convert_overrides = (
# => "Texinfo::StructTransfXS::split_by_node");
# "Texinfo::OutputUnits::split_by_section"
# => "Texinfo::StructTransfXS::split_by_section");
+ # TODO the split_pages XS takes also a document as argument
# "Texinfo::OutputUnits::split_pages"
# => "Texinfo::StructTransfXS::split_pages"
);
diff --git a/tp/Texinfo/XS/main/document.c b/tp/Texinfo/XS/main/document.c
index 69f1c04f28..6c2cbd0263 100644
--- a/tp/Texinfo/XS/main/document.c
+++ b/tp/Texinfo/XS/main/document.c
@@ -31,6 +31,7 @@
#include "floats.h"
#include "manipulate_indices.h"
#include "convert_to_text.h"
+#include "output_unit.h"
#include "document.h"
static DOCUMENT **document_list;
@@ -407,6 +408,9 @@ destroy_document_information_except_tree (DOCUMENT
*document)
}
if (document->convert_index_text_options)
destroy_text_options (document->convert_index_text_options);
+
+ free_output_units_lists (&document->output_units_lists);
+
if (document->merged_indices)
destroy_merged_indices (document->merged_indices);
if (document->indices_sort_strings)
diff --git a/tp/Texinfo/XS/main/output_unit.c b/tp/Texinfo/XS/main/output_unit.c
index 5597d0743b..2f1d156ae4 100644
--- a/tp/Texinfo/XS/main/output_unit.c
+++ b/tp/Texinfo/XS/main/output_unit.c
@@ -300,6 +300,43 @@ unsplit (DOCUMENT *document)
return unsplit_needed;
}
+void
+destroy_output_unit (OUTPUT_UNIT *output_unit)
+{
+ free (output_unit->unit_contents.list);
+ /* no need to free output_unit->unit_filename as it is a
+ reference on output_unit_files list FILE_NAME_PATH_COUNTER
+ */
+ free (output_unit);
+}
+
+void
+free_output_unit_list (OUTPUT_UNIT_LIST *output_units_list)
+{
+ size_t i;
+
+ for (i = 0; i < output_units_list->number; i++)
+ {
+ destroy_output_unit (output_units_list->list[i]);
+ }
+ free (output_units_list->list);
+}
+
+void
+free_output_units_lists (OUTPUT_UNIT_LISTS *output_units_lists)
+{
+ size_t i;
+
+ for (i = 0; i < output_units_lists->number; i++)
+ {
+ OUTPUT_UNIT_LIST *output_units_list
+ = &output_units_lists->output_units_lists[i];
+ free_output_unit_list (output_units_list);
+ }
+ free (output_units_lists->output_units_lists);
+ memset (output_units_lists, 0, sizeof (OUTPUT_UNIT_LISTS));
+}
+
static ELEMENT *
output_unit_section (OUTPUT_UNIT *output_unit)
diff --git a/tp/Texinfo/XS/main/output_unit.h b/tp/Texinfo/XS/main/output_unit.h
index a1de893d70..ef4d63045a 100644
--- a/tp/Texinfo/XS/main/output_unit.h
+++ b/tp/Texinfo/XS/main/output_unit.h
@@ -21,6 +21,7 @@ void split_pages (OUTPUT_UNIT_LIST *output_units, const char
*split);
OUTPUT_UNIT *new_output_unit (enum output_unit_type unit_type);
void add_to_output_unit_list (OUTPUT_UNIT_LIST *list,
OUTPUT_UNIT *output_unit);
+void free_output_units_lists (OUTPUT_UNIT_LISTS *output_units_lists);
char *output_unit_texi (const OUTPUT_UNIT *output_unit);