aboutsummaryrefslogtreecommitdiffstats
path: root/src/libdcache/dcache_searchnode.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2024-08-20 18:12:37 +0000
committerLaurent Bercot <ska@appnovation.com>2024-08-20 18:12:37 +0000
commit45c04a53fb9fbefe4dd86514c7563b4af1961dfb (patch)
tree4e90eed434b9292e405245d5394e9a9f3e3a3c46 /src/libdcache/dcache_searchnode.c
parent1360696c2d6ed7083a71979c8382c9d34df12cf0 (diff)
downloadshibari-45c04a53fb9fbefe4dd86514c7563b4af1961dfb.tar.gz
Add a lot of stuff, disable shibari-cache build for now
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libdcache/dcache_searchnode.c')
-rw-r--r--src/libdcache/dcache_searchnode.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libdcache/dcache_searchnode.c b/src/libdcache/dcache_searchnode.c
new file mode 100644
index 0000000..ef7341c
--- /dev/null
+++ b/src/libdcache/dcache_searchnode.c
@@ -0,0 +1,28 @@
+/* ISC license. */
+
+#include <stdint.h>
+
+#include <skalibs/uint16.h>
+#include <skalibs/avltree.h>
+
+#include <shibari/dcache.h>
+#include "dcache-internal.h"
+
+int dcache_searchnode (dcache *z, uint32_t *idx, char const *q, uint16_t qlen, uint16_t qtype, tai const *stamp)
+{
+ dcache_node *node ;
+ uint32_t i ;
+ char key[4 + qlen] ;
+ uint16_pack_big(key, qtype) ;
+ uint16_pack_big(key+2, qlen) ;
+ memcpy(key+4, q, qlen) ;
+ if (!avltree_search(&z->by_key, &k, &i)) return -1 ;
+ node = DNODE(z, i) ;
+ if (node->sa.len == node->sa.a && !tai_less(stamp, &node->expire))
+ {
+ dcache_delete(z, i) ;
+ return -1 ;
+ }
+ *idx = i ;
+ return node->sa.len == node->sa.a ;
+}