/* * action.c * * This file provides the implementation of a action definition */ #include #include #include #include #include "private.h" #include "lub/bintree.h" #include "lub/string.h" /*--------------------------------------------------------- * PRIVATE METHODS *--------------------------------------------------------- */ static void clish_action_init(clish_action_t *this) { this->script = NULL; this->builtin = NULL; this->shebang = NULL; } /*--------------------------------------------------------- */ static void clish_action_fini(clish_action_t *this) { lub_string_free(this->script); lub_string_free(this->builtin); lub_string_free(this->shebang); } /*--------------------------------------------------------- * PUBLIC META FUNCTIONS *--------------------------------------------------------- */ clish_action_t *clish_action_new(void) { clish_action_t *this = malloc(sizeof(clish_action_t)); if (this) clish_action_init(this); return this; } /*--------------------------------------------------------- * PUBLIC METHODS *--------------------------------------------------------- */ void clish_action_delete(clish_action_t *this) { clish_action_fini(this); free(this); } /*--------------------------------------------------------- * PUBLIC ATTRIBUTES *--------------------------------------------------------- */ void clish_action__set_script(clish_action_t *this, const char *script) { if (this->script) lub_string_free(this->script); this->script = lub_string_dup(script); } /*--------------------------------------------------------- */ char *clish_action__get_script(const clish_action_t *this) { return this->script; } /*--------------------------------------------------------- */ void clish_action__set_builtin(clish_action_t *this, const char *builtin) { if (this->builtin) lub_string_free(this->builtin); this->builtin = lub_string_dup(builtin); } /*--------------------------------------------------------- */ const char *clish_action__get_builtin(const clish_action_t *this) { return this->builtin; } /*--------------------------------------------------------- */ void clish_action__set_shebang(clish_action_t *this, const char *shebang) { const char *prog = shebang; const char *prefix = "#!"; if (this->shebang) lub_string_free(this->shebang); if (lub_string_nocasestr(shebang, prefix) == shebang) prog += strlen(prefix); this->shebang = lub_string_dup(prog); } /*--------------------------------------------------------- */ const char *clish_action__get_shebang(const clish_action_t *this) { return this->shebang; }