aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package/deps.mak5
-rw-r--r--src/include/skalibs/avltreen.h30
-rw-r--r--src/include/skalibs/bytestr.h5
-rw-r--r--src/libdatastruct/avltreeb_init.c14
-rw-r--r--src/libstddjb/bytestr-internal.h11
-rw-r--r--src/libstddjb/fd_unlock.c2
-rw-r--r--src/libstddjb/gol_main.c2
-rw-r--r--src/libstddjb/str_bcmp.c10
-rw-r--r--src/libstddjb/str_cmp.c10
-rw-r--r--src/libstddjb/stringkey_bcmp.c12
-rw-r--r--src/libstddjb/stringkey_cmp.c13
11 files changed, 112 insertions, 2 deletions
diff --git a/package/deps.mak b/package/deps.mak
index e401efa..90fb52a 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -89,6 +89,7 @@ src/libdatastruct/avltree_init.o src/libdatastruct/avltree_init.lo: src/libdatas
src/libdatastruct/avltree_insert.o src/libdatastruct/avltree_insert.lo: src/libdatastruct/avltree_insert.c src/include/skalibs/avltree.h
src/libdatastruct/avltree_newnode.o src/libdatastruct/avltree_newnode.lo: src/libdatastruct/avltree_newnode.c src/include/skalibs/avlnode.h src/include/skalibs/avltree.h src/include/skalibs/gensetdyn.h
src/libdatastruct/avltree_zero.o src/libdatastruct/avltree_zero.lo: src/libdatastruct/avltree_zero.c src/include/skalibs/avltree.h
+src/libdatastruct/avltreeb_init.o src/libdatastruct/avltreeb_init.lo: src/libdatastruct/avltreeb_init.c src/include/skalibs/avlnode.h src/include/skalibs/avltreen.h
src/libdatastruct/avltreen_delete.o src/libdatastruct/avltreen_delete.lo: src/libdatastruct/avltreen_delete.c src/include/skalibs/avlnode.h src/include/skalibs/avltreen.h src/include/skalibs/genset.h
src/libdatastruct/avltreen_init.o src/libdatastruct/avltreen_init.lo: src/libdatastruct/avltreen_init.c src/include/skalibs/avlnode.h src/include/skalibs/avltreen.h src/include/skalibs/genset.h
src/libdatastruct/avltreen_insert.o src/libdatastruct/avltreen_insert.lo: src/libdatastruct/avltreen_insert.c src/include/skalibs/avltreen.h
@@ -580,7 +581,9 @@ src/libstddjb/socket_udp6.o src/libstddjb/socket_udp6.lo: src/libstddjb/socket_u
src/libstddjb/socket_waitconn.o src/libstddjb/socket_waitconn.lo: src/libstddjb/socket_waitconn.c src/include/skalibs/allreadwrite.h src/include/skalibs/iopause.h src/include/skalibs/socket.h
src/libstddjb/socketpair_internal.o src/libstddjb/socketpair_internal.lo: src/libstddjb/socketpair_internal.c src/include/skalibs/djbunix.h src/include/skalibs/fcntl.h src/include/skalibs/nonposix.h src/include/skalibs/socket.h src/include/skalibs/sysdeps.h
src/libstddjb/stamp.o src/libstddjb/stamp.lo: src/libstddjb/stamp.c src/include/skalibs/tai.h
+src/libstddjb/str_bcmp.o src/libstddjb/str_bcmp.lo: src/libstddjb/str_bcmp.c src/include/skalibs/bytestr.h
src/libstddjb/str_chr.o src/libstddjb/str_chr.lo: src/libstddjb/str_chr.c src/include/skalibs/bytestr.h
+src/libstddjb/str_cmp.o src/libstddjb/str_cmp.lo: src/libstddjb/str_cmp.c src/include/skalibs/bytestr.h
src/libstddjb/str_fmt.o src/libstddjb/str_fmt.lo: src/libstddjb/str_fmt.c src/include/skalibs/fmtscan.h
src/libstddjb/str_rchr.o src/libstddjb/str_rchr.lo: src/libstddjb/str_rchr.c src/include/skalibs/bytestr.h
src/libstddjb/str_start.o src/libstddjb/str_start.lo: src/libstddjb/str_start.c src/include/skalibs/bytestr.h
@@ -607,6 +610,8 @@ src/libstddjb/string_quote_nodelim_mustquote.o src/libstddjb/string_quote_nodeli
src/libstddjb/string_unquote.o src/libstddjb/string_unquote.lo: src/libstddjb/string_unquote.c src/include/skalibs/skamisc.h
src/libstddjb/string_unquote_nodelim.o src/libstddjb/string_unquote_nodelim.lo: src/libstddjb/string_unquote_nodelim.c src/include/skalibs/skamisc.h
src/libstddjb/string_unquote_withdelim.o src/libstddjb/string_unquote_withdelim.lo: src/libstddjb/string_unquote_withdelim.c src/include/skalibs/bytestr.h src/include/skalibs/fmtscan.h src/include/skalibs/posixishard.h src/include/skalibs/skamisc.h
+src/libstddjb/stringkey_bcmp.o src/libstddjb/stringkey_bcmp.lo: src/libstddjb/stringkey_bcmp.c src/libstddjb/bytestr-internal.h src/include/skalibs/bytestr.h
+src/libstddjb/stringkey_cmp.o src/libstddjb/stringkey_cmp.lo: src/libstddjb/stringkey_cmp.c src/libstddjb/bytestr-internal.h src/include/skalibs/bytestr.h
src/libstddjb/strn_fmt.o src/libstddjb/strn_fmt.lo: src/libstddjb/strn_fmt.c src/include/skalibs/fmtscan.h src/include/skalibs/types.h
src/libstddjb/subgetopt.o src/libstddjb/subgetopt.lo: src/libstddjb/subgetopt.c src/include/skalibs/sgetopt.h
src/libstddjb/subgetopt_here.o src/libstddjb/subgetopt_here.lo: src/libstddjb/subgetopt_here.c src/include/skalibs/sgetopt.h
diff --git a/src/include/skalibs/avltreen.h b/src/include/skalibs/avltreen.h
index 511452d..96eb284 100644
--- a/src/include/skalibs/avltreen.h
+++ b/src/include/skalibs/avltreen.h
@@ -64,4 +64,34 @@ extern int avltreen_delete (avltreen *, void const *) ;
#define avltreen_iter_nocancel(t, cut, f, p) avlnode_iter_nocancel(avltreen_nodes(t), avltreen_totalsize(t), cut, avltreen_root(t), f, p)
#define avltreen_iter_withcancel(t, f, cancelf, p) avlnode_iter_withcancel(avltreen_nodes(t), avltreen_totalsize(t), avltreen_root(t), f, cancelf, p)
+
+#define AVLTREEB_SPACE(n) (sizeof(avltreen) + (n)*sizeof(avlnode) + ((n)+1)*sizeof(uint32_t))
+#define avltreeb_totalsize(t) avltreen_totalsize((avltreen const *)(t))
+#define avltreeb_len(t) avltreen_len((avltreen const *)(t))
+#define avltreeb_nodes(t) avltreen_nodes((avltreen const *)(t))
+#define avltreeb_data(t, d) avltreen_data((avltreen const *)(t), d)
+#define avltreeb_root(t) avltreen_root((avltreen const *)(t))
+#define avltreeb_setroot(t, r) avltreen_setroot((avltreen *)(t), r)
+
+extern void avltreeb_init (void *, uint32_t, dtok_func_ref, cmp_func_ref, void *) ;
+#define avltreeb_searchnode(t, k) avltreen_searchnode((avltreen const *)(t), k)
+#define avltreeb_search(t, k, data) avltreen_search((avltreen const *)(t), k, data)
+#define avltreeb_height(t) avltreen_height((avltreen const *)(t))
+#define avltreeb_extremenode(t, h) avltreen_extremenode((avltreen const *)(t), h)
+#define avltreeb_minnode(t) avltreen_minnode((avltreen const *)(t))
+#define avltreeb_maxnode(t) avltreen_maxnode((avltreen const *)(t))
+#define avltreeb_extreme(t, h, data) avltreen_extreme((avltreen const *)(t), h, data)
+#define avltreeb_min(t, data) avltreen_min((avltreen const *)(t), data)
+#define avltreeb_max(t, data) avltreen_max((avltreen const *)(t), data)
+
+#define avltreeb_newnode(t, i) avltreen_newnode((avltreen *)(t), d)
+#define avltreeb_insertnode(t, i) avltreen_insertnode((avltreen *)(t), i)
+#define avltreeb_insert(t, d) avltreen_insert((avltreen *)(t), d)
+#define avltreeb_delete(t, k) avltreen_delete((avltreen *)(t), k)
+
+#define avltreeb_iter(t, f, p) avltreen_iter((avltreen *)(t), f, p)
+#define avltreeb_iter_nocancel(t, cut, f, p) avltreen_iter_nocancel((avltreen *)(t), cut, f, p)
+#define avltreeb_iter_withcancel(t, f, cancelf, p) avltreen_iter_withcancel((avltreen *)(t), f, cancelf, p)
+
+
#endif
diff --git a/src/include/skalibs/bytestr.h b/src/include/skalibs/bytestr.h
index 30695f8..c99a94b 100644
--- a/src/include/skalibs/bytestr.h
+++ b/src/include/skalibs/bytestr.h
@@ -50,4 +50,9 @@ extern void case_upperb (char *, size_t) ;
#define case_starts(s, t) case_startb(s, strlen(s), t)
extern int case_startb (char const *, size_t, char const *) gccattr_pure ;
+extern int str_cmp (void const *, void const *) gccattr_pure ;
+extern int str_bcmp (void const *, void const *) gccattr_pure ;
+extern int stringkey_cmp (void const *, void const *) gccattr_pure ;
+extern int stringkey_bcmp (void const *, void const *) gccattr_pure ;
+
#endif
diff --git a/src/libdatastruct/avltreeb_init.c b/src/libdatastruct/avltreeb_init.c
new file mode 100644
index 0000000..a641848
--- /dev/null
+++ b/src/libdatastruct/avltreeb_init.c
@@ -0,0 +1,14 @@
+/* ISC license. */
+
+#include <stdint.h>
+
+#include <skalibs/avlnode.h>
+#include <skalibs/avltreen.h>
+
+void avltreeb_init (void *blob, uint32_t size, dtok_func_ref dtok, cmp_func_ref f, void *p)
+{
+ avltreen *t = blob ;
+ avlnode *storage = (avlnode *)(t + 1) ;
+ uint32_t *freelist = (uint32_t *)(storage + size) ;
+ avltreen_init(t, storage, freelist, size, dtok, f, p) ;
+}
diff --git a/src/libstddjb/bytestr-internal.h b/src/libstddjb/bytestr-internal.h
new file mode 100644
index 0000000..effb0c5
--- /dev/null
+++ b/src/libstddjb/bytestr-internal.h
@@ -0,0 +1,11 @@
+/* ISC license. */
+
+#ifndef BYTESTR_INTERNAL_H
+#define BYTESTR_INTERNAL_H
+
+struct stringkey_s
+{
+ char const *s ;
+} ;
+
+#endif
diff --git a/src/libstddjb/fd_unlock.c b/src/libstddjb/fd_unlock.c
index 64984b9..f9758b5 100644
--- a/src/libstddjb/fd_unlock.c
+++ b/src/libstddjb/fd_unlock.c
@@ -8,7 +8,7 @@
void fd_unlock (int fd)
{
- struct flock fl =
+ static struct flock const fl =
{
.l_type = F_UNLCK,
.l_whence = SEEK_SET,
diff --git a/src/libstddjb/gol_main.c b/src/libstddjb/gol_main.c
index 1915fca..d7b1026 100644
--- a/src/libstddjb/gol_main.c
+++ b/src/libstddjb/gol_main.c
@@ -7,7 +7,7 @@
unsigned int gol_main (int argc, char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar)
{
- if (argc < 1 || argv[argc]) strerr_diefu1x(100, "gol: invalid argc/argv") ;
+ if (argc < 1 || argv[argc]) strerr_diefu1x(103, "gol: invalid argc/argv") ;
if (argc == 1) return 1 ;
return 1 + gol_argv(argv + 1, b, bn, a, an, br, ar) ;
}
diff --git a/src/libstddjb/str_bcmp.c b/src/libstddjb/str_bcmp.c
new file mode 100644
index 0000000..e2248e1
--- /dev/null
+++ b/src/libstddjb/str_bcmp.c
@@ -0,0 +1,10 @@
+/* ISC license. */
+
+#include <string.h>
+
+#include <skalibs/bytestr.h>
+
+int str_bcmp (void const *a, void const *b)
+{
+ return strcmp((char const *)a, *(char const *const *)b) ;
+}
diff --git a/src/libstddjb/str_cmp.c b/src/libstddjb/str_cmp.c
new file mode 100644
index 0000000..b19b834
--- /dev/null
+++ b/src/libstddjb/str_cmp.c
@@ -0,0 +1,10 @@
+/* ISC license. */
+
+#include <string.h>
+
+#include <skalibs/bytestr.h>
+
+int str_cmp (void const *a, void const *b)
+{
+ return strcmp(*(char const *const *)a, *(char const *const *)b) ;
+}
diff --git a/src/libstddjb/stringkey_bcmp.c b/src/libstddjb/stringkey_bcmp.c
new file mode 100644
index 0000000..e77c35e
--- /dev/null
+++ b/src/libstddjb/stringkey_bcmp.c
@@ -0,0 +1,12 @@
+/* ISC license. */
+
+#include <string.h>
+
+#include <skalibs/bytestr.h>
+#include "bytestr-internal.h"
+
+int stringkey_bcmp (void const *a, void const *b)
+{
+ struct stringkey_s const *bb = b ;
+ return strcmp((char const *)a, bb->s) ;
+}
diff --git a/src/libstddjb/stringkey_cmp.c b/src/libstddjb/stringkey_cmp.c
new file mode 100644
index 0000000..5c683c1
--- /dev/null
+++ b/src/libstddjb/stringkey_cmp.c
@@ -0,0 +1,13 @@
+/* ISC license. */
+
+#include <string.h>
+
+#include <skalibs/bytestr.h>
+#include "bytestr-internal.h"
+
+int stringkey_cmp (void const *a, void const *b)
+{
+ struct stringkey_s const *aa = a ;
+ struct stringkey_s const *bb = b ;
+ return strcmp(aa->s, bb->s) ;
+}