ksym.c 818 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <assert.h>
  5. #include <faux/str.h>
  6. #include <faux/list.h>
  7. #include <faux/conv.h>
  8. #include <faux/error.h>
  9. #include <klish/khelper.h>
  10. #include <klish/ksym.h>
  11. struct ksym_s {
  12. char *name;
  13. ksym_fn function;
  14. };
  15. // Simple methods
  16. // Name
  17. KGET_STR(sym, name);
  18. KSET_STR_ONCE(sym, name);
  19. // Function
  20. KGET(sym, ksym_fn, function);
  21. KSET(sym, ksym_fn, function);
  22. ksym_t *ksym_new(const char *name, ksym_fn function)
  23. {
  24. ksym_t *sym = NULL;
  25. if (faux_str_is_empty(name))
  26. return NULL;
  27. sym = faux_zmalloc(sizeof(*sym));
  28. assert(sym);
  29. if (!sym)
  30. return NULL;
  31. // Initialize
  32. sym->name = faux_str_dup(name);
  33. sym->function = function;
  34. return sym;
  35. }
  36. void ksym_free(ksym_t *sym)
  37. {
  38. if (!sym)
  39. return;
  40. faux_str_free(sym->name);
  41. faux_free(sym);
  42. }