*
* @{
*/
-int fr_dict_attr_add(fr_dict_t *dict, fr_dict_attr_t const *parent, char const *name, int attr,
+int fr_dict_attr_add(fr_dict_t const *dict, fr_dict_attr_t const *parent, char const *name, int attr,
fr_type_t type, fr_dict_attr_flags_t const *flags) CC_HINT(nonnull(1,2,3));
int fr_dict_enum_add_alias(fr_dict_attr_t const *da, char const *alias,
int fr_dict_protocol_afrom_file(fr_dict_t **out, char const *proto_name, char const *proto_dir);
-int fr_dict_read(fr_dict_t *dict, char const *dict_dir, char const *filename);
+int fr_dict_read(fr_dict_t const *dict, char const *dict_dir, char const *filename);
/** @} */
/** @name Autoloader interface
* - 0 on success.
* - -1 on failure.
*/
-int fr_dict_read(fr_dict_t *dict, char const *dir, char const *filename)
+int fr_dict_read(fr_dict_t const *dict, char const *dir, char const *filename)
{
+ fr_dict_t *mutable;
INTERNAL_IF_NULL(dict, -1);
if (!dict->attributes_by_name) {
return -1;
}
- return dict_from_file(dict, dir, filename, NULL, 0);
+ memcpy(&mutable, &dict, sizeof(dict));
+ return dict_from_file(mutable, dir, filename, NULL, 0);
}
/*
/** Add an attribute to the dictionary
*
- * @param[in] dict of protocol context we're operating in.
+ * @param[in] const_dict of protocol context we're operating in.
* If NULL the internal dictionary will be used.
* @param[in] parent to add attribute under.
* @param[in] name of the attribute.
* - 0 on success.
* - -1 on failure.
*/
-int fr_dict_attr_add(fr_dict_t *dict, fr_dict_attr_t const *parent,
+int fr_dict_attr_add(fr_dict_t const *const_dict, fr_dict_attr_t const *parent,
char const *name, int attr, fr_type_t type, fr_dict_attr_flags_t const *flags)
{
fr_dict_attr_t *n;
fr_dict_attr_t const *old;
fr_dict_attr_t *mutable;
fr_dict_attr_flags_t our_flags = *flags;
+ fr_dict_t *dict;
+
+ memcpy(&dict, &const_dict, sizeof(const_dict)); /* const issues */
/*
* Check that the definition is valid.
*/
void fr_dict_autofree(fr_dict_autoload_t const *to_free)
{
- fr_dict_t **dict;
+ fr_dict_t const **dict;
fr_dict_autoload_t const *p;
for (p = to_free; p->out; p++) {
+ fr_dict_t **mutable;
dict = p->out;
if (!*dict) continue;
- fr_dict_free(dict);
+ memcpy(&mutable, &dict, sizeof(dict)); /* const issues */
+
+ fr_dict_free(mutable);
}
}