kaction.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 <klish/kaction.h>
  8. struct kaction_s {
  9. bool_t is_static;
  10. kaction_error_e error;
  11. iaction_t info;
  12. faux_list_t *commands;
  13. };
  14. static kaction_t *kaction_new_internal(iaction_t info, bool_t is_static)
  15. {
  16. kaction_t *action = NULL;
  17. action = faux_zmalloc(sizeof(*action));
  18. assert(action);
  19. if (!action)
  20. return NULL;
  21. // Initialize
  22. action->is_static = is_static;
  23. action->error = KACTION_ERROR_OK;
  24. action->info = info;
  25. return action;
  26. }
  27. kaction_t *kaction_new(iaction_t info)
  28. {
  29. return kaction_new_internal(info, BOOL_FALSE);
  30. }
  31. kaction_t *kaction_new_static(iaction_t info)
  32. {
  33. return kaction_new_internal(info, BOOL_TRUE);
  34. }
  35. void kaction_free(kaction_t *action)
  36. {
  37. if (!action)
  38. return;
  39. if (!action->is_static) {
  40. faux_str_free(action->info.sym);
  41. }
  42. faux_free(action);
  43. }
  44. const char *kaction_sym_str(const kaction_t *action)
  45. {
  46. assert(action);
  47. if (!action)
  48. return NULL;
  49. return action->info.sym;
  50. }