diff options
Diffstat (limited to 'xc/programs/Xserver/hw/xfree86/common/xf86Option.c')
-rw-r--r-- | xc/programs/Xserver/hw/xfree86/common/xf86Option.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/xc/programs/Xserver/hw/xfree86/common/xf86Option.c b/xc/programs/Xserver/hw/xfree86/common/xf86Option.c index 538514de8..122d10b8f 100644 --- a/xc/programs/Xserver/hw/xfree86/common/xf86Option.c +++ b/xc/programs/Xserver/hw/xfree86/common/xf86Option.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Option.c,v 1.15 2000/06/20 05:08:45 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Option.c,v 1.20 2000/08/09 20:33:20 tsi Exp $ */ /* * Copyright (c) 1998 by The XFree86 Project, Inc. @@ -183,11 +183,36 @@ xf86SetBoolOption(pointer optlist, const char *name, int deflt) return deflt; } +/* + * addNewOption() has the required property of replacing the option value + * it the option is alread present. + */ +pointer +xf86ReplaceIntOption(pointer optlist, char *name, int val) +{ + char *tmp = xnfalloc(16); + sprintf(tmp,"%i",val); + return xf86AddNewOption(optlist,name,tmp); +} + +pointer +xf86ReplaceBoolOption(pointer optlist, char *name, Bool val) +{ + return xf86AddNewOption(optlist,name,(Bool)val?"True":"False"); +} + +pointer +xf86ReplaceStrOption(pointer optlist, char *name, char* val) +{ + return xf86AddNewOption(optlist,name,val); +} pointer xf86AddNewOption(pointer head, char *name, char *val) { - return addNewOption(head, name, val); + char *tmp = strdup(val); + + return addNewOption(head, name, tmp); } @@ -424,32 +449,37 @@ ParseOptionValue(int scrnIndex, pointer options, OptionInfoPtr p) p->name); p->found = FALSE; } else { - p->value.freq.freq = strtod(s, &end); - p->value.freq.units = 0; + double freq = strtod(s, &end); + int units = 0; + if (end != s) { p->found = TRUE; if (!xf86NameCmp(end, "Hz")) - p->value.freq.units = 1; + units = 1; else if (!xf86NameCmp(end, "kHz") || !xf86NameCmp(end, "k")) - p->value.freq.units = 1000; + units = 1000; else if (!xf86NameCmp(end, "MHz") || !xf86NameCmp(end, "M")) - p->value.freq.units = 1000000; + units = 1000000; else { xf86DrvMsg(scrnIndex, X_WARNING, "Option \"%s\" requires a frequency value\n", p->name); p->found = FALSE; } - if (p->found && p->value.freq.units > 0) - p->value.freq.freq *= (double)p->value.freq.units; + if (p->found) + freq *= (double)units; } else { xf86DrvMsg(scrnIndex, X_WARNING, "Option \"%s\" requires a frequency value\n", p->name); p->found = FALSE; } + if (p->found) { + p->value.freq.freq = freq; + p->value.freq.units = units; + } } break; case OPTV_NONE: |