aboutsummaryrefslogtreecommitdiffstats
path: root/libibex
diff options
context:
space:
mode:
authorNotZed <NotZed@HelixCode.com>2000-04-12 23:09:58 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-04-12 23:09:58 +0800
commit195cd8844b7a2e3b19e387f4157bb5c5141f0062 (patch)
tree7003aa5ece07860765e5149dfed7fae6d8d9c075 /libibex
parent73b0317b1fabbb29ae06841c4692a79b80436262 (diff)
downloadgsoc2013-evolution-195cd8844b7a2e3b19e387f4157bb5c5141f0062.tar.gz
gsoc2013-evolution-195cd8844b7a2e3b19e387f4157bb5c5141f0062.tar.zst
gsoc2013-evolution-195cd8844b7a2e3b19e387f4157bb5c5141f0062.zip
Debug function to dump the whole index to stdout.
2000-04-12 NotZed <NotZed@HelixCode.com> * find.c (ibex_dump_all): Debug function to dump the whole index to stdout. * words.c (get_ibex_file): Use g_strdup(), not strdup(). 2000-04-11 NotZed <NotZed@HelixCode.com> * file.c (write_word): Always write out all words we have (even if its 0 ... the file expects it). No longer check for removed files. (store_word): Check for removed files here, and only add to the ordered tree if we have references left to this word. (ibex_write): First insert into the tree, to determine the wordcount to be saved in the output file, and then write that. (ibex_open): Remove some debug. * words.c (ibex_index_buffer): Always set 'unread', if it is a valid pointer (dont rely on caller to initialise it). svn path=/trunk/; revision=2409
Diffstat (limited to 'libibex')
-rw-r--r--libibex/ChangeLog20
-rw-r--r--libibex/file.c63
-rw-r--r--libibex/find.c20
-rw-r--r--libibex/ibex.h3
-rw-r--r--libibex/words.c7
5 files changed, 82 insertions, 31 deletions
diff --git a/libibex/ChangeLog b/libibex/ChangeLog
index ef27870817..bc6d1d520a 100644
--- a/libibex/ChangeLog
+++ b/libibex/ChangeLog
@@ -1,3 +1,23 @@
+2000-04-12 NotZed <NotZed@HelixCode.com>
+
+ * find.c (ibex_dump_all): Debug function to dump the whole index
+ to stdout.
+
+ * words.c (get_ibex_file): Use g_strdup(), not strdup().
+
+2000-04-11 NotZed <NotZed@HelixCode.com>
+
+ * file.c (write_word): Always write out all words we have (even if
+ its 0 ... the file expects it). No longer check for removed files.
+ (store_word): Check for removed files here, and only add to the
+ ordered tree if we have references left to this word.
+ (ibex_write): First insert into the tree, to determine the
+ wordcount to be saved in the output file, and then write that.
+ (ibex_open): Remove some debug.
+
+ * words.c (ibex_index_buffer): Always set 'unread', if it is a
+ valid pointer (dont rely on caller to initialise it).
+
2000-03-26 NotZed <NotZed@HelixCode.com>
* lookup.c (main): Fixed call to ibex_open.
diff --git a/libibex/file.c b/libibex/file.c
index f011312cab..5c292e198f 100644
--- a/libibex/file.c
+++ b/libibex/file.c
@@ -81,7 +81,6 @@ ibex_open (char *file, int flags, int mode)
fd = open(file, flags, mode);
if (fd == -1) {
- printf("open failed :(\n");
return NULL;
}
@@ -113,7 +112,6 @@ ibex_open (char *file, int flags, int mode)
f = fdopen(fd, modestr);
if (f == NULL) {
- printf("fdopen failed, modestr = '%s'\n", modestr);
if (errno == 0)
errno = ENOMEM;
return NULL;
@@ -147,8 +145,9 @@ ibex_open (char *file, int flags, int mode)
for (i = 0; i < nfiles; i++) {
ibfs[i] = g_malloc (sizeof (ibex_file));
ibfs[i]->name = get_compressed_word (f, &lastword);
- if (!ibfs[i]->name)
+ if (!ibfs[i]->name) {
goto errout;
+ }
ibfs[i]->index = 0;
g_tree_insert (ib->files, ibfs[i]->name, ibfs[i]);
}
@@ -158,16 +157,18 @@ ibex_open (char *file, int flags, int mode)
lastword = NULL;
for (i = 0; i < nwords; i++) {
word = get_compressed_word (f, &lastword);
- if (!word)
+ if (!word) {
goto errout;
+ }
nrefs = read_number (f);
refs = g_ptr_array_new ();
g_ptr_array_set_size (refs, nrefs);
while (nrefs--) {
ref = read_number (f);
- if (ref >= nfiles)
+ if (ref >= nfiles) {
goto errout;
+ }
refs->pdata[nrefs] = ibfs[ref];
}
@@ -230,43 +231,49 @@ write_file (gpointer key, gpointer value, gpointer data)
return FALSE;
}
+/* scans for words which still exist in the index (after
+ index removals), and adds them to the ordered tree for
+ writing out in order */
static void
store_word (gpointer key, gpointer value, gpointer data)
{
GTree *wtree = data;
+ GPtrArray *refs = value;
+ int i;
+ ibex_file *ibf;
- g_tree_insert (wtree, key, value);
+ for (i = 0; i < refs->len; i++) {
+ ibf = g_ptr_array_index (refs, i);
+ if (ibf->index == -1) {
+ g_ptr_array_remove_index_fast (refs, i);
+ i--;
+ }
+ }
+
+ if (refs->len > 0) {
+ g_tree_insert (wtree, key, value);
+ }
}
+/* writes a word out, in order */
static gint
write_word (gpointer key, gpointer value, gpointer data)
{
char *word = key;
GPtrArray *refs = value;
struct ibex_write_data *iwd = data;
+ int i, prefix;
ibex_file *ibf;
- int i, ind, prefix;
- for (i = ind = 0; i < refs->len; i++) {
- ibf = g_ptr_array_index (refs, i);
- if (ibf->index == -1) {
- g_ptr_array_remove_index_fast (refs, i);
- i--;
- } else
- ind++;
- }
-
- if (ind != 0) {
- prefix = get_prefix (iwd, word);
- fprintf (iwd->f, "%c%s", prefix, word + prefix);
- fputc (0, iwd->f);
+ prefix = get_prefix (iwd, word);
+ fprintf (iwd->f, "%c%s", prefix, word + prefix);
+ fputc (0, iwd->f);
- write_number (iwd->f, ind);
+ write_number (iwd->f, refs->len);
- for (i = 0; i < refs->len; i++) {
- ibf = g_ptr_array_index (refs, i);
- write_number (iwd->f, ibf->index);
- }
+ for (i = 0; i < refs->len; i++) {
+ ibf = g_ptr_array_index (refs, i);
+ write_number (iwd->f, ibf->index);
}
return FALSE;
}
@@ -310,11 +317,11 @@ ibex_write (ibex *ib)
goto lose;
iwd.lastname = NULL;
- write_number (iwd.f, g_hash_table_size (ib->words));
- if (ferror (iwd.f))
- goto lose;
wtree = g_tree_new (strcmp);
g_hash_table_foreach (ib->words, store_word, wtree);
+ write_number (iwd.f, g_tree_nnodes(wtree));
+ if (ferror (iwd.f))
+ goto lose;
g_tree_traverse (wtree, write_word, G_IN_ORDER, &iwd);
g_tree_destroy (wtree);
if (ferror (iwd.f))
diff --git a/libibex/find.c b/libibex/find.c
index 91e611401c..e0b5d263c8 100644
--- a/libibex/find.c
+++ b/libibex/find.c
@@ -160,3 +160,23 @@ ibex_find_all (ibex *ib, GPtrArray *words)
g_tree_destroy (work);
return ret;
}
+
+static void
+ibex_dump_foo(char *key, GPtrArray *refs, void *data)
+{
+ int i;
+
+ printf("%s: ", key);
+ for (i=0;i<refs->len;i++) {
+ ibex_file *ibf = g_ptr_array_index (refs, i);
+ printf("%c%s", ibf->index==-1?'-':' ', ibf->name);
+ }
+ printf("\n");
+}
+
+/* debug function to dump the tree, in key order */
+void
+ibex_dump_all (ibex *ib)
+{
+ g_hash_table_foreach(ib->words, ibex_dump_foo, 0);
+}
diff --git a/libibex/ibex.h b/libibex/ibex.h
index bb818e6d34..e24508aaf7 100644
--- a/libibex/ibex.h
+++ b/libibex/ibex.h
@@ -92,5 +92,8 @@ gboolean ibex_find_name (ibex *ib, char *name, char *word);
*/
GPtrArray *ibex_find_all (ibex *ib, GPtrArray *words);
+/* Debug function, dumps the whole index tree, showing removed files as well */
+void ibex_dump_all (ibex *ib);
+
#endif /* ! IBEX_H */
diff --git a/libibex/words.c b/libibex/words.c
index 40e0452403..7642b0a305 100644
--- a/libibex/words.c
+++ b/libibex/words.c
@@ -159,7 +159,7 @@ get_ibex_file (ibex *ib, char *name)
ibf = g_tree_lookup (ib->files, name);
if (!ibf) {
ibf = g_malloc (sizeof (ibex_file));
- ibf->name = strdup (name);
+ ibf->name = g_strdup (name);
ibf->index = 0;
g_tree_insert (ib->files, ibf->name, ibf);
ib->dirty = TRUE;
@@ -213,6 +213,9 @@ ibex_index_buffer (ibex *ib, char *name, char *buffer,
ibex_file *ibf = get_ibex_file (ib, name);
int wordsiz, cat;
+ if (unread)
+ *unread = 0;
+
end = buffer + len;
wordsiz = 20;
word = g_malloc (wordsiz);
@@ -261,8 +264,6 @@ ibex_index_buffer (ibex *ib, char *name, char *buffer,
p = q;
}
- if (unread)
- *unread = 0;
g_free (word);
return 0;
}