kplugin.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /** @file kplugin.h
  2. *
  3. * @brief Klish scheme's "plugin" entry
  4. */
  5. #ifndef _klish_kplugin_h
  6. #define _klish_kplugin_h
  7. #include <stdint.h>
  8. #include <faux/error.h>
  9. #include <klish/ksym.h>
  10. // Current API version
  11. #define KPLUGIN_MAJOR 1
  12. #define KPLUGIN_MINOR 0
  13. // Shared object filename template. Insert plugin ID or plugin "name" field
  14. // instead "%s". Consider plugin ID as an "internal native name". The "name"
  15. // field can differ from ID and it's just used within scheme to refer plugin.
  16. // Consider it as alias of ID.
  17. #define KPLUGIN_SONAME_FMT "kplugin_%s.so"
  18. // Plugin's API version symbols
  19. #define KPLUGIN_MAJOR_FMT "kplugin_%s_major"
  20. #define KPLUGIN_MINOR_FMT "kplugin_%s_minor"
  21. // Plugin's init and fini functions
  22. #define KPLUGIN_INIT_FMT "kplugin_%s_init"
  23. #define KPLUGIN_FINI_FMT "kplugin_%s_fini"
  24. typedef struct kplugin_s kplugin_t;
  25. typedef struct iplugin_s {
  26. char *name;
  27. char *id;
  28. char *file;
  29. char *global;
  30. char *conf;
  31. } iplugin_t;
  32. typedef enum {
  33. KPLUGIN_ERROR_OK,
  34. KPLUGIN_ERROR_INTERNAL,
  35. KPLUGIN_ERROR_ALLOC,
  36. KPLUGIN_ERROR_ATTR_NAME,
  37. KPLUGIN_ERROR_ATTR_ID,
  38. KPLUGIN_ERROR_ATTR_FILE,
  39. KPLUGIN_ERROR_ATTR_GLOBAL,
  40. KPLUGIN_ERROR_ATTR_CONF,
  41. } kplugin_error_e;
  42. C_DECL_BEGIN
  43. // iplugin_t
  44. char *iplugin_to_text(const iplugin_t *iplugin, int level);
  45. // kplugin_t
  46. void kplugin_free(kplugin_t *plugin);
  47. bool_t kplugin_parse(kplugin_t *plugin, const iplugin_t *info, kplugin_error_e *error);
  48. kplugin_t *kplugin_new(const iplugin_t *info, kplugin_error_e *error);
  49. const char *kplugin_strerror(kplugin_error_e error);
  50. const char *kplugin_name(const kplugin_t *plugin);
  51. bool_t kplugin_set_name(kplugin_t *plugin, const char *name);
  52. const char *kplugin_id(const kplugin_t *plugin);
  53. bool_t kplugin_set_id(kplugin_t *plugin, const char *id);
  54. const char *kplugin_file(const kplugin_t *plugin);
  55. bool_t kplugin_set_file(kplugin_t *plugin, const char *file);
  56. bool_t kplugin_global(const kplugin_t *plugin);
  57. bool_t kplugin_set_global(kplugin_t *plugin, bool_t global);
  58. const char *kplugin_conf(const kplugin_t *plugin);
  59. bool_t kplugin_set_conf(kplugin_t *plugin, const char *conf);
  60. uint8_t kplugin_major(const kplugin_t *plugin);
  61. bool_t kplugin_set_major(kplugin_t *plugin, uint8_t major);
  62. uint8_t kplugin_minor(const kplugin_t *plugin);
  63. bool_t kplugin_set_minor(kplugin_t *plugin, uint8_t minor);
  64. void *kplugin_udata(const kplugin_t *plugin);
  65. bool_t kplugin_set_udata(kplugin_t *plugin, void *udata);
  66. bool_t kplugin_add_sym(kplugin_t *plugin, ksym_t *sym);
  67. ksym_t *kplugin_find_sym(const kplugin_t *plugin, const char *name);
  68. kplugin_t *kplugin_from_iplugin(iplugin_t *iplugin, faux_error_t *error_stack);
  69. C_DECL_END
  70. #endif // _klish_kplugin_h