jbitset.c 1015 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. struct jbitset *jbit_new(void)
  7. {
  8. struct jbitset *set;
  9. /* Judy uses Word_t, we use unsigned long directly. */
  10. BUILD_ASSERT(sizeof(unsigned long) == sizeof(Word_t));
  11. /* We pack pointers into jbitset (in jbitset_type.h) */
  12. BUILD_ASSERT(sizeof(Word_t) >= sizeof(void *));
  13. set = malloc(sizeof(*set));
  14. if (set) {
  15. set->judy = NULL;
  16. memset(&set->err, 0, sizeof(set->err));
  17. set->errstr = NULL;
  18. }
  19. return set;
  20. }
  21. const char *jbit_error_(struct jbitset *set)
  22. {
  23. char *str;
  24. free((char *)set->errstr);
  25. set->errstr = str = malloc(100);
  26. if (!set->errstr)
  27. return "out of memory";
  28. sprintf(str,
  29. "JU_ERRNO_* == %d, ID == %d\n",
  30. JU_ERRNO(&set->err), JU_ERRID(&set->err));
  31. return str;
  32. }
  33. void jbit_free(const struct jbitset *set)
  34. {
  35. free((char *)set->errstr);
  36. Judy1FreeArray((PPvoid_t)&set->judy, PJE0);
  37. free((void *)set);
  38. }