jmap.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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_(size_t size)
  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. assert(size >= sizeof(*map));
  14. map = malloc(size);
  15. if (map) {
  16. map->judy = NULL;
  17. memset(&map->err, 0, sizeof(map->err));
  18. map->errstr = NULL;
  19. map->num_accesses = 0;
  20. map->acc_value = NULL;
  21. map->acc_index = 0;
  22. map->funcname = NULL;
  23. }
  24. return map;
  25. }
  26. const char *jmap_error_str_(struct jmap *map)
  27. {
  28. char *str;
  29. free((char *)map->errstr);
  30. map->errstr = str = malloc(100);
  31. if (!map->errstr)
  32. return "out of memory";
  33. sprintf(str,
  34. "JU_ERRNO_* == %d, ID == %d\n",
  35. JU_ERRNO(&map->err), JU_ERRID(&map->err));
  36. return str;
  37. }
  38. void jmap_free_(const struct jmap *map)
  39. {
  40. free((char *)map->errstr);
  41. JudyLFreeArray((PPvoid_t)&map->judy, PJE0);
  42. free((void *)map);
  43. }