1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- * shell_udata.c
- */
- #include <assert.h>
- #include <string.h>
- #include "private.h"
- #include "clish/udata.h"
- /*-------------------------------------------------------- */
- static lub_list_node_t *find_udata_node(const clish_shell_t *this, const char *name)
- {
- lub_list_node_t *iter;
- clish_udata_t *udata;
- assert(this);
- if (!name)
- return NULL;
- for(iter = lub_list__get_head(this->udata);
- iter; iter = lub_list_node__get_next(iter)) {
- int res;
- udata = (clish_udata_t *)lub_list_node__get_data(iter);
- res = strcmp(clish_udata__get_name(udata), name);
- if (!res)
- return iter;
- if (res > 0) /* No chance to find name */
- break;
- }
- return NULL;
- }
- /*-------------------------------------------------------- */
- static clish_udata_t *find_udata(const clish_shell_t *this, const char *name)
- {
- lub_list_node_t *iter;
- if (!(iter = find_udata_node(this, name)))
- return NULL;
- return (clish_udata_t *)lub_list_node__get_data(iter);
- }
- /*-------------------------------------------------------- */
- void *clish_shell__get_udata(const clish_shell_t *this, const char *name)
- {
- clish_udata_t *udata;
- assert (this);
- udata = find_udata(this, name);
- return clish_udata__get_data(udata);
- }
- /*-------------------------------------------------------- */
- void *clish_shell__del_udata(clish_shell_t *this, const char *name)
- {
- lub_list_node_t *node = NULL;
- clish_udata_t *pdata = NULL;
- if (!this || !name)
- return NULL;
- if(!(node = find_udata_node(this, name)))
- return NULL;
- pdata = (clish_udata_t *)lub_list_node__get_data(node);
- lub_list_del(this->udata, node);
- lub_list_node_free(node);
- return clish_udata_free(pdata);
- }
- /*-------------------------------------------------------- */
- int clish_shell__set_udata(clish_shell_t *this,
- const char *name, void *data)
- {
- clish_udata_t *pdata = NULL;
- if (!this || !name)
- return -1;
- if ((pdata = find_udata(this, name))) {
- clish_udata__set_data(pdata, data);
- return 0;
- }
- if (!(pdata = clish_udata_new(name, data)))
- return -1;
- if (lub_list_add(this->udata, pdata))
- return 0;
- clish_udata_free(pdata);
- return -1;
- }
- /*-------------------------------------------------------- */
|