jmap.c 1.1 KB

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