mirror of
https://dev.iopsys.eu/bbf/bbfdm.git
synced 2025-12-10 07:44:39 +01:00
Added dm_debug_browse_path API to get last access path
This commit is contained in:
parent
23a4d482c1
commit
4231b2cfa5
4 changed files with 44 additions and 2 deletions
11
dmentry.c
11
dmentry.c
|
|
@ -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;
|
||||
|
|
|
|||
17
dmentry.h
17
dmentry.h
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue