diff options
author | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
commit | 76bcc36ed305418a3ddc5752d287ede894243e1b (patch) | |
tree | bacb320c825768471ce56f058f17ce863d592376 /xorg-server/hw/xfree86/parser/Flags.c | |
parent | 7d894e32566b710952c44cbc71939ad1d9e2fa8d (diff) | |
parent | 0f834b91a4768673833ab4917e87d86c237bb1a6 (diff) | |
download | vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.gz vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.bz2 vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
pixman/pixman/pixman-mmx.c
xorg-server/Xext/shm.c
xorg-server/Xext/syncsrv.h
xorg-server/Xext/xvmain.c
xorg-server/Xi/exevents.c
xorg-server/Xi/opendev.c
xorg-server/composite/compalloc.c
xorg-server/composite/compoverlay.c
xorg-server/dix/colormap.c
xorg-server/dix/devices.c
xorg-server/dix/dispatch.c
xorg-server/dix/dixfonts.c
xorg-server/dix/eventconvert.c
xorg-server/dix/events.c
xorg-server/dix/gc.c
xorg-server/dix/getevents.c
xorg-server/dix/main.c
xorg-server/dix/privates.c
xorg-server/dix/registry.c
xorg-server/dix/resource.c
xorg-server/exa/exa_accel.c
xorg-server/exa/exa_migration_classic.c
xorg-server/exa/exa_unaccel.c
xorg-server/fb/fb.h
xorg-server/fb/fbcopy.c
xorg-server/fb/fbpixmap.c
xorg-server/glx/dispatch.h
xorg-server/glx/glapi.h
xorg-server/glx/glapi_gentable.c
xorg-server/glx/glapitable.h
xorg-server/glx/glprocs.h
xorg-server/glx/glxcmds.c
xorg-server/glx/glxcmdsswap.c
xorg-server/glx/glxdricommon.c
xorg-server/glx/glxdriswrast.c
xorg-server/glx/glxext.c
xorg-server/glx/indirect_dispatch.c
xorg-server/glx/indirect_dispatch.h
xorg-server/glx/indirect_dispatch_swap.c
xorg-server/glx/indirect_size.h
xorg-server/glx/indirect_size_get.h
xorg-server/glx/indirect_table.c
xorg-server/glx/indirect_util.c
xorg-server/glx/rensize.c
xorg-server/glx/single2swap.c
xorg-server/glx/singlepix.c
xorg-server/glx/singlepixswap.c
xorg-server/glx/singlesize.c
xorg-server/hw/dmx/dmxinit.c
xorg-server/hw/kdrive/ephyr/ephyr.c
xorg-server/hw/kdrive/ephyr/hostx.c
xorg-server/hw/kdrive/ephyr/hostx.h
xorg-server/hw/kdrive/src/kinput.c
xorg-server/hw/xfree86/common/compiler.h
xorg-server/hw/xwin/InitInput.c
xorg-server/hw/xwin/InitOutput.c
xorg-server/hw/xwin/ddraw.h
xorg-server/hw/xwin/glx/glwrap.c
xorg-server/hw/xwin/glx/indirect.c
xorg-server/hw/xwin/glx/wgl_ext_api.h
xorg-server/hw/xwin/glx/winpriv.c
xorg-server/hw/xwin/win.h
xorg-server/hw/xwin/winallpriv.c
xorg-server/hw/xwin/winauth.c
xorg-server/hw/xwin/winclipboard.h
xorg-server/hw/xwin/winclipboardinit.c
xorg-server/hw/xwin/winclipboardthread.c
xorg-server/hw/xwin/winclipboardunicode.c
xorg-server/hw/xwin/winclipboardwndproc.c
xorg-server/hw/xwin/winclipboardwrappers.c
xorg-server/hw/xwin/winclipboardxevents.c
xorg-server/hw/xwin/wincmap.c
xorg-server/hw/xwin/winconfig.c
xorg-server/hw/xwin/wincreatewnd.c
xorg-server/hw/xwin/wincursor.c
xorg-server/hw/xwin/windialogs.c
xorg-server/hw/xwin/winengine.c
xorg-server/hw/xwin/winerror.c
xorg-server/hw/xwin/wingc.c
xorg-server/hw/xwin/wingetsp.c
xorg-server/hw/xwin/winkeybd.c
xorg-server/hw/xwin/winkeybd.h
xorg-server/hw/xwin/winlayouts.h
xorg-server/hw/xwin/winmisc.c
xorg-server/hw/xwin/winmonitors.c
xorg-server/hw/xwin/winmouse.c
xorg-server/hw/xwin/winmsg.c
xorg-server/hw/xwin/winmsg.h
xorg-server/hw/xwin/winmultiwindowclass.c
xorg-server/hw/xwin/winmultiwindowicons.c
xorg-server/hw/xwin/winmultiwindowshape.c
xorg-server/hw/xwin/winmultiwindowwindow.c
xorg-server/hw/xwin/winmultiwindowwm.c
xorg-server/hw/xwin/winmultiwindowwndproc.c
xorg-server/hw/xwin/winnativegdi.c
xorg-server/hw/xwin/winpfbdd.c
xorg-server/hw/xwin/winpixmap.c
xorg-server/hw/xwin/winpolyline.c
xorg-server/hw/xwin/winprefs.c
xorg-server/hw/xwin/winprocarg.c
xorg-server/hw/xwin/winregistry.c
xorg-server/hw/xwin/winscrinit.c
xorg-server/hw/xwin/winsetsp.c
xorg-server/hw/xwin/winshaddd.c
xorg-server/hw/xwin/winshadddnl.c
xorg-server/hw/xwin/winshadgdi.c
xorg-server/hw/xwin/wintrayicon.c
xorg-server/hw/xwin/winwin32rootless.c
xorg-server/hw/xwin/winwin32rootlesswindow.c
xorg-server/hw/xwin/winwin32rootlesswndproc.c
xorg-server/hw/xwin/winwindow.c
xorg-server/hw/xwin/winwindow.h
xorg-server/hw/xwin/winwindowswm.c
xorg-server/hw/xwin/winwndproc.c
xorg-server/include/callback.h
xorg-server/include/dixstruct.h
xorg-server/include/misc.h
xorg-server/include/os.h
xorg-server/include/scrnintstr.h
xorg-server/mi/micmap.c
xorg-server/mi/miinitext.c
xorg-server/mi/mioverlay.c
xorg-server/mi/misprite.c
xorg-server/mi/mivaltree.c
xorg-server/mi/miwindow.c
xorg-server/miext/damage/damage.c
xorg-server/miext/rootless/rootlessGC.c
xorg-server/miext/rootless/rootlessWindow.c
xorg-server/os/WaitFor.c
xorg-server/os/access.c
xorg-server/os/connection.c
xorg-server/os/io.c
xorg-server/os/log.c
xorg-server/os/osinit.c
xorg-server/os/utils.c
xorg-server/os/xdmcp.c
xorg-server/os/xprintf.c
xorg-server/os/xstrans.c
xorg-server/render/mipict.c
xorg-server/xkb/xkbActions.c
xorg-server/xkb/xkbInit.c
xorg-server/xkeyboard-config/compat/default.in
Diffstat (limited to 'xorg-server/hw/xfree86/parser/Flags.c')
-rw-r--r-- | xorg-server/hw/xfree86/parser/Flags.c | 649 |
1 files changed, 321 insertions, 328 deletions
diff --git a/xorg-server/hw/xfree86/parser/Flags.c b/xorg-server/hw/xfree86/parser/Flags.c index c2a04062c..29a60a2e1 100644 --- a/xorg-server/hw/xfree86/parser/Flags.c +++ b/xorg-server/hw/xfree86/parser/Flags.c @@ -51,7 +51,6 @@ * authorization from the copyright holder(s) and author(s). */ - /* View/edit this file with tab stops set to 4 */ #ifdef HAVE_XORG_CONFIG_H @@ -67,242 +66,239 @@ extern LexRec val; -static xf86ConfigSymTabRec ServerFlagsTab[] = -{ - {ENDSECTION, "endsection"}, - {NOTRAPSIGNALS, "notrapsignals"}, - {DONTZAP, "dontzap"}, - {DONTZOOM, "dontzoom"}, - {DISABLEVIDMODE, "disablevidmodeextension"}, - {ALLOWNONLOCAL, "allownonlocalxvidtune"}, - {DISABLEMODINDEV, "disablemodindev"}, - {MODINDEVALLOWNONLOCAL, "allownonlocalmodindev"}, - {ALLOWMOUSEOPENFAIL, "allowmouseopenfail"}, - {OPTION, "option"}, - {BLANKTIME, "blanktime"}, - {STANDBYTIME, "standbytime"}, - {SUSPENDTIME, "suspendtime"}, - {OFFTIME, "offtime"}, - {DEFAULTLAYOUT, "defaultserverlayout"}, - {-1, ""}, +static xf86ConfigSymTabRec ServerFlagsTab[] = { + {ENDSECTION, "endsection"}, + {NOTRAPSIGNALS, "notrapsignals"}, + {DONTZAP, "dontzap"}, + {DONTZOOM, "dontzoom"}, + {DISABLEVIDMODE, "disablevidmodeextension"}, + {ALLOWNONLOCAL, "allownonlocalxvidtune"}, + {DISABLEMODINDEV, "disablemodindev"}, + {MODINDEVALLOWNONLOCAL, "allownonlocalmodindev"}, + {ALLOWMOUSEOPENFAIL, "allowmouseopenfail"}, + {OPTION, "option"}, + {BLANKTIME, "blanktime"}, + {STANDBYTIME, "standbytime"}, + {SUSPENDTIME, "suspendtime"}, + {OFFTIME, "offtime"}, + {DEFAULTLAYOUT, "defaultserverlayout"}, + {-1, ""}, }; #define CLEANUP xf86freeFlags XF86ConfFlagsPtr -xf86parseFlagsSection (void) +xf86parseFlagsSection(void) { - int token; - parsePrologue (XF86ConfFlagsPtr, XF86ConfFlagsRec) - - while ((token = xf86getToken (ServerFlagsTab)) != ENDSECTION) - { - int hasvalue = FALSE; - int strvalue = FALSE; - int tokentype; - switch (token) - { - case COMMENT: - ptr->flg_comment = xf86addComment(ptr->flg_comment, val.str); - break; - /* - * these old keywords are turned into standard generic options. - * we fall through here on purpose - */ - case DEFAULTLAYOUT: - strvalue = TRUE; - case BLANKTIME: - case STANDBYTIME: - case SUSPENDTIME: - case OFFTIME: - hasvalue = TRUE; - case NOTRAPSIGNALS: - case DONTZAP: - case DONTZOOM: - case DISABLEVIDMODE: - case ALLOWNONLOCAL: - case DISABLEMODINDEV: - case MODINDEVALLOWNONLOCAL: - case ALLOWMOUSEOPENFAIL: - { - int i = 0; - while (ServerFlagsTab[i].token != -1) - { - char *tmp; - - if (ServerFlagsTab[i].token == token) - { - char *valstr = NULL; - tmp = strdup (ServerFlagsTab[i].name); - if (hasvalue) - { - tokentype = xf86getSubToken(&(ptr->flg_comment)); - if (strvalue) { - if (tokentype != STRING) - Error (QUOTE_MSG, tmp); - valstr = val.str; - } else { - if (tokentype != NUMBER) - Error (NUMBER_MSG, tmp); - if (asprintf(&valstr, "%d", val.num) == -1) - valstr = NULL; - } - } - ptr->flg_option_lst = xf86addNewOption - (ptr->flg_option_lst, tmp, valstr); - } - i++; - } - } - break; - case OPTION: - ptr->flg_option_lst = xf86parseOption(ptr->flg_option_lst); - break; - - case EOF_TOKEN: - Error (UNEXPECTED_EOF_MSG); - break; - default: - Error (INVALID_KEYWORD_MSG, xf86tokenString ()); - break; - } - } + int token; + + parsePrologue(XF86ConfFlagsPtr, XF86ConfFlagsRec) + + while ((token = xf86getToken(ServerFlagsTab)) != ENDSECTION) { + int hasvalue = FALSE; + int strvalue = FALSE; + int tokentype; + + switch (token) { + case COMMENT: + ptr->flg_comment = xf86addComment(ptr->flg_comment, val.str); + break; + /* + * these old keywords are turned into standard generic options. + * we fall through here on purpose + */ + case DEFAULTLAYOUT: + strvalue = TRUE; + case BLANKTIME: + case STANDBYTIME: + case SUSPENDTIME: + case OFFTIME: + hasvalue = TRUE; + case NOTRAPSIGNALS: + case DONTZAP: + case DONTZOOM: + case DISABLEVIDMODE: + case ALLOWNONLOCAL: + case DISABLEMODINDEV: + case MODINDEVALLOWNONLOCAL: + case ALLOWMOUSEOPENFAIL: + { + int i = 0; + + while (ServerFlagsTab[i].token != -1) { + char *tmp; + + if (ServerFlagsTab[i].token == token) { + char *valstr = NULL; + + tmp = strdup(ServerFlagsTab[i].name); + if (hasvalue) { + tokentype = xf86getSubToken(&(ptr->flg_comment)); + if (strvalue) { + if (tokentype != STRING) + Error(QUOTE_MSG, tmp); + valstr = val.str; + } + else { + if (tokentype != NUMBER) + Error(NUMBER_MSG, tmp); + if (asprintf(&valstr, "%d", val.num) == -1) + valstr = NULL; + } + } + ptr->flg_option_lst = xf86addNewOption + (ptr->flg_option_lst, tmp, valstr); + } + i++; + } + } + break; + case OPTION: + ptr->flg_option_lst = xf86parseOption(ptr->flg_option_lst); + break; + + case EOF_TOKEN: + Error(UNEXPECTED_EOF_MSG); + break; + default: + Error(INVALID_KEYWORD_MSG, xf86tokenString()); + break; + } + } #ifdef DEBUG - printf ("Flags section parsed\n"); + printf("Flags section parsed\n"); #endif - return ptr; + return ptr; } #undef CLEANUP void -xf86printServerFlagsSection (FILE * f, XF86ConfFlagsPtr flags) +xf86printServerFlagsSection(FILE * f, XF86ConfFlagsPtr flags) { - XF86OptionPtr p; - - if ((!flags) || (!flags->flg_option_lst)) - return; - p = flags->flg_option_lst; - fprintf (f, "Section \"ServerFlags\"\n"); - if (flags->flg_comment) - fprintf (f, "%s", flags->flg_comment); - xf86printOptionList(f, p, 1); - fprintf (f, "EndSection\n\n"); + XF86OptionPtr p; + + if ((!flags) || (!flags->flg_option_lst)) + return; + p = flags->flg_option_lst; + fprintf(f, "Section \"ServerFlags\"\n"); + if (flags->flg_comment) + fprintf(f, "%s", flags->flg_comment); + xf86printOptionList(f, p, 1); + fprintf(f, "EndSection\n\n"); } static XF86OptionPtr -addNewOption2 (XF86OptionPtr head, char *name, char *val, int used) +addNewOption2(XF86OptionPtr head, char *name, char *val, int used) { - XF86OptionPtr new, old = NULL; - - /* Don't allow duplicates, free old strings */ - if (head != NULL && (old = xf86findOption(head, name)) != NULL) { - new = old; - free(new->opt_name); - free(new->opt_val); - } - else - new = calloc (1, sizeof (*new)); - new->opt_name = name; - new->opt_val = val; - new->opt_used = used; - - if (old) - return head; - return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new)); + XF86OptionPtr new, old = NULL; + + /* Don't allow duplicates, free old strings */ + if (head != NULL && (old = xf86findOption(head, name)) != NULL) { + new = old; + free(new->opt_name); + free(new->opt_val); + } + else + new = calloc(1, sizeof(*new)); + new->opt_name = name; + new->opt_val = val; + new->opt_used = used; + + if (old) + return head; + return ((XF86OptionPtr) xf86addListItem((glp) head, (glp) new)); } XF86OptionPtr -xf86addNewOption (XF86OptionPtr head, char *name, char *val) +xf86addNewOption(XF86OptionPtr head, char *name, char *val) { - return addNewOption2(head, name, val, 0); + return addNewOption2(head, name, val, 0); } void -xf86freeFlags (XF86ConfFlagsPtr flags) +xf86freeFlags(XF86ConfFlagsPtr flags) { - if (flags == NULL) - return; - xf86optionListFree (flags->flg_option_lst); - TestFree(flags->flg_comment); - free (flags); + if (flags == NULL) + return; + xf86optionListFree(flags->flg_option_lst); + TestFree(flags->flg_comment); + free(flags); } XF86OptionPtr -xf86optionListDup (XF86OptionPtr opt) +xf86optionListDup(XF86OptionPtr opt) { - XF86OptionPtr newopt = NULL; - char *val; - - while (opt) - { - val = opt->opt_val ? strdup(opt->opt_val) : NULL; - newopt = xf86addNewOption(newopt, strdup(opt->opt_name), val); - newopt->opt_used = opt->opt_used; - if (opt->opt_comment) - newopt->opt_comment = strdup(opt->opt_comment); - opt = opt->list.next; - } - return newopt; + XF86OptionPtr newopt = NULL; + char *val; + + while (opt) { + val = opt->opt_val ? strdup(opt->opt_val) : NULL; + newopt = xf86addNewOption(newopt, strdup(opt->opt_name), val); + newopt->opt_used = opt->opt_used; + if (opt->opt_comment) + newopt->opt_comment = strdup(opt->opt_comment); + opt = opt->list.next; + } + return newopt; } void -xf86optionListFree (XF86OptionPtr opt) +xf86optionListFree(XF86OptionPtr opt) { - XF86OptionPtr prev; - - while (opt) - { - TestFree (opt->opt_name); - TestFree (opt->opt_val); - TestFree (opt->opt_comment); - prev = opt; - opt = opt->list.next; - free (prev); - } + XF86OptionPtr prev; + + while (opt) { + TestFree(opt->opt_name); + TestFree(opt->opt_val); + TestFree(opt->opt_comment); + prev = opt; + opt = opt->list.next; + free(prev); + } } char * xf86optionName(XF86OptionPtr opt) { - if (opt) - return opt->opt_name; - return 0; + if (opt) + return opt->opt_name; + return 0; } char * xf86optionValue(XF86OptionPtr opt) { - if (opt) - return opt->opt_val; - return 0; + if (opt) + return opt->opt_val; + return 0; } XF86OptionPtr xf86newOption(char *name, char *value) { - XF86OptionPtr opt; + XF86OptionPtr opt; - opt = calloc(1, sizeof (*opt)); - if (!opt) - return NULL; + opt = calloc(1, sizeof(*opt)); + if (!opt) + return NULL; - opt->opt_used = 0; - opt->list.next = 0; - opt->opt_name = name; - opt->opt_val = value; + opt->opt_used = 0; + opt->list.next = 0; + opt->opt_name = name; + opt->opt_val = value; - return opt; + return opt; } XF86OptionPtr xf86nextOption(XF86OptionPtr list) { - if (!list) - return NULL; - return list->list.next; + if (!list) + return NULL; + return list->list.next; } /* @@ -312,15 +308,14 @@ xf86nextOption(XF86OptionPtr list) */ XF86OptionPtr -xf86findOption (XF86OptionPtr list, const char *name) +xf86findOption(XF86OptionPtr list, const char *name) { - while (list) - { - if (xf86nameCompare (list->opt_name, name) == 0) - return list; - list = list->list.next; - } - return NULL; + while (list) { + if (xf86nameCompare(list->opt_name, name) == 0) + return list; + list = list->list.next; + } + return NULL; } /* @@ -331,45 +326,41 @@ xf86findOption (XF86OptionPtr list, const char *name) */ const char * -xf86findOptionValue (XF86OptionPtr list, const char *name) +xf86findOptionValue(XF86OptionPtr list, const char *name) { - XF86OptionPtr p = xf86findOption (list, name); - - if (p) - { - if (p->opt_val) - return p->opt_val; - else - return ""; - } - return NULL; + XF86OptionPtr p = xf86findOption(list, name); + + if (p) { + if (p->opt_val) + return p->opt_val; + else + return ""; + } + return NULL; } XF86OptionPtr -xf86optionListCreate( const char **options, int count, int used ) +xf86optionListCreate(const char **options, int count, int used) { - XF86OptionPtr p = NULL; - char *t1, *t2; - int i; - - if (count == -1) - { - for (count = 0; options[count]; count++) - ; - } - if( (count % 2) != 0 ) - { - fprintf( stderr, "xf86optionListCreate: count must be an even number.\n" ); - return NULL; - } - for (i = 0; i < count; i += 2) - { - t1 = strdup(options[i]); - t2 = strdup(options[i + 1]); - p = addNewOption2 (p, t1, t2, used); - } - - return p; + XF86OptionPtr p = NULL; + char *t1, *t2; + int i; + + if (count == -1) { + for (count = 0; options[count]; count++); + } + if ((count % 2) != 0) { + fprintf(stderr, + "xf86optionListCreate: count must be an even number.\n"); + return NULL; + } + for (i = 0; i < count; i += 2) { + t1 = strdup(options[i]); + t2 = strdup(options[i + 1]); + p = addNewOption2(p, t1, t2, used); + } + + return p; } /* the 2 given lists are merged. If an option with the same name is present in @@ -378,128 +369,130 @@ xf86optionListCreate( const char **options, int count, int used ) * are freed, and the original lists are no longer guaranteed to be complete. */ XF86OptionPtr -xf86optionListMerge (XF86OptionPtr head, XF86OptionPtr tail) +xf86optionListMerge(XF86OptionPtr head, XF86OptionPtr tail) { - XF86OptionPtr a, b, ap = NULL, bp = NULL; - - a = tail; - b = head; - while (tail && b) { - if (xf86nameCompare (a->opt_name, b->opt_name) == 0) { - if (b == head) - head = a; - else - bp->list.next = a; - if (a == tail) - tail = a->list.next; - else - ap->list.next = a->list.next; - a->list.next = b->list.next; - b->list.next = NULL; - xf86optionListFree (b); - b = a->list.next; - bp = a; - a = tail; - ap = NULL; - } else { - ap = a; - if (!(a = a->list.next)) { - a = tail; - bp = b; - b = b->list.next; - ap = NULL; - } - } - } - - if (head) { - for (a = head; a->list.next; a = a->list.next) - ; - a->list.next = tail; - } else - head = tail; - - return head; + XF86OptionPtr a, b, ap = NULL, bp = NULL; + + a = tail; + b = head; + while (tail && b) { + if (xf86nameCompare(a->opt_name, b->opt_name) == 0) { + if (b == head) + head = a; + else + bp->list.next = a; + if (a == tail) + tail = a->list.next; + else + ap->list.next = a->list.next; + a->list.next = b->list.next; + b->list.next = NULL; + xf86optionListFree(b); + b = a->list.next; + bp = a; + a = tail; + ap = NULL; + } + else { + ap = a; + if (!(a = a->list.next)) { + a = tail; + bp = b; + b = b->list.next; + ap = NULL; + } + } + } + + if (head) { + for (a = head; a->list.next; a = a->list.next); + a->list.next = tail; + } + else + head = tail; + + return head; } char * xf86uLongToString(unsigned long i) { - char *s; + char *s; - if (asprintf(&s, "%lu", i) == -1) - return NULL; - return s; + if (asprintf(&s, "%lu", i) == -1) + return NULL; + return s; } XF86OptionPtr xf86parseOption(XF86OptionPtr head) { - XF86OptionPtr option, cnew, old; - char *name, *comment = NULL; - int token; - - if ((token = xf86getSubToken(&comment)) != STRING) { - xf86parseError(BAD_OPTION_MSG); - free(comment); - return head; - } - - name = val.str; - if ((token = xf86getSubToken(&comment)) == STRING) { - option = xf86newOption(name, val.str); - option->opt_comment = comment; - if ((token = xf86getToken(NULL)) == COMMENT) - option->opt_comment = xf86addComment(option->opt_comment, val.str); - else - xf86unGetToken(token); - } - else { - option = xf86newOption(name, NULL); - option->opt_comment = comment; - if (token == COMMENT) - option->opt_comment = xf86addComment(option->opt_comment, val.str); - else - xf86unGetToken(token); - } - - old = NULL; - - /* Don't allow duplicates */ - if (head != NULL && (old = xf86findOption(head, name)) != NULL) { - cnew = old; - free(option->opt_name); - TestFree(option->opt_val); - TestFree(option->opt_comment); - free(option); - } - else - cnew = option; - - if (old == NULL) - return ((XF86OptionPtr)xf86addListItem((glp)head, (glp)cnew)); - - return head; + XF86OptionPtr option, cnew, old; + char *name, *comment = NULL; + int token; + + if ((token = xf86getSubToken(&comment)) != STRING) { + xf86parseError(BAD_OPTION_MSG); + free(comment); + return head; + } + + name = val.str; + if ((token = xf86getSubToken(&comment)) == STRING) { + option = xf86newOption(name, val.str); + option->opt_comment = comment; + if ((token = xf86getToken(NULL)) == COMMENT) + option->opt_comment = xf86addComment(option->opt_comment, val.str); + else + xf86unGetToken(token); + } + else { + option = xf86newOption(name, NULL); + option->opt_comment = comment; + if (token == COMMENT) + option->opt_comment = xf86addComment(option->opt_comment, val.str); + else + xf86unGetToken(token); + } + + old = NULL; + + /* Don't allow duplicates */ + if (head != NULL && (old = xf86findOption(head, name)) != NULL) { + cnew = old; + free(option->opt_name); + TestFree(option->opt_val); + TestFree(option->opt_comment); + free(option); + } + else + cnew = option; + + if (old == NULL) + return ((XF86OptionPtr) xf86addListItem((glp) head, (glp) cnew)); + + return head; } void -xf86printOptionList(FILE *fp, XF86OptionPtr list, int tabs) +xf86printOptionList(FILE * fp, XF86OptionPtr list, int tabs) { - int i; - - if (!list) - return; - while (list) { - for (i = 0; i < tabs; i++) - fputc('\t', fp); - if (list->opt_val) - fprintf(fp, "Option \"%s\" \"%s\"", list->opt_name, list->opt_val); - else - fprintf(fp, "Option \"%s\"", list->opt_name); - if (list->opt_comment) - fprintf(fp, "%s", list->opt_comment); - else - fputc('\n', fp); - list = list->list.next; - } + int i; + + if (!list) + return; + while (list) { + for (i = 0; i < tabs; i++) + fputc('\t', fp); + if (list->opt_val) + fprintf(fp, "Option \"%s\" \"%s\"", list->opt_name, + list->opt_val); + else + fprintf(fp, "Option \"%s\"", list->opt_name); + if (list->opt_comment) + fprintf(fp, "%s", list->opt_comment); + else + fputc('\n', fp); + list = list->list.next; + } } |