]> git.ozlabs.org Git - ccan/blob - ccan/jmap/jmap.c
build_assert: relicense to public domain.
[ccan] / ccan / jmap / jmap.c
1 #include <ccan/jmap/jmap.h>
2 #include <ccan/build_assert/build_assert.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 struct jmap *jmap_new(void)
7 {
8         struct jmap *map;
9
10         /* Judy uses unsigned long for Word_t, we use unsigned long. */
11         BUILD_ASSERT(sizeof(Word_t) == sizeof(unsigned long));
12         /* We also put pointers into Judy, in jmap_types.h */
13         BUILD_ASSERT(sizeof(Word_t) >= sizeof(void *));
14
15         map = malloc(sizeof(*map));
16         if (map) {
17                 map->judy = NULL;
18                 memset(&map->err, 0, sizeof(map->err));
19                 map->errstr = NULL;
20                 map->num_accesses = 0;
21                 map->acc_value = NULL;
22                 map->acc_index = 0;
23                 map->funcname = NULL;
24         }
25         return map;
26 }
27
28 const char *jmap_error_(struct jmap *map)
29 {
30         char *str;
31         free((char *)map->errstr);
32         map->errstr = str = malloc(100);
33         if (!map->errstr)
34                 return "out of memory";
35
36         sprintf(str,
37                 "JU_ERRNO_* == %d, ID == %d\n",
38                 JU_ERRNO(&map->err), JU_ERRID(&map->err));
39         return str;
40 }
41
42 void jmap_free(const struct jmap *map)
43 {
44         free((char *)map->errstr);
45         Judy1FreeArray((PPvoid_t)&map->judy, PJE0);
46         free((void *)map);
47 }