From 48f0692ab973448de5faa323478d1cba3d42e2af Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sun, 20 May 2012 01:26:38 +0300 Subject: options: make option struct the talloc parent of options Allocate dynamically-allocated option values as talloc children of the option struct. This will allow implementing per-object (VO etc) options so that simply freeing the object will free associated options too. This doesn't change quite every allocation in m_option.c, but the exceptions are legacy types which will not matter for new per-object options. --- m_option.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'm_option.h') diff --git a/m_option.h b/m_option.h index 9b355ff3e0..648c560305 100644 --- a/m_option.h +++ b/m_option.h @@ -192,11 +192,12 @@ struct m_option_type { * may not be an argument meant for this option * \param dst Pointer to the memory where the data should be written. * If NULL the parameter validity should still be checked. + * talloc_ctx: talloc context if value type requires allocations * \return On error a negative value is returned, on success the number * of arguments consumed. For details see \ref OptionParserReturn. */ int (*parse)(const m_option_t *opt, struct bstr name, struct bstr param, - bool ambiguous_param, void *dst); + bool ambiguous_param, void *dst, void *talloc_ctx); // Print back a value in string form. /** \param opt The option to print. @@ -210,8 +211,10 @@ struct m_option_type { /** \param opt The option to copy. * \param dst Pointer to the destination memory. * \param src Pointer to the source memory. + * talloc_ctx: talloc context to use in deep copy */ - void (*copy)(const m_option_t *opt, void *dst, const void *src); + void (*copy)(const m_option_t *opt, void *dst, const void *src, + void *talloc_ctx); // Free the data allocated for a save slot. /** This is only needed for dynamic types like strings. @@ -385,7 +388,7 @@ static inline int m_option_parse(const m_option_t *opt, struct bstr name, struct bstr param, bool ambiguous_param, void *dst) { - return opt->type->parse(opt, name, param, ambiguous_param, dst); + return opt->type->parse(opt, name, param, ambiguous_param, dst, NULL); } // Helper to print options, see \ref m_option_type::print. @@ -402,7 +405,7 @@ static inline void m_option_copy(const m_option_t *opt, void *dst, const void *src) { if (opt->type->copy) - opt->type->copy(opt, dst, src); + opt->type->copy(opt, dst, src, NULL); } // Helper around \ref m_option_type::free. -- cgit v1.2.3