12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /*
- * shell_delete.c
- */
- #include <stdlib.h>
- #include <unistd.h>
- #include "private.h"
- #include "lub/string.h"
- /*--------------------------------------------------------- */
- static void clish_shell_fini(clish_shell_t * this)
- {
- clish_view_t *view;
- clish_ptype_t *ptype;
- unsigned i;
- /* delete each view held */
- while ((view = lub_bintree_findfirst(&this->view_tree))) {
- /* remove the view from the tree */
- lub_bintree_remove(&this->view_tree, view);
- /* release the instance */
- clish_view_delete(view);
- }
- /* delete each ptype held */
- while ((ptype = lub_bintree_findfirst(&this->ptype_tree))) {
- /* remove the command from the tree */
- lub_bintree_remove(&this->ptype_tree, ptype);
- /* release the instance */
- clish_ptype_delete(ptype);
- }
- /* free the textual details */
- lub_string_free(this->overview);
- lub_string_free(this->viewid);
- if (NULL != this->startup) {
- /* remove the startup command */
- clish_command_delete(this->startup);
- }
- /* clean up the file stack */
- while (BOOL_TRUE == clish_shell_pop_file(this)) {
- /* not alot do do here */
- }
- /* delete the tinyrl object */
- clish_shell_tinyrl_delete(this->tinyrl);
- /* finalize each of the pwd strings */
- for (i = 0; i < this->cfg_pwdc; i++) {
- lub_string_free(this->cfg_pwdv[i]->line);
- lub_string_free(this->cfg_pwdv[i]->viewid);
- free(this->cfg_pwdv[i]);
- }
- /* free the pwd vector */
- free(this->cfg_pwdv);
- this->cfg_pwdc = 0;
- this->cfg_pwdv = NULL;
- konf_client_free(this->client);
- /* Free internal params */
- clish_param_delete(this->param_depth);
- clish_param_delete(this->param_pwd);
- clish_param_delete(this->param_interactive);
- lub_string_free(this->lockfile);
- lub_string_free(this->default_shebang);
- if (this->fifo_name) {
- unlink(this->fifo_name);
- lub_string_free(this->fifo_name);
- }
- /* Clear the context */
- if (this->context.completion_pargv) {
- clish_pargv_delete(this->context.completion_pargv);
- this->context.completion_pargv = NULL;
- }
- }
- /*--------------------------------------------------------- */
- void clish_shell_delete(clish_shell_t * this)
- {
- if (this->client_hooks->fini_fn) {
- /* now call the client finalisation */
- this->client_hooks->fini_fn(this);
- }
- clish_shell_fini(this);
- free(this);
- }
- /*--------------------------------------------------------- */
|