jmap.c 1.0 KB

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