[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Changes to m4/m4/output.c,v
From: |
Eric Blake |
Subject: |
Changes to m4/m4/output.c,v |
Date: |
Fri, 27 Oct 2006 04:03:30 +0000 |
CVSROOT: /sources/m4
Module name: m4
Changes by: Eric Blake <ericb> 06/10/27 04:03:28
Index: m4/output.c
===================================================================
RCS file: /sources/m4/m4/m4/output.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- m4/output.c 26 Oct 2006 23:19:12 -0000 1.34
+++ m4/output.c 27 Oct 2006 04:03:28 -0000 1.35
@@ -130,12 +130,13 @@
m4_output_init (m4 *context)
{
m4_diversion *diversion = xmalloc (sizeof *diversion);
+ const void *tmp = diversion;
diversion->u.file = stdout;
diversion->divnum = 0;
diversion->size = 0;
diversion->used = 0;
diversion_table = gl_list_create (GL_AVLTREE_LIST, equal_diversion_CB, NULL,
- false, 1, (const void **) &diversion);
+ false, 1, &tmp);
diversions = 1;
m4_set_current_diversion (context, 0);
@@ -238,6 +239,7 @@
m4_diversion *diversion;
size_t count;
gl_list_iterator_t iter;
+ const void *elt;
/* Find out the buffer having most data, in view of flushing it to
disk. Fake the current buffer as having already received the
@@ -249,12 +251,15 @@
iter = gl_list_iterator_from_to (diversion_table, 1,
gl_list_size (diversion_table));
- while (gl_list_iterator_next (&iter, (const void **) &diversion, NULL))
+ while (gl_list_iterator_next (&iter, &elt, NULL))
+ {
+ diversion = (m4_diversion *) elt;
if (diversion->used > selected_used)
{
selected_diversion = diversion;
selected_used = diversion->used;
}
+ }
gl_list_iterator_free (&iter);
/* Create a temporary file, write the in-memory buffer of the
@@ -514,6 +519,14 @@
{
assert (!output_file || output_diversion->u.file == output_file);
assert (output_diversion->divnum != divnum);
+ if (!output_diversion->size && !output_diversion->u.file)
+ {
+ if (!gl_list_remove (diversion_table, output_diversion))
+ assert (false);
+ output_diversion->u.next = free_list;
+ free_list = output_diversion;
+ }
+ else
output_diversion->used = output_diversion->size - output_unused;
output_diversion = NULL;
output_file = NULL;
@@ -664,12 +677,16 @@
gl_list_iterator_t iter;
gl_list_node_t node;
int divnum = m4_get_current_diversion (context);
+ const void *elt;
iter = gl_list_iterator_from_to (diversion_table, 1,
gl_list_size (diversion_table));
- while (gl_list_iterator_next (&iter, (const void **) &diversion, &node))
+ while (gl_list_iterator_next (&iter, &elt, &node))
+ {
+ diversion = (m4_diversion *) elt;
if (diversion->divnum != divnum)
m4_insert_diversion_helper (context, diversion, node);
+ }
gl_list_iterator_free (&iter);
}
@@ -679,11 +696,11 @@
{
int saved_number;
int last_inserted;
- int divnum;
m4_diversion *diversion;
struct stat file_stat;
gl_list_iterator_t iter;
gl_list_node_t node;
+ const void *elt;
saved_number = m4_get_current_diversion (context);
last_inserted = 0;
@@ -692,14 +709,16 @@
iter = gl_list_iterator_from_to (diversion_table, 1,
gl_list_size (diversion_table));
- while (gl_list_iterator_next (&iter, (const void **) &diversion, &node))
+ while (gl_list_iterator_next (&iter, &elt, &node))
{
+ diversion = (m4_diversion *) elt;
if (diversion->size || diversion->u.file)
{
if (diversion->size)
{
assert (diversion->used == (int) diversion->used);
- fprintf (file, "D%d,%d\n", divnum, (int) diversion->used);
+ fprintf (file, "D%d,%d\n", diversion->divnum,
+ (int) diversion->used);
}
else
{
@@ -714,14 +733,14 @@
|| file_stat.st_size != (unsigned long) file_stat.st_size)
m4_error (context, EXIT_FAILURE, errno,
_("diversion too large"));
- fprintf (file, "D%d,%lu", divnum,
+ fprintf (file, "D%d,%lu", diversion->divnum,
(unsigned long) file_stat.st_size);
}
m4_insert_diversion_helper (context, diversion, node);
putc ('\n', file);
- last_inserted = divnum;
+ last_inserted = diversion->divnum;
}
}
gl_list_iterator_free (&iter);
- Changes to m4/m4/output.c,v, Eric Blake, 2006/10/03
- Changes to m4/m4/output.c,v, Eric Blake, 2006/10/06
- Changes to m4/m4/output.c,v, Eric Blake, 2006/10/07
- Changes to m4/m4/output.c,v, Eric Blake, 2006/10/26
- Changes to m4/m4/output.c,v, Eric Blake, 2006/10/26
- Changes to m4/m4/output.c,v,
Eric Blake <=