/** * Obtain a pointer to the storage allocated for a parameter. * * @param param The parameter whose storage is sought. * @return A pointer to the parameter value, or NULL * if the parameter does not exist. */ static const void * param_get_value_ptr(param_t param) { const void *result = NULL; param_assert_locked(); if (handle_in_range(param)) { const union param_value_u *v; /* work out whether we're fetching the default or a written value */ struct param_wbuf_s *s = param_find_changed(param); if (s != NULL) { v = &s->val; } else { v = ¶m_info_base[param].val; } if (param_type(param) >= PARAM_TYPE_STRUCT && param_type(param) <= PARAM_TYPE_STRUCT_MAX) { result = v->p; } else { result = v; } } return result; }
/** * Locate the modified parameter structure for a parameter, if it exists. * * @param param The parameter being searched. * @return The structure holding the modified value, or * NULL if the parameter has not been modified. */ static struct param_wbuf_s * param_find_changed(param_t param) { struct param_wbuf_s *s = NULL; param_assert_locked(); if (param_values != NULL) { #if 0 /* utarray_find requires bsearch, not available */ struct param_wbuf_s key; key.param = param; s = utarray_find(param_values, &key, param_compare_values); #else while ((s = (struct param_wbuf_s *)utarray_next(param_values, s)) != NULL) { if (s->param == param) { break; } } #endif } return s; }
/** * Locate the modified parameter structure for a parameter, if it exists. * * @param param The parameter being searched. * @return The structure holding the modified value, or * NULL if the parameter has not been modified. */ static struct param_wbuf_s * param_find_changed(param_t param) { struct param_wbuf_s *s = NULL; param_assert_locked(); if (param_values != NULL) { struct param_wbuf_s key; key.param = param; s = utarray_find(param_values, &key, param_compare_values); } return s; }
/** * Locate the modified parameter structure for a parameter, if it exists. * * @param param The parameter being searched. * @return The structure holding the modified value, or * NULL if the parameter has not been modified. */ struct param_wbuf_s * param_find_changed(param_t param) { struct param_wbuf_s *s = NULL; param_assert_locked(); if (param_values != NULL) { while ((s = (struct param_wbuf_s *)utarray_next(param_values, s)) != NULL) { if (s->param == param) { break; } } } return s; }