From 693e92d4049ee76d074737480f3fc1bb236f4278 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 10 Sep 2010 09:54:33 +1000 Subject: [PATCH] xfree86: add xf86OptionListDuplicate() Does what it says on the box. Some drivers need to duplicate option lists from the original device to ensure that devices created by the driver (driver-internal hotplugging) have the same list of options as the original device. Signed-off-by: Peter Hutterer Reviewed-by: Fernando Carrijo Reviewed-by: Tiago Vignatti --- hw/xfree86/common/xf86Opt.h | 1 + hw/xfree86/common/xf86Option.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/hw/xfree86/common/xf86Opt.h b/hw/xfree86/common/xf86Opt.h index d75d3bf87..9453f2a73 100644 --- a/hw/xfree86/common/xf86Opt.h +++ b/hw/xfree86/common/xf86Opt.h @@ -84,6 +84,7 @@ extern _X_EXPORT pointer xf86NewOption(char *name, char *value ); extern _X_EXPORT pointer xf86NextOption(pointer list ); extern _X_EXPORT pointer xf86OptionListCreate(const char **options, int count, int used); extern _X_EXPORT pointer xf86OptionListMerge(pointer head, pointer tail); +extern _X_EXPORT pointer xf86OptionListDuplicate(pointer list); extern _X_EXPORT void xf86OptionListFree(pointer opt); extern _X_EXPORT char *xf86OptionName(pointer opt); extern _X_EXPORT char *xf86OptionValue(pointer opt); diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c index 7ca2fdd79..af39b2b5a 100644 --- a/hw/xfree86/common/xf86Option.c +++ b/hw/xfree86/common/xf86Option.c @@ -136,6 +136,25 @@ xf86CollectInputOptions(InputInfoPtr pInfo, const char **defaultOpts) } } +/** + * Duplicate the option list passed in. The returned pointer will be a newly + * allocated option list and must be freed by the caller. + */ +pointer +xf86OptionListDuplicate(pointer options) +{ + pointer o = NULL; + + while (options) + { + o = xf86AddNewOption(o, xf86OptionName(options), xf86OptionValue(options)); + options = xf86nextOption(options); + } + + return o; +} + + /* Created for new XInput stuff -- essentially extensions to the parser */ static int