*/
void xlat_exp_set_name(xlat_exp_t *node, char const *fmt, size_t len)
{
+ fr_assert(node->fmt != fmt);
+
if (node->fmt) talloc_const_free(node->fmt);
node->fmt = talloc_bstrndup(node, fmt, len);
}
*/
void xlat_exp_set_name_buffer(xlat_exp_t *node, char const *fmt)
{
- if (node->fmt) talloc_const_free(node->fmt);
+ if (node->fmt) {
+ if (node->fmt == fmt) {
+ (void) talloc_steal(node, fmt);
+ } else {
+ talloc_const_free(node->fmt);
+ }
+ }
node->fmt = talloc_typed_strdup_buffer(node, fmt);
}
*/
void xlat_exp_set_name_buffer_shallow(xlat_exp_t *node, char const *fmt)
{
+ fr_assert(node->fmt != fmt);
+
if (node->fmt) talloc_const_free(node->fmt);
node->fmt = talloc_get_type_abort_const(fmt, char);
}