* Sebastian Hammer, Adam Dickmeiss
*
* $Log: recindex.c,v $
- * Revision 1.27 1999-10-29 10:02:33 adam
+ * Revision 1.32 2002-04-05 08:46:26 adam
+ * Zebra with full functionality
+ *
+ * Revision 1.31 2001/02/26 22:14:59 adam
+ * Updated for BZIP2 1.0.X. Configure script doesn't enable 64 bit LFS
+ * on broken glibc on Redhat 7.0.
+ *
+ * Revision 1.30 2000/07/13 10:14:20 heikki
+ * Removed compiler warnings when making zebra
+ *
+ * Revision 1.29 2000/04/05 09:49:35 adam
+ * On Unix, zebra/z'mbol uses automake.
+ *
+ * Revision 1.28 1999/12/08 22:44:45 adam
+ * Zebra/Z'mbol dependencies added.
+ *
+ * Revision 1.27 1999/10/29 10:02:33 adam
* Fixed decompression buffer overflow.
*
* Revision 1.26 1999/07/06 13:34:57 adam
p->cache_cur = 0;
p->record_cache = (struct record_cache_entry *)
xmalloc (sizeof(*p->record_cache)*p->cache_max);
+ zebra_mutex_init (&p->mutex);
return p;
}
#if HAVE_BZLIB_H
csize = out_offset + (out_offset >> 6) + 620;
rec_tmp_expand (p, csize);
- i = bzBuffToBuffCompress (p->tmp_buf+sizeof(int)+sizeof(short)+
+#ifdef BZ_CONFIG_ERROR
+ i = BZ2_bzBuffToBuffCompress
+#else
+ i = bzBuffToBuffCompress
+#endif
+ (p->tmp_buf+sizeof(int)+sizeof(short)+
sizeof(char),
&csize, out_buf, out_offset, 1, 0, 30);
if (i != BZ_OK)
assert (p);
+ zebra_mutex_destroy (&p->mutex);
rec_cache_flush (p, 0);
xfree (p->record_cache);
*pp = NULL;
}
-
-Record rec_get (Records p, int sysno)
+static Record rec_get_int (Records p, int sysno)
{
int i, in_size, r;
Record rec, *recp;
char *nptr, *cptr;
char *in_buf = 0;
char *bz_buf = 0;
+#if HAVE_BZLIB_H
int bz_size;
+#endif
char compression_method;
assert (sysno > 0);
while (1)
{
bz_buf = (char *) xmalloc (bz_size);
- i = bzBuffToBuffDecompress (bz_buf, &bz_size, in_buf, in_size, 0, 0);
+#ifdef BZ_CONFIG_ERROR
+ i = BZ2_bzBuffToBuffDecompress
+#else
+ i = bzBuffToBuffDecompress
+#endif
+ (bz_buf, &bz_size, in_buf, in_size, 0, 0);
logf (LOG_LOG, "decompress %5d %5d", in_size, bz_size);
if (i == BZ_OK)
break;
return rec;
}
-Record rec_new (Records p)
+Record rec_get (Records p, int sysno)
+{
+ Record rec;
+ zebra_mutex_lock (&p->mutex);
+
+ rec = rec_get_int (p, sysno);
+ zebra_mutex_unlock (&p->mutex);
+ return rec;
+}
+
+static Record rec_new_int (Records p)
{
int sysno, i;
Record rec;
return rec;
}
+Record rec_new (Records p)
+{
+ Record rec;
+ zebra_mutex_lock (&p->mutex);
+
+ rec = rec_new_int (p);
+ zebra_mutex_unlock (&p->mutex);
+ return rec;
+}
+
void rec_del (Records p, Record *recpp)
{
Record *recp;
+ zebra_mutex_lock (&p->mutex);
(p->head.no_records)--;
if ((recp = rec_cache_lookup (p, (*recpp)->sysno, recordFlagDelete)))
{
rec_cache_insert (p, *recpp, recordFlagDelete);
rec_rm (recpp);
}
+ zebra_mutex_unlock (&p->mutex);
*recpp = NULL;
}
{
Record *recp;
+ zebra_mutex_lock (&p->mutex);
if ((recp = rec_cache_lookup (p, (*recpp)->sysno, recordFlagWrite)))
{
rec_rm (recp);
rec_cache_insert (p, *recpp, recordFlagWrite);
rec_rm (recpp);
}
+ zebra_mutex_unlock (&p->mutex);
*recpp = NULL;
}