]> git.ozlabs.org Git - ccan/blob - ccan/jbitset/jbitset.c
tdb2: tdb_foreach()
[ccan] / ccan / jbitset / jbitset.c
1 /* Licensed under LGPLv2.1+ - see LICENSE file for details */
2 #include <ccan/jbitset/jbitset.h>
3 #include <ccan/build_assert/build_assert.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 struct jbitset *jbit_new(void)
8 {
9         struct jbitset *set;
10
11         /* Judy uses Word_t, we use unsigned long directly. */
12         BUILD_ASSERT(sizeof(unsigned long) == sizeof(Word_t));
13         /* We pack pointers into jbitset (in jbitset_type.h) */
14         BUILD_ASSERT(sizeof(Word_t) >= sizeof(void *));
15
16         set = malloc(sizeof(*set));
17         if (set) {
18                 set->judy = NULL;
19                 memset(&set->err, 0, sizeof(set->err));
20                 set->errstr = NULL;
21         }
22         return set;
23 }
24
25 const char *jbit_error_(struct jbitset *set)
26 {
27         char *str;
28         free((char *)set->errstr);
29         set->errstr = str = malloc(100);
30         if (!set->errstr)
31                 return "out of memory";
32
33         sprintf(str,
34                 "JU_ERRNO_* == %d, ID == %d\n",
35                 JU_ERRNO(&set->err), JU_ERRID(&set->err));
36         return str;
37 }
38
39 void jbit_free(const struct jbitset *set)
40 {
41         free((char *)set->errstr);
42         Judy1FreeArray((PPvoid_t)&set->judy, PJE0);
43         free((void *)set);
44 }