verb: fix memory leaks
This commit is contained in:
@@ -124,6 +124,8 @@ FX_TYPE_CLASS_DECLARATION_BEGIN(bshell_verb)
|
|||||||
FX_TYPE_CLASS_DECLARATION_END(bshell_verb)
|
FX_TYPE_CLASS_DECLARATION_END(bshell_verb)
|
||||||
|
|
||||||
extern enum bshell_status bshell_init_all_verbs(void);
|
extern enum bshell_status bshell_init_all_verbs(void);
|
||||||
|
extern enum bshell_status bshell_cleanup_all_verbs(void);
|
||||||
|
|
||||||
extern fx_hashtable *bshell_get_all_verbs(void);
|
extern fx_hashtable *bshell_get_all_verbs(void);
|
||||||
extern bshell_verb *bshell_verb_get_by_id(enum bshell_verb_id id);
|
extern bshell_verb *bshell_verb_get_by_id(enum bshell_verb_id id);
|
||||||
extern bshell_verb *bshell_verb_get_by_name(const char *name);
|
extern bshell_verb *bshell_verb_get_by_name(const char *name);
|
||||||
|
|||||||
+34
-24
@@ -25,9 +25,8 @@ bshell_verb *bshell_verb_create(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct bshell_verb_p *verb_p = fx_object_get_private(
|
struct bshell_verb_p *verb_p
|
||||||
verb,
|
= fx_object_get_private(verb, BSHELL_TYPE_VERB);
|
||||||
BSHELL_TYPE_VERB);
|
|
||||||
|
|
||||||
verb_p->v_id = id;
|
verb_p->v_id = id;
|
||||||
verb_p->v_name = name;
|
verb_p->v_name = name;
|
||||||
@@ -75,9 +74,8 @@ static fx_status get_name(
|
|||||||
{
|
{
|
||||||
bshell_verb *verb = NULL;
|
bshell_verb *verb = NULL;
|
||||||
fx_value_get_object(verb_v, &verb);
|
fx_value_get_object(verb_v, &verb);
|
||||||
struct bshell_verb_p *verb_p = fx_object_get_private(
|
struct bshell_verb_p *verb_p
|
||||||
verb,
|
= fx_object_get_private(verb, BSHELL_TYPE_VERB);
|
||||||
BSHELL_TYPE_VERB);
|
|
||||||
|
|
||||||
*out = FX_CSTR(verb_p->v_name);
|
*out = FX_CSTR(verb_p->v_name);
|
||||||
return FX_SUCCESS;
|
return FX_SUCCESS;
|
||||||
@@ -90,9 +88,8 @@ static fx_status get_alias_prefix(
|
|||||||
{
|
{
|
||||||
bshell_verb *verb = NULL;
|
bshell_verb *verb = NULL;
|
||||||
fx_value_get_object(verb_v, &verb);
|
fx_value_get_object(verb_v, &verb);
|
||||||
struct bshell_verb_p *verb_p = fx_object_get_private(
|
struct bshell_verb_p *verb_p
|
||||||
verb,
|
= fx_object_get_private(verb, BSHELL_TYPE_VERB);
|
||||||
BSHELL_TYPE_VERB);
|
|
||||||
*out = FX_CSTR(verb_p->v_alias_prefix);
|
*out = FX_CSTR(verb_p->v_alias_prefix);
|
||||||
return FX_SUCCESS;
|
return FX_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -104,9 +101,8 @@ static fx_status get_group(
|
|||||||
{
|
{
|
||||||
bshell_verb *verb = NULL;
|
bshell_verb *verb = NULL;
|
||||||
fx_value_get_object(verb_v, &verb);
|
fx_value_get_object(verb_v, &verb);
|
||||||
struct bshell_verb_p *verb_p = fx_object_get_private(
|
struct bshell_verb_p *verb_p
|
||||||
verb,
|
= fx_object_get_private(verb, BSHELL_TYPE_VERB);
|
||||||
BSHELL_TYPE_VERB);
|
|
||||||
*out = FX_CSTR(verb_p->v_group);
|
*out = FX_CSTR(verb_p->v_group);
|
||||||
return FX_SUCCESS;
|
return FX_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -118,13 +114,17 @@ static fx_status get_description(
|
|||||||
{
|
{
|
||||||
bshell_verb *verb = NULL;
|
bshell_verb *verb = NULL;
|
||||||
fx_value_get_object(verb_v, &verb);
|
fx_value_get_object(verb_v, &verb);
|
||||||
struct bshell_verb_p *verb_p = fx_object_get_private(
|
struct bshell_verb_p *verb_p
|
||||||
verb,
|
= fx_object_get_private(verb, BSHELL_TYPE_VERB);
|
||||||
BSHELL_TYPE_VERB);
|
|
||||||
*out = FX_CSTR(verb_p->v_description);
|
*out = FX_CSTR(verb_p->v_description);
|
||||||
return FX_SUCCESS;
|
return FX_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void verb_fini(fx_object *obj, void *priv)
|
||||||
|
{
|
||||||
|
struct bshell_verb_p *verb = priv;
|
||||||
|
}
|
||||||
|
|
||||||
FX_TYPE_CLASS_BEGIN(bshell_verb)
|
FX_TYPE_CLASS_BEGIN(bshell_verb)
|
||||||
FX_TYPE_VTABLE_INTERFACE_BEGIN(fx_object, FX_TYPE_OBJECT)
|
FX_TYPE_VTABLE_INTERFACE_BEGIN(fx_object, FX_TYPE_OBJECT)
|
||||||
FX_INTERFACE_ENTRY(to_string) = NULL;
|
FX_INTERFACE_ENTRY(to_string) = NULL;
|
||||||
@@ -143,6 +143,7 @@ FX_TYPE_DEFINITION_BEGIN(bshell_verb)
|
|||||||
FX_TYPE_NAME("bshell.verb");
|
FX_TYPE_NAME("bshell.verb");
|
||||||
FX_TYPE_CLASS(bshell_verb_class);
|
FX_TYPE_CLASS(bshell_verb_class);
|
||||||
FX_TYPE_INSTANCE_PRIVATE(struct bshell_verb_p);
|
FX_TYPE_INSTANCE_PRIVATE(struct bshell_verb_p);
|
||||||
|
FX_TYPE_INSTANCE_FINI(verb_fini);
|
||||||
FX_TYPE_DEFINITION_END(bshell_verb)
|
FX_TYPE_DEFINITION_END(bshell_verb)
|
||||||
|
|
||||||
static fx_hashtable *all_verbs_by_name = NULL;
|
static fx_hashtable *all_verbs_by_name = NULL;
|
||||||
@@ -405,18 +406,18 @@ enum bshell_status bshell_init_all_verbs(void)
|
|||||||
"dc",
|
"dc",
|
||||||
"Communications",
|
"Communications",
|
||||||
"Breaks the link between a source and a destination");
|
"Breaks the link between a source and a destination");
|
||||||
PUT_VERB(
|
|
||||||
READ,
|
|
||||||
"Read",
|
|
||||||
"rd",
|
|
||||||
"Communications",
|
|
||||||
"Acquires information from a source");
|
|
||||||
PUT_VERB(
|
PUT_VERB(
|
||||||
RECEIVE,
|
RECEIVE,
|
||||||
"Receive",
|
"Receive",
|
||||||
"rc",
|
"rc",
|
||||||
"Communications",
|
"Communications",
|
||||||
"Accepts information sent from a source");
|
"Accepts information sent from a source");
|
||||||
|
PUT_VERB(
|
||||||
|
READ,
|
||||||
|
"Read",
|
||||||
|
"rd",
|
||||||
|
"Communications",
|
||||||
|
"Acquires information from a source");
|
||||||
PUT_VERB(
|
PUT_VERB(
|
||||||
SEND,
|
SEND,
|
||||||
"Send",
|
"Send",
|
||||||
@@ -788,6 +789,16 @@ enum bshell_status bshell_init_all_verbs(void)
|
|||||||
return BSHELL_SUCCESS;
|
return BSHELL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum bshell_status bshell_cleanup_all_verbs(void)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < __BSHELL_VERB_MAX; i++) {
|
||||||
|
all_verbs_by_id[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fx_hashtable_unref(all_verbs_by_name);
|
||||||
|
return BSHELL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
fx_hashtable *bshell_get_all_verbs(void)
|
fx_hashtable *bshell_get_all_verbs(void)
|
||||||
{
|
{
|
||||||
return all_verbs_by_name;
|
return all_verbs_by_name;
|
||||||
@@ -804,9 +815,8 @@ bshell_verb *bshell_verb_get_by_id(enum bshell_verb_id id)
|
|||||||
|
|
||||||
bshell_verb *bshell_verb_get_by_name(const char *name)
|
bshell_verb *bshell_verb_get_by_name(const char *name)
|
||||||
{
|
{
|
||||||
const fx_value *val = fx_hashtable_get(
|
const fx_value *val
|
||||||
all_verbs_by_name,
|
= fx_hashtable_get(all_verbs_by_name, &FX_CSTR(name));
|
||||||
&FX_CSTR(name));
|
|
||||||
if (!val) {
|
if (!val) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user