libamxb  4.8.2
Bus Agnostic C API
amxb_ba_op_set_multiple.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <amxc/amxc.h>
#include <amxp/amxp.h>
#include <amxd/amxd_common.h>
#include <amxd/amxd_dm.h>
#include <amxd/amxd_path.h>
#include <amxd/amxd_object.h>
#include <amxb/amxb_be_intf.h>
#include <amxb/amxb.h>
#include "amxb_priv.h"

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 

Functions

static void amxb_filter_params (amxc_var_t *current, amxc_var_t *parameters, amxc_var_t *oparameters)
 
static void amxb_add_rollback (amxc_var_t *current, amxc_var_t *rollback)
 
static void amxb_set_result (const char *req_path, amxc_var_t *ret, amxc_var_t *sub_ret, int rv)
 
static void amxb_set_rollback (amxb_bus_ctx_t *const bus_ctx, amxc_var_t *rollback)
 
int amxb_set_multiple (amxb_bus_ctx_t *const bus_ctx, uint32_t flags, amxc_var_t *req_paths, amxc_var_t *ret, int timeout)
 Sets parameter values for multiple objects (request paths) More...
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxb_ba_op_set_multiple.c.

Function Documentation

◆ amxb_add_rollback()

static void amxb_add_rollback ( amxc_var_t *  current,
amxc_var_t *  rollback 
)
static

Definition at line 96 of file amxb_ba_op_set_multiple.c.

97  {
98 
99  amxc_var_for_each(object, current) {
100  const char* path = amxc_var_key(object);
101  amxc_var_t* data = amxc_var_get_pathf(rollback, AMXC_VAR_FLAG_DEFAULT, "'%s'", path);
102  if(data != NULL) {
103  amxc_var_delete(&object);
104  continue;
105  }
106  amxc_var_take_it(object);
107  amxc_var_set_key(rollback, path, object, AMXC_VAR_FLAG_DEFAULT);
108  }
109 }

◆ amxb_filter_params()

static void amxb_filter_params ( amxc_var_t *  current,
amxc_var_t *  parameters,
amxc_var_t *  oparameters 
)
static

Definition at line 78 of file amxb_ba_op_set_multiple.c.

80  {
81  const amxc_htable_t* htparams = amxc_var_constcast(amxc_htable_t, parameters);
82  const amxc_htable_t* htoparams = amxc_var_constcast(amxc_htable_t, oparameters);
83 
84  amxc_var_for_each(object, current) {
85  amxc_var_for_each(param, object) {
86  const char* pname = amxc_var_key(param);
87  if(amxc_htable_contains(htparams, pname) ||
88  amxc_htable_contains(htoparams, pname)) {
89  continue;
90  }
91  amxc_var_delete(&param);
92  }
93  }
94 }

◆ amxb_set_result()

static void amxb_set_result ( const char *  req_path,
amxc_var_t *  ret,
amxc_var_t *  sub_ret,
int  rv 
)
static

Definition at line 111 of file amxb_ba_op_set_multiple.c.

114  {
115  amxc_var_for_each(result, sub_ret) {
116  amxc_var_t* rp = amxc_var_add(amxc_htable_t, ret, NULL);
117  amxc_var_add_key(cstring_t, rp, "path", req_path);
118  amxc_var_add_key(uint32_t, rp, "status", rv);
119  if(!amxc_htable_is_empty(amxc_var_constcast(amxc_htable_t, result))) {
120  amxc_var_take_it(result);
121  amxc_var_set_key(rp, "result", result, AMXC_VAR_FLAG_DEFAULT);
122  }
123  }
124 }

◆ amxb_set_rollback()

static void amxb_set_rollback ( amxb_bus_ctx_t *const  bus_ctx,
amxc_var_t *  rollback 
)
static

Definition at line 126 of file amxb_ba_op_set_multiple.c.

127  {
128  amxc_var_t ret;
129  amxc_var_init(&ret);
130 
131  amxc_var_for_each(params, rollback) {
132  const char* path = amxc_var_key(params);
133  amxc_var_clean(&ret);
134  amxb_set(bus_ctx, path, params, &ret, 5);
135  amxc_var_delete(&params);
136  }
137 
138  amxc_var_clean(&ret);
139 }
int amxb_set(amxb_bus_ctx_t *const bus_ctx, const char *object, amxc_var_t *values, amxc_var_t *ret, int timeout)
Sets parameter values of one single object or of multiple instance objects.
static amxb_bus_ctx_t * bus_ctx
Definition: test_amxb_e2e.c:84