[Xfce4-commits] <squeeze:peter/btree> Replaced archive iter buffer slist with a btree
Peter de Ridder
noreply at xfce.org
Tue Oct 4 22:06:02 CEST 2011
Updating branch refs/heads/peter/btree
to d3cc31e6fb872e00eaad4291746c551435eea1c2 (commit)
from aab3b4e8d7e06ca64357cb927df63ab25d7a8bc6 (commit)
commit d3cc31e6fb872e00eaad4291746c551435eea1c2
Author: Peter de Ridder <peter at xfce.org>
Date: Sun Oct 2 12:09:39 2011 +0200
Replaced archive iter buffer slist with a btree
The btree isn't balanced and delete isn't supported
libsqueeze/Makefile.am | 2 +-
libsqueeze/archive-iter.c | 188 +++++++++++++++++---------------------
libsqueeze/archive.c | 2 +-
libsqueeze/btree.c | 191 +++++++++++++++++++++++++++++++++++++++
libsqueeze/{slist.h => btree.h} | 42 ++++-----
libsqueeze/slist.c | 109 ----------------------
6 files changed, 295 insertions(+), 239 deletions(-)
diff --git a/libsqueeze/Makefile.am b/libsqueeze/Makefile.am
index 51cc350..b7beadb 100644
--- a/libsqueeze/Makefile.am
+++ b/libsqueeze/Makefile.am
@@ -5,6 +5,7 @@ libsqueeze_2_la_SOURCES = \
archive-iter-pool.c archive-iter-pool.h \
archive-iter.c archive-iter.h \
archive-tempfs.c archive-tempfs.h \
+ btree.c btree.h \
command-queue.c command-queue.h \
command-option.c command-option.h \
internals.c internals.h \
@@ -13,7 +14,6 @@ libsqueeze_2_la_SOURCES = \
parser-context.c parser-context.h \
parser.c parser.h \
scanf-parser.c scanf-parser.h \
- slist.c slist.h \
support-reader.c support-reader.h \
support-template.c support-template.h \
support-factory.c support-factory.h
diff --git a/libsqueeze/archive-iter.c b/libsqueeze/archive-iter.c
index 6288535..8762777 100644
--- a/libsqueeze/archive-iter.c
+++ b/libsqueeze/archive-iter.c
@@ -13,7 +13,6 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <config.h>
#include <string.h>
#include <glib.h>
@@ -25,7 +24,7 @@
#include "libsqueeze.h"
#include "libsqueeze-view.h"
#include "support-factory.h"
-#include "slist.h"
+#include "btree.h"
#include "internals.h"
@@ -39,10 +38,6 @@ guint buffer_flush_size = LSQ_ENTRY_CHILD_BUFFER_SIZE;
#define LSQ_ENTRY_CHILD_BUFFER_SIZE buffer_flush_size
#endif
-#ifndef LSQ_ENTRY_BUFFER_INTERVALSIZE
-#define LSQ_ENTRY_BUFFER_INTERVALSIZE 20
-#endif
-
#ifndef LSQ_MIME_DIRECTORY
#define LSQ_MIME_DIRECTORY "inode/directory"
#endif
@@ -69,8 +64,6 @@ inline static LSQArchiveEntry*
lsq_archive_entry_nth_child(const LSQArchiveEntry *, guint);
inline static void
lsq_archive_entry_flush_buffer(LSQArchiveEntry *);
-inline static void
-lsq_archive_entry_build_buffer_index(LSQArchiveEntry *);
static LSQArchiveEntry *
lsq_archive_entry_get_child(const LSQArchiveEntry *, const gchar *);
static LSQArchiveEntry *
@@ -102,8 +95,8 @@ struct _LSQArchiveEntry
gchar *content_type;
gpointer props;
LSQArchiveEntry **children;
- LSQSList *buffer;
- LSQSIndexList *buffer_index;
+ LSQBTree *buffer;
+ guint buffer_length;
};
@@ -989,7 +982,10 @@ static void
lsq_archive_entry_save_free(const LSQArchive *archive, LSQArchiveEntry *entry)
{
guint i = 0;
- LSQSList *buffer_iter = entry->buffer;
+ LSQBTree *buffer_iter;
+
+ entry->buffer = lsq_btree_flatten(entry->buffer);
+ buffer_iter = entry->buffer;
/* free the buffer */
for ( ; NULL != buffer_iter ; buffer_iter = buffer_iter->next )
@@ -999,8 +995,9 @@ lsq_archive_entry_save_free(const LSQArchive *archive, LSQArchiveEntry *entry)
else
lsq_archive_entry_save_free(archive, buffer_iter->entry);
}
- lsq_slist_free(entry->buffer);
+ lsq_btree_free(entry->buffer);
entry->buffer = NULL;
+ entry->buffer_length = 0;
/* free the sorted list */
if ( NULL != entry->children )
@@ -1026,15 +1023,19 @@ static void
lsq_archive_entry_free(const LSQArchive *archive, LSQArchiveEntry *entry)
{
guint i = 0;
- LSQSList *buffer_iter = entry->buffer;
+ LSQBTree *buffer_iter;
+
+ entry->buffer = lsq_btree_flatten(entry->buffer);
+ buffer_iter = entry->buffer;
/* free the buffer */
for ( ; NULL != buffer_iter; buffer_iter = buffer_iter->next )
{
lsq_archive_entry_free(archive, buffer_iter->entry);
}
- lsq_slist_free(entry->buffer);
+ lsq_btree_free(entry->buffer);
entry->buffer = NULL;
+ entry->buffer_length = 0;
/* free the sorted list */
if ( NULL != entry->children )
@@ -1078,7 +1079,7 @@ inline static guint
lsq_archive_entry_n_children(const LSQArchiveEntry *entry)
{
/* the first element of the array (*entry->children) contains the size of the array */
- return ((entry->children?GPOINTER_TO_UINT(*entry->children):0) + lsq_slist_length(entry->buffer));
+ return ((entry->children?GPOINTER_TO_UINT(*entry->children):0) + lsq_btree_length(entry->buffer));
}
inline static LSQArchiveEntry*
@@ -1099,7 +1100,7 @@ lsq_archive_entry_flush_buffer(LSQArchiveEntry *entry)
guint new_i = 1;
guint size;
guint n_children;
- LSQSList *buffer_iter = NULL;
+ LSQBTree *buffer_iter = NULL;
LSQArchiveEntry **children_old;
if ( NULL == entry->buffer )
@@ -1107,12 +1108,17 @@ lsq_archive_entry_flush_buffer(LSQArchiveEntry *entry)
return;
}
+ //lsq_btree_print(entry->buffer);
+
+ /* Flatten the btree so we can iterate */
+ entry->buffer = lsq_btree_flatten(entry->buffer);
+
/* the first element of the array (*entry->children) contains the size of the array */
size = entry->children?GPOINTER_TO_UINT(*entry->children):0;
n_children = size;
children_old = (LSQArchiveEntry **)entry->children;
- max_children = (n_children + lsq_slist_length(entry->buffer));
+ max_children = (n_children + lsq_btree_length(entry->buffer));
/* do all elements of the buffer */
entry->children = g_new(LSQArchiveEntry *, max_children+1);
@@ -1164,44 +1170,17 @@ lsq_archive_entry_flush_buffer(LSQArchiveEntry *entry)
*entry->children = GUINT_TO_POINTER(n_children);
/* free the buffer */
- lsq_slist_free(entry->buffer);
+ lsq_btree_free(entry->buffer);
entry->buffer = NULL;
- lsq_slist_index_free(entry->buffer_index);
- entry->buffer_index = NULL;
+ entry->buffer_length = 0;
g_free(children_old);
}
-inline static void
-lsq_archive_entry_build_buffer_index(LSQArchiveEntry *entry)
-{
- guint i = 0;
- LSQSList *buffer_iter = NULL;
- LSQSIndexList **index_iter = &entry->buffer_index;
- for ( buffer_iter = entry->buffer ; NULL != buffer_iter ; buffer_iter = buffer_iter->next )
- {
- ++i;
- if ( 0 == ( i % LSQ_ENTRY_BUFFER_INTERVALSIZE ) )
- {
- if ( NULL == *index_iter )
- {
- *index_iter = lsq_slist_index_new();
- }
-
- (*index_iter)->index = buffer_iter;
-
- index_iter = &((*index_iter)->next);
- }
- }
- lsq_slist_index_free(*index_iter);
- *index_iter = NULL;
-}
-
static LSQArchiveEntry *
lsq_archive_entry_get_child(const LSQArchiveEntry *entry, const gchar *filename)
{
- LSQSList *entry_buffer, *buffer_iter = NULL;
- LSQSIndexList *index_iter = NULL;
+ LSQBTree *buffer_iter = NULL;
/* the first element of the array (*entry->children) contains the size of the array */
guint size = entry->children?GPOINTER_TO_UINT(*entry->children):0;
guint pos = 0;
@@ -1240,37 +1219,25 @@ lsq_archive_entry_get_child(const LSQArchiveEntry *entry, const gchar *filename)
}
}
- /* find a start index into the buffer */
- entry_buffer = entry->buffer;
- for ( index_iter = entry->buffer_index; NULL != index_iter; index_iter = index_iter->next )
- {
- cmp = strcmp(filename, index_iter->index->entry->filename);
-
- if ( 0 == cmp )
- {
- g_free(_filename);
- return index_iter->index->entry;
- }
- if ( 0 > cmp )
- {
- break;
- }
- entry_buffer = index_iter->index;
- }
-
/* search the buffer */
- for ( buffer_iter = entry_buffer; NULL != buffer_iter; buffer_iter = buffer_iter->next )
+ buffer_iter = entry->buffer;
+ while ( NULL != buffer_iter )
{
+ /* archive can be NULL */
cmp = strcmp(filename, buffer_iter->entry->filename);
- if ( 0 == cmp )
+ if ( cmp < 0 )
{
- g_free(_filename);
- return buffer_iter->entry;
+ buffer_iter = buffer_iter->left;
}
- if ( 0 > cmp )
+ else if ( cmp > 0 )
{
- break;
+ buffer_iter = buffer_iter->right;
+ }
+ else
+ {
+ g_free(_filename);
+ return buffer_iter->entry;
}
}
@@ -1289,7 +1256,6 @@ lsq_archive_entry_add_child(LSQArchiveEntry *parent, const gchar *filename)
{
LSQArchiveEntry *child = lsq_archive_entry_new(filename);
const gchar *contenttype = lsq_archive_entry_get_contenttype(parent);
- guint length;
if ( ( NULL == contenttype ) || ( 0 != strcmp ( contenttype, LSQ_MIME_DIRECTORY ) ) )
{
@@ -1300,19 +1266,16 @@ lsq_archive_entry_add_child(LSQArchiveEntry *parent, const gchar *filename)
*/
}
- parent->buffer = lsq_slist_insert_sorted_single(parent->buffer, child, (GCompareFunc)lsq_archive_entry_filename_compare);
+ //g_debug("i: %s", filename);
+ parent->buffer = lsq_btree_insert_sorted_single(parent->buffer, child, (GCompareFunc)lsq_archive_entry_filename_compare);
- /* TODO: cache the length so we doen't have to check every time? */
- length = lsq_slist_length(parent->buffer);
+ /* Cache the length so we doen't have to check every time */
+ parent->buffer_length++;
- if ( LSQ_ENTRY_CHILD_BUFFER_SIZE == length )
+ if ( LSQ_ENTRY_CHILD_BUFFER_SIZE == parent->buffer_length )
{
lsq_archive_entry_flush_buffer(parent);
}
- else if ( 0 == ( length % LSQ_ENTRY_BUFFER_INTERVALSIZE ) )
- {
- lsq_archive_entry_build_buffer_index(parent);
- }
return child;
}
@@ -1320,7 +1283,7 @@ lsq_archive_entry_add_child(LSQArchiveEntry *parent, const gchar *filename)
static gboolean
lsq_archive_entry_remove_child(LSQArchiveEntry *entry, const gchar *filename)
{
- LSQSList *buffer_iter = NULL, *prev_iter = NULL;
+ LSQBTree *buffer_iter = NULL, **prev_iter = NULL;
/* the first element of the array (*entry->children) contains the size of the array */
guint total_size, size = total_size = entry->children?GPOINTER_TO_UINT(*entry->children):0;
@@ -1370,28 +1333,47 @@ lsq_archive_entry_remove_child(LSQArchiveEntry *entry, const gchar *filename)
}
/* search the buffer */
- for(buffer_iter = entry->buffer; buffer_iter; buffer_iter = buffer_iter->next)
- {
- cmp = strcmp(_filename, buffer_iter->entry->filename);
-
- if ( 0 == cmp )
- {
- g_free(_filename);
- if ( NULL != prev_iter )
- {
- prev_iter->next = buffer_iter->next;
- }
- else
- {
- entry->buffer = buffer_iter->next;
- }
- g_free(buffer_iter);
- return TRUE;
- }
- if(cmp < 0)
- break;
- prev_iter = buffer_iter;
- }
+ prev_iter = &entry->buffer;
+ if ( NULL == entry->buffer || NULL != entry->buffer->next )
+ {
+ for(buffer_iter = entry->buffer; buffer_iter; buffer_iter = buffer_iter->next)
+ {
+ cmp = strcmp(_filename, buffer_iter->entry->filename);
+
+ if ( 0 == cmp )
+ {
+ g_free(_filename);
+ *prev_iter = buffer_iter->next;
+ g_free(buffer_iter);
+ return TRUE;
+ }
+ if(cmp < 0)
+ break;
+ prev_iter = &buffer_iter->next;
+ }
+ }
+ else
+ {
+ for ( buffer_iter = entry->buffer; NULL != buffer_iter; buffer_iter = *prev_iter )
+ {
+ /* archive can be NULL */
+ cmp = strcmp(filename, buffer_iter->entry->filename);
+
+ if ( cmp < 0 )
+ {
+ prev_iter = &buffer_iter->left;
+ }
+ else if ( cmp > 0 )
+ {
+ prev_iter = &buffer_iter->right;
+ }
+ else
+ {
+ g_critical("todo");
+ return TRUE;
+ }
+ }
+ }
g_free(_filename);
return FALSE;
diff --git a/libsqueeze/archive.c b/libsqueeze/archive.c
index a2dcd7e..262391b 100644
--- a/libsqueeze/archive.c
+++ b/libsqueeze/archive.c
@@ -31,7 +31,7 @@
#include "support-template.h"
#include "support-factory.h"
-#include "slist.h"
+#include "btree.h"
#include "archive-tempfs.h"
#include "command-queue.h"
diff --git a/libsqueeze/btree.c b/libsqueeze/btree.c
new file mode 100644
index 0000000..869bd80
--- /dev/null
+++ b/libsqueeze/btree.c
@@ -0,0 +1,191 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#include <config.h>
+#include <string.h>
+#include <glib.h>
+#include <glib-object.h>
+#include <gio/gio.h>
+
+#include <libxfce4util/libxfce4util.h>
+
+#include "libsqueeze.h"
+#include "support-factory.h"
+#include "internals.h"
+#include "btree.h"
+
+#ifndef LSQ_BTREE_MAX_DEPTH
+#define LSQ_BTREE_MAX_DEPTH 500
+#endif
+
+LSQBTree *
+lsq_btree_insert_sorted_single (
+ LSQBTree *list,
+ LSQArchiveEntry *entry,
+ GCompareFunc cmp_func )
+{
+ gint cmp;
+ LSQBTree *iter;
+ LSQBTree **next = NULL;
+ LSQBTree *new_entry = NULL;
+ LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+ guint stack_i = 0;
+
+ if ( NULL != list && NULL != list->next )
+ {
+ g_critical("Cannot insert into a flattened tree");
+ return NULL;
+ }
+
+ for ( iter = list; NULL != iter; iter = *next )
+ {
+ /* archive can be NULL */
+ cmp = cmp_func( entry, iter->entry );
+
+ if ( 0 > cmp )
+ {
+ next = &iter->left;
+ }
+ else if ( 0 < cmp )
+ {
+ next = &iter->right;
+ }
+ else
+ {
+ g_critical("THIS SHOULD NOT HAPPEN!!! (the universe has just collapsed)");
+ return NULL;
+ }
+
+ stack[stack_i++] = iter;
+ g_return_val_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH, NULL);
+ }
+
+ new_entry = g_new0(LSQBTree, 1);
+ new_entry->entry = entry;
+
+ if ( NULL == next )
+ {
+ return new_entry;
+ }
+
+ *next = new_entry;
+
+ return list;
+}
+
+guint
+lsq_btree_length ( LSQBTree *list )
+{
+ guint size = 0;
+ LSQBTree *iter;
+ LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+ guint stack_i = 0;
+
+ /* The tree is flattened */
+ if ( NULL == list || NULL != list->next )
+ {
+ for ( iter = list; NULL != iter; iter = iter->next)
+ {
+ size++;
+ }
+ }
+ else
+ {
+ do
+ {
+ for ( iter = list; NULL != iter; iter = iter->left )
+ {
+ stack[stack_i++] = iter;
+ g_return_val_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH, 0);
+
+ size++;
+ }
+
+ list = stack[--stack_i]->right;
+ }
+ while ( 0 != stack_i || NULL != list );
+ }
+
+ return size;
+}
+
+void
+lsq_btree_free ( LSQBTree *list )
+{
+ LSQBTree *iter, *next;
+ LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+ guint stack_i = 0;
+
+ /* The tree is flattened */
+ if ( NULL == list || NULL != list->next )
+ {
+ for ( iter = list; NULL != iter; iter = next)
+ {
+ next = iter->next;
+ g_free( iter );
+ }
+ }
+ else
+ {
+ do
+ {
+ for ( iter = list; NULL != iter; iter = iter->left )
+ {
+ stack[stack_i++] = iter;
+ g_return_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH);
+ }
+
+ list = stack[--stack_i]->right;
+
+ g_free( stack[stack_i] );
+ }
+ while ( 0 != stack_i || NULL != list );
+ }
+}
+
+LSQBTree *
+lsq_btree_flatten ( LSQBTree *list )
+{
+ LSQBTree *iter, *next = list;
+ LSQBTree **prev = &list;
+ LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+ guint stack_i = 0;
+
+ /* The tree is flattened */
+ if ( NULL == list || NULL != list->next )
+ {
+ return list;
+ }
+
+ do
+ {
+ for ( iter = next; NULL != iter; iter = iter->left )
+ {
+ stack[stack_i++] = iter;
+ g_return_val_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH, NULL);
+ }
+
+ next = stack[--stack_i];
+
+ *prev = next;
+ prev = &next->next;
+
+ next = next->right;
+ }
+ while ( 0 != stack_i || NULL != next );
+
+ return list;
+}
+
diff --git a/libsqueeze/slist.h b/libsqueeze/btree.h
similarity index 57%
rename from libsqueeze/slist.h
rename to libsqueeze/btree.h
index 4772afc..67a067b 100644
--- a/libsqueeze/slist.h
+++ b/libsqueeze/btree.h
@@ -14,39 +14,31 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ifndef __LSQ_SLIST_H__
-#define __LSQ_SLIST_H__
+#ifndef __LSQ_BTREE_H__
+#define __LSQ_BTREE_H__
-typedef struct _LSQSList LSQSList;
+typedef struct _LSQBTree LSQBTree;
-struct _LSQSList {
- LSQArchiveEntry *entry;
- LSQSList *next;
+struct _LSQBTree {
+ LSQArchiveEntry *entry;
+ LSQBTree *next;
+ LSQBTree *left;
+ LSQBTree *right;
};
-LSQSList *
-lsq_slist_insert_sorted_single (
- LSQSList *list,
+LSQBTree *
+lsq_btree_insert_sorted_single (
+ LSQBTree *list,
LSQArchiveEntry *entry,
- GCompareFunc) G_GNUC_INTERNAL;
+ GCompareFunc ) G_GNUC_INTERNAL;
guint
-lsq_slist_length(LSQSList *list) G_GNUC_INTERNAL;
+lsq_btree_length ( LSQBTree *list ) G_GNUC_INTERNAL;
void
-lsq_slist_free(LSQSList *list) G_GNUC_INTERNAL;
+lsq_btree_free ( LSQBTree *list ) G_GNUC_INTERNAL;
-typedef struct _LSQSIndexList LSQSIndexList;
+LSQBTree *
+lsq_btree_flatten ( LSQBTree *list ) G_GNUC_INTERNAL;
-struct _LSQSIndexList {
- LSQSList *index;
- LSQSIndexList *next;
-};
-
-LSQSIndexList *
-lsq_slist_index_new(void);
-
-void
-lsq_slist_index_free(LSQSIndexList *list);
-
-#endif /* __LSQ_SLIST_H__ */
+#endif /* __LSQ_BTREE_H__ */
diff --git a/libsqueeze/slist.c b/libsqueeze/slist.c
deleted file mode 100644
index b15cd8a..0000000
--- a/libsqueeze/slist.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#include <config.h>
-#include <string.h>
-#include <glib.h>
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include <libxfce4util/libxfce4util.h>
-
-#include "libsqueeze.h"
-#include "support-factory.h"
-#include "internals.h"
-#include "slist.h"
-
-LSQSList *
-lsq_slist_insert_sorted_single (
- LSQSList *list,
- LSQArchiveEntry *entry,
- GCompareFunc cmp_func)
-{
- gint cmp = 1;
- LSQSList *iter = list;
- LSQSList *prev_entry = NULL;
- LSQSList *new_entry = NULL;
-
- for(; iter; iter = iter->next)
- {
- /* archive can be NULL */
- cmp = cmp_func(entry, (LSQArchiveEntry*)iter->entry);
-
- if ( 0 == cmp )
- {
- g_critical("THIS SHOULD NOT HAPPEN!!! (the universe has just collapsed)");
- return NULL;
- }
- if ( 0 > cmp )
- {
- break;
- }
-
- prev_entry = iter;
- }
-
- new_entry = g_new0(LSQSList, 1);
- new_entry->next = iter;
- new_entry->entry = entry;
-
- if ( NULL == prev_entry )
- {
- return new_entry;
- }
-
- prev_entry->next = new_entry;
- return list;
-}
-
-guint
-lsq_slist_length ( LSQSList *list )
-{
- guint size = 0;
- for(; list; list = list->next)
- {
- size++;
- }
- return size;
-}
-
-void
-lsq_slist_free ( LSQSList *list )
-{
- LSQSList *next;
- for(; list; list = next)
- {
- next = list->next;
- g_free(list);
- }
-}
-
-LSQSIndexList *
-lsq_slist_index_new(void)
-{
- return g_new0(LSQSIndexList, 1);
-}
-
-void
-lsq_slist_index_free ( LSQSIndexList *list )
-{
- LSQSIndexList *next;
- for(; list; list = next)
- {
- next = list->next;
- g_free(list);
- }
-}
-
More information about the Xfce4-commits
mailing list