Added dm_debug_browse_path API to get last access path

This commit is contained in:
vdutta 2021-06-04 17:06:26 +05:30
parent 23a4d482c1
commit 4231b2cfa5
4 changed files with 44 additions and 2 deletions

View file

@ -29,6 +29,17 @@ static char library_hash[64] = {0};
static bool first_boot = false;
#endif
int dm_debug_browse_path(char *buff, size_t len)
{
if (!buff)
return -1;
// initialise with default value
buff[0] = '\0';
return dm_browse_last_access_path(buff, len);
}
int usp_fault_map(int fault)
{
int out_fault;

View file

@ -37,4 +37,21 @@ int dm_ctx_clean_sub(struct dmctx *ctx);
void load_dynamic_arrays(struct dmctx *ctx);
void free_dynamic_arrays(void);
/**
* @brief dm_debug_browse_path
*
* Debug API to get the last datamodel access object by datamodel browse
* function.
*
* @param buff Memory address to store the last access object, ownership
* of the address belongs to caller.
* @param len maximum size of buffer.
*
* @return 0, on success and -1, in case of error.
*
* @note This is debug API, mostly be useful in debugging in last datamodel
* object illegal access.
*/
int dm_debug_browse_path(char *buff, size_t len);
#endif

View file

@ -17,6 +17,10 @@
#include "dmcommon.h"
#include "dmbbf.h"
#define MAX_DM_PATH (1024)
static char dm_browse_path[MAX_DM_PATH];
static char *get_parameter_notification(struct dmctx *ctx, char *param);
static int remove_parameter_notification(char *param);
static int set_parameter_notification(struct dmctx *ctx, char *param,char *value);
@ -56,8 +60,6 @@ static int get_linker_check_param(DMPARAM_ARGS);
static int get_linker_value_check_obj(DMOBJECT_ARGS);
static int get_linker_value_check_param(DMPARAM_ARGS);
LIST_HEAD(list_enabled_notify);
int bbfdatamodel_type = BBFDM_BOTH;
struct notification notifications[] = {
@ -228,6 +230,7 @@ static int dm_browse_leaf(struct dmctx *dmctx, DMNODE *parent_node, DMLEAF *leaf
for (; (leaf && leaf->parameter); leaf++) {
if (!bbfdatamodel_matches(leaf->bbfdm_type))
continue;
snprintf(dm_browse_path, MAX_DM_PATH, "%s%s", parent_node->current_object, leaf->parameter);
err = dmctx->method_param(dmctx, parent_node, leaf->parameter, leaf->permission, leaf->type, leaf->getvalue, leaf->setvalue, data, instance);
if (dmctx->stop)
return err;
@ -243,6 +246,7 @@ static int dm_browse_leaf(struct dmctx *dmctx, DMNODE *parent_node, DMLEAF *leaf
for (; (jleaf && jleaf->parameter); jleaf++) {
if (!bbfdatamodel_matches(jleaf->bbfdm_type))
continue;
snprintf(dm_browse_path, MAX_DM_PATH, "%s%s", parent_node->current_object, jleaf->parameter);
err = dmctx->method_param(dmctx, parent_node, jleaf->parameter, jleaf->permission, jleaf->type, jleaf->getvalue, jleaf->setvalue, data, instance);
if (dmctx->stop)
return err;
@ -276,6 +280,7 @@ static void dm_browse_entry(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *ent
else
dmasprintf(&(node.current_object), "%s%s.", parent_obj, entryobj->obj);
snprintf(dm_browse_path, MAX_DM_PATH, "%s", node.current_object);
if (dmctx->checkobj) {
*err = dmctx->checkobj(dmctx, &node, entryobj->permission, entryobj->addobj, entryobj->delobj, entryobj->get_linker, data, instance);
if (*err)
@ -319,6 +324,7 @@ static int dm_browse(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj,
int err = 0;
for (; (entryobj && entryobj->obj); entryobj++) {
snprintf(dm_browse_path, MAX_DM_PATH, "%s%s", parent_obj, entryobj->obj);
dm_browse_entry(dmctx, parent_node, entryobj, data, instance, parent_obj, &err);
if (dmctx->stop)
return err;
@ -332,6 +338,7 @@ static int dm_browse(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj,
for (int j = 0; next_dyn_array->nextobj[j]; j++) {
DMOBJ *jentryobj = next_dyn_array->nextobj[j];
for (; (jentryobj && jentryobj->obj); jentryobj++) {
snprintf(dm_browse_path, MAX_DM_PATH, "%s%s", parent_obj, jentryobj->obj);
dm_browse_entry(dmctx, parent_node, jentryobj, data, instance, parent_obj, &err);
if (dmctx->stop)
return err;
@ -1941,3 +1948,9 @@ static int get_linker_value_check_param(DMPARAM_ARGS)
{
return FAULT_9005;
}
int dm_browse_last_access_path(char *path, size_t len)
{
snprintf(path, len, "%s", dm_browse_path);
return 0;
}

View file

@ -445,6 +445,7 @@ int dm_entry_set_notification(struct dmctx *dmctx);
int dm_entry_enabled_notify(struct dmctx *dmctx);
int dm_entry_get_linker(struct dmctx *dmctx);
int dm_entry_get_linker_value(struct dmctx *dmctx);
int dm_browse_last_access_path(char *path, size_t len);
char *get_last_instance(char *package, char *section, char *opt_inst);
char *get_last_instance_bbfdm(char *package, char *section, char *opt_inst);
char *get_last_instance_lev2_bbfdm_dmmap_opt(char* dmmap_package, char *section, char *opt_inst, char *opt_check, char *value_check);