[PATCH v4 1/3] xfree86: Support non-Option boolean entries in configuration
Peter Hutterer
peter.hutterer at who-t.net
Mon Dec 21 22:44:59 PST 2009
On Mon, Dec 21, 2009 at 12:29:01PM -0800, Dan Nicholson wrote:
> Refactored code into the parser to allow the freeform boolean types used
> in Option entries to be used in other configuration entries. This isn't
> as powerful as allowing "No" to precede the option names, but it atleast
> gives a common handling of "yes", "no", etc.
>
> A type xf86TriState has been added to support an optional boolean. This
> allows the boolean sense of the value to be kept while providing a means
> to signal that it is unset.
>
> Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
> ---
> hw/xfree86/common/xf86Option.c | 25 ++-----------------------
> hw/xfree86/parser/Configint.h | 2 ++
> hw/xfree86/parser/scan.c | 30 ++++++++++++++++++++++++++++++
> hw/xfree86/parser/xf86Parser.h | 9 +++++++++
> 4 files changed, 43 insertions(+), 23 deletions(-)
>
> diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
> index ad8d1c4..a2868bf 100644
> --- a/hw/xfree86/common/xf86Option.c
> +++ b/hw/xfree86/common/xf86Option.c
> @@ -42,6 +42,7 @@
> #include "xf86.h"
> #include "xf86Xinput.h"
> #include "xf86Optrec.h"
> +#include "xf86Parser.h"
>
> static Bool ParseOptionValue(int scrnIndex, pointer options, OptionInfoPtr p,
> Bool markUsed);
> @@ -456,29 +457,7 @@ xf86ShowUnusedOptions(int scrnIndex, pointer options)
> static Bool
> GetBoolValue(OptionInfoPtr p, const char *s)
> {
> - if (*s == '\0') {
> - p->value.bool = TRUE;
> - } else {
> - if (xf86NameCmp(s, "1") == 0)
> - p->value.bool = TRUE;
> - else if (xf86NameCmp(s, "on") == 0)
> - p->value.bool = TRUE;
> - else if (xf86NameCmp(s, "true") == 0)
> - p->value.bool = TRUE;
> - else if (xf86NameCmp(s, "yes") == 0)
> - p->value.bool = TRUE;
> - else if (xf86NameCmp(s, "0") == 0)
> - p->value.bool = FALSE;
> - else if (xf86NameCmp(s, "off") == 0)
> - p->value.bool = FALSE;
> - else if (xf86NameCmp(s, "false") == 0)
> - p->value.bool = FALSE;
> - else if (xf86NameCmp(s, "no") == 0)
> - p->value.bool = FALSE;
> - else
> - return FALSE;
> - }
> - return TRUE;
> + return xf86getBoolValue(&p->value.bool, s);
> }
>
> static Bool
> diff --git a/hw/xfree86/parser/Configint.h b/hw/xfree86/parser/Configint.h
> index cdc7be8..03509b3 100644
> --- a/hw/xfree86/parser/Configint.h
> +++ b/hw/xfree86/parser/Configint.h
> @@ -148,6 +148,8 @@ else\
> "The %s keyword requires a number to follow it."
> #define POSITIVE_INT_MSG \
> "The %s keyword requires a positive integer to follow it."
> +#define BOOL_MSG \
> +"The %s keyword requires a boolean to follow it."
> #define ZAXISMAPPING_MSG \
> "The ZAxisMapping keyword requires 2 positive numbers or X or Y to follow it."
> #define AUTOREPEAT_MSG \
> diff --git a/hw/xfree86/parser/scan.c b/hw/xfree86/parser/scan.c
> index d2e8b6d..270dbd5 100644
> --- a/hw/xfree86/parser/scan.c
> +++ b/hw/xfree86/parser/scan.c
> @@ -1028,3 +1028,33 @@ xf86addComment(char *cur, char *add)
>
> return (cur);
> }
> +
> +Bool
> +xf86getBoolValue(Bool *val, const char *str)
> +{
> + if (!val || !str)
> + return FALSE;
> + if (*str == '\0') {
> + *val = TRUE;
> + } else {
> + if (strcmp(str, "1") == 0)
> + *val = TRUE;
> + else if (strcmp(str, "on") == 0)
> + *val = TRUE;
> + else if (strcmp(str, "true") == 0)
> + *val = TRUE;
> + else if (strcmp(str, "yes") == 0)
> + *val = TRUE;
> + else if (strcmp(str, "0") == 0)
> + *val = FALSE;
> + else if (strcmp(str, "off") == 0)
> + *val = FALSE;
> + else if (strcmp(str, "false") == 0)
> + *val = FALSE;
> + else if (strcmp(str, "no") == 0)
> + *val = FALSE;
> + else
> + return FALSE;
> + }
> + return TRUE;
> +}
> diff --git a/hw/xfree86/parser/xf86Parser.h b/hw/xfree86/parser/xf86Parser.h
> index 6030800..72beb5f 100644
> --- a/hw/xfree86/parser/xf86Parser.h
> +++ b/hw/xfree86/parser/xf86Parser.h
> @@ -64,6 +64,7 @@
> #ifndef _xf86Parser_h_
> #define _xf86Parser_h_
>
> +#include <X11/Xdefs.h>
> #include "xf86Optrec.h"
>
> #define HAVE_PARSER_DECLS
> @@ -330,6 +331,13 @@ typedef struct
> }
> XF86ConfInputrefRec, *XF86ConfInputrefPtr;
>
> +typedef struct
> +{
> + Bool set;
> + Bool val;
> +}
> +xf86TriState;
> +
> /* Values for adj_where */
> #define CONF_ADJ_OBSOLETE -1
> #define CONF_ADJ_ABSOLUTE 0
> @@ -480,5 +488,6 @@ extern _X_EXPORT int xf86itemNotSublist(GenericListPtr list_1, GenericListPtr li
> extern _X_EXPORT int xf86pathIsAbsolute(const char *path);
> extern _X_EXPORT int xf86pathIsSafe(const char *path);
> extern _X_EXPORT char *xf86addComment(char *cur, char *add);
> +extern _X_EXPORT Bool xf86getBoolValue(Bool *val, const char *str);
I _think_ these ones are non-exportable as well - future patch.
>
> #endif /* _xf86Parser_h_ */
> --
> 1.6.2.5
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
Cheers,
Peter
More information about the xorg-devel
mailing list