summaryrefslogtreecommitdiffstats
path: root/m_config.h
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2012-05-17 03:31:11 +0300
committerUoti Urpala <uau@mplayer2.org>2012-07-16 21:08:42 +0300
commitdc2a4863af9b0e587ac4ec3e2096639098e99a8f (patch)
tree15807fb5de256f91f730c435ab614332f12fa255 /m_config.h
parentf63dbaddb6de6add6d987dc28ca8771aca230451 (diff)
downloadmpv-dc2a4863af9b0e587ac4ec3e2096639098e99a8f.tar.bz2
mpv-dc2a4863af9b0e587ac4ec3e2096639098e99a8f.tar.xz
options: support parsing values into substructs
Add an alternate mode for option parser objects (struct m_config) which is not inherently tied to any particular instance of an option value struct. Instead, this type or parsers can be used to initialize defaults in or parse values into a struct given as a parameter. They do not have the save slot functionality used for main player configuration. The new functionality will be used to replace the separate subopt_helper.c parsing code that is currently used to parse per-object suboptions in VOs etc. Previously, option default values were handled by initializing them in external code before creating a parser. This initialization was done with constants even for dynamically-allocated types like strings. Because trying to free a pointer to a constant would cause a crash when trying to replace the default with another value, parser initialization code then replaced all the original defaults with dynamically-allocated copies. This replace-with-copy behavior is no longer supported for new-style options; instead the option definition itself may contain a default value (new OPTDEF macros), and the new function m_config_initialize() is used to set all options to their default values. Convert the existing initialized dynamically allocated options in main config (the string options --dumpfile, --term-osd-esc, --input=conf) to use this. Other non-dynamic ones could be later converted to use this style of initialization too. There's currently no public call to free all dynamically allocated options in a given option struct because I intend to use talloc functionality for that (make them children of the struct and free with it).
Diffstat (limited to 'm_config.h')
-rw-r--r--m_config.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/m_config.h b/m_config.h
index ff54aae8b2..24e80eb538 100644
--- a/m_config.h
+++ b/m_config.h
@@ -96,6 +96,7 @@ typedef struct m_config {
void *optstruct; // struct mpopts or other
int (*includefunc)(struct m_config *conf, char *filename);
+ bool full; // main config with save slot handling etc
} m_config_t;
@@ -110,6 +111,10 @@ struct m_config *
m_config_new(void *optstruct,
int includefunc(struct m_config *conf, char *filename));
+struct m_config *m_config_simple(const struct m_option *options);
+
+void m_config_initialize(struct m_config *conf, void *optstruct);
+
// Free a config object.
void m_config_free(struct m_config *config);
@@ -162,6 +167,9 @@ static inline int m_config_check_option0(struct m_config *config,
return m_config_check_option(config, bstr(name), bstr(param), ambiguous);
}
+int m_config_parse_suboptions(struct m_config *config, void *optstruct,
+ char *name, char *subopts);
+
/* Get the option matching the given name.
* \param config The config object.