From 5f05e04571efb687f9f2506faaa89969e3a9e7c2 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Fri, 29 May 2009 15:10:28 -0700 Subject: [PATCH] Run Nindent on com32/menu/readconfig.c Automatically reformat com32/menu/readconfig.c using Nindent. Do this for all files except HDT, gPXE and externally maintained libraries (zlib, tinyjpeg, libpng). Signed-off-by: H. Peter Anvin --- com32/menu/readconfig.c | 1646 +++++++++++++++++++++++------------------------ 1 file changed, 816 insertions(+), 830 deletions(-) diff --git a/com32/menu/readconfig.c b/com32/menu/readconfig.c index 376d818..1aad595 100644 --- a/com32/menu/readconfig.c +++ b/com32/menu/readconfig.c @@ -32,24 +32,24 @@ const char *empty_string; struct menu *root_menu, *start_menu, *hide_menu, *menu_list; /* These are global parameters regardless of which menu we're displaying */ -int shiftkey = 0; /* Only display menu if shift key pressed */ -int hiddenmenu = 0; +int shiftkey = 0; /* Only display menu if shift key pressed */ +int hiddenmenu = 0; long long totaltimeout = 0; /* Keep track of global default */ static int has_ui = 0; /* DEFAULT only counts if UI is found */ static const char *globaldefault = NULL; -static bool menusave = false; /* True if there is any "menu save" */ +static bool menusave = false; /* True if there is any "menu save" */ /* Linked list of all entires, hidden or not; used by unlabel() */ static struct menu_entry *all_entries; static struct menu_entry **all_entries_end = &all_entries; static const struct messages messages[MSG_COUNT] = { - [MSG_AUTOBOOT] = { "autoboot", "Automatic boot in # second{,s}..." }, - [MSG_TAB] = { "tabmsg", "Press [Tab] to edit options" }, - [MSG_NOTAB] = { "notabmsg", "" }, - [MSG_PASSPROMPT] = { "passprompt", "Password required" }, + [MSG_AUTOBOOT] = {"autoboot", "Automatic boot in # second{,s}..."}, + [MSG_TAB] = {"tabmsg", "Press [Tab] to edit options"}, + [MSG_NOTAB] = {"notabmsg", ""}, + [MSG_PASSPROMPT] = {"passprompt", "Password required"}, }; #define astrdup(x) ({ char *__x = (x); \ @@ -59,495 +59,483 @@ static const struct messages messages[MSG_COUNT] = { __p; }) /* Must match enum kernel_type */ -const char * const kernel_types[] = { - "none", - "localboot", - "kernel", - "linux", - "boot", - "bss", - "pxe", - "fdimage", - "comboot", - "com32", - "config", - NULL +const char *const kernel_types[] = { + "none", + "localboot", + "kernel", + "linux", + "boot", + "bss", + "pxe", + "fdimage", + "comboot", + "com32", + "config", + NULL }; /* * Search the list of all menus for a specific label */ -static struct menu * -find_menu(const char *label) +static struct menu *find_menu(const char *label) { - struct menu *m; + struct menu *m; - for (m = menu_list; m; m = m->next) { - if (!strcmp(label, m->label)) - return m; - } + for (m = menu_list; m; m = m->next) { + if (!strcmp(label, m->label)) + return m; + } - return NULL; + return NULL; } #define MAX_LINE 4096 -static char * -skipspace(char *p) +static char *skipspace(char *p) { - while (*p && my_isspace(*p)) - p++; + while (*p && my_isspace(*p)) + p++; - return p; + return p; } /* Strip ^ from a string, returning a new reference to the same refstring if none present */ static const char *strip_caret(const char *str) { - const char *p, *r; - char *q; - int carets = 0; - - p = str; - for (;;) { - p = strchr(p, '^'); - if (!p) - break; - carets++; - p++; - } - - if (!carets) - return refstr_get(str); - - r = q = refstr_alloc(strlen(str)-carets); - for (p = str; *p; p++) - if (*p != '^') - *q++ = *p; - - *q = '\0'; /* refstr_alloc() already did this... */ - - return r; + const char *p, *r; + char *q; + int carets = 0; + + p = str; + for (;;) { + p = strchr(p, '^'); + if (!p) + break; + carets++; + p++; + } + + if (!carets) + return refstr_get(str); + + r = q = refstr_alloc(strlen(str) - carets); + for (p = str; *p; p++) + if (*p != '^') + *q++ = *p; + + *q = '\0'; /* refstr_alloc() already did this... */ + + return r; } /* Check to see if we are at a certain keyword (case insensitive) */ /* Returns a pointer to the first character past the keyword */ -static char * -looking_at(char *line, const char *kwd) +static char *looking_at(char *line, const char *kwd) { - char *p = line; - const char *q = kwd; + char *p = line; + const char *q = kwd; - while ( *p && *q && ((*p^*q) & ~0x20) == 0 ) { - p++; - q++; - } + while (*p && *q && ((*p ^ *q) & ~0x20) == 0) { + p++; + q++; + } - if ( *q ) - return NULL; /* Didn't see the keyword */ + if (*q) + return NULL; /* Didn't see the keyword */ - return my_isspace(*p) ? p : NULL; /* Must be EOL or whitespace */ + return my_isspace(*p) ? p : NULL; /* Must be EOL or whitespace */ } -static struct menu * new_menu(struct menu *parent, - struct menu_entry *parent_entry, - const char *label) +static struct menu *new_menu(struct menu *parent, + struct menu_entry *parent_entry, const char *label) { - struct menu *m = calloc(1, sizeof(struct menu)); - int i; + struct menu *m = calloc(1, sizeof(struct menu)); + int i; - m->label = label; - m->title = refstr_get(empty_string); + m->label = label; + m->title = refstr_get(empty_string); - if (parent) { - /* Submenu */ - m->parent = parent; - m->parent_entry = parent_entry; - parent_entry->action = MA_SUBMENU; - parent_entry->submenu = m; + if (parent) { + /* Submenu */ + m->parent = parent; + m->parent_entry = parent_entry; + parent_entry->action = MA_SUBMENU; + parent_entry->submenu = m; - for (i = 0; i < MSG_COUNT; i++) - m->messages[i] = refstr_get(parent->messages[i]); + for (i = 0; i < MSG_COUNT; i++) + m->messages[i] = refstr_get(parent->messages[i]); - memcpy(m->mparm, parent->mparm, sizeof m->mparm); + memcpy(m->mparm, parent->mparm, sizeof m->mparm); - m->allowedit = parent->allowedit; - m->timeout = parent->timeout; - m->save = parent->save; + m->allowedit = parent->allowedit; + m->timeout = parent->timeout; + m->save = parent->save; - m->ontimeout = refstr_get(parent->ontimeout); - m->onerror = refstr_get(parent->onerror); - m->menu_master_passwd = refstr_get(parent->menu_master_passwd); - m->menu_background = refstr_get(parent->menu_background); + m->ontimeout = refstr_get(parent->ontimeout); + m->onerror = refstr_get(parent->onerror); + m->menu_master_passwd = refstr_get(parent->menu_master_passwd); + m->menu_background = refstr_get(parent->menu_background); - m->color_table = copy_color_table(parent->color_table); + m->color_table = copy_color_table(parent->color_table); - for (i = 0; i < 12; i++) { - m->fkeyhelp[i].textname = refstr_get(parent->fkeyhelp[i].textname); - m->fkeyhelp[i].background = refstr_get(parent->fkeyhelp[i].background); + for (i = 0; i < 12; i++) { + m->fkeyhelp[i].textname = refstr_get(parent->fkeyhelp[i].textname); + m->fkeyhelp[i].background = + refstr_get(parent->fkeyhelp[i].background); + } + } else { + /* Root menu */ + for (i = 0; i < MSG_COUNT; i++) + m->messages[i] = refstrdup(messages[i].defmsg); + for (i = 0; i < NPARAMS; i++) + m->mparm[i] = mparm[i].value; + + m->allowedit = true; /* Allow edits of the command line */ + m->color_table = default_color_table(); } - } else { - /* Root menu */ - for (i = 0; i < MSG_COUNT; i++) - m->messages[i] = refstrdup(messages[i].defmsg); - for (i = 0; i < NPARAMS; i++) - m->mparm[i] = mparm[i].value; - - m->allowedit = true; /* Allow edits of the command line */ - m->color_table = default_color_table(); - } - m->next = menu_list; - menu_list = m; + m->next = menu_list; + menu_list = m; - return m; + return m; } struct labeldata { - const char *label; - const char *kernel; - enum kernel_type type; - const char *append; - const char *initrd; - const char *menulabel; - const char *passwd; - char *helptext; - unsigned int ipappend; - unsigned int menuhide; - unsigned int menudefault; - unsigned int menuseparator; - unsigned int menudisabled; - unsigned int menuindent; - enum menu_action action; - int save; - struct menu *submenu; + const char *label; + const char *kernel; + enum kernel_type type; + const char *append; + const char *initrd; + const char *menulabel; + const char *passwd; + char *helptext; + unsigned int ipappend; + unsigned int menuhide; + unsigned int menudefault; + unsigned int menuseparator; + unsigned int menudisabled; + unsigned int menuindent; + enum menu_action action; + int save; + struct menu *submenu; }; /* Menu currently being parsed */ static struct menu *current_menu; -static void -clear_label_data(struct labeldata *ld) +static void clear_label_data(struct labeldata *ld) { - refstr_put(ld->label); - refstr_put(ld->kernel); - refstr_put(ld->append); - refstr_put(ld->initrd); - refstr_put(ld->menulabel); - refstr_put(ld->passwd); - - memset(ld, 0, sizeof *ld); + refstr_put(ld->label); + refstr_put(ld->kernel); + refstr_put(ld->append); + refstr_put(ld->initrd); + refstr_put(ld->menulabel); + refstr_put(ld->passwd); + + memset(ld, 0, sizeof *ld); } static struct menu_entry *new_entry(struct menu *m) { - struct menu_entry *me; - - if (m->nentries >= m->nentries_space) { - if (!m->nentries_space) - m->nentries_space = 1; - else - m->nentries_space <<= 1; - - m->menu_entries = realloc(m->menu_entries, m->nentries_space* - sizeof(struct menu_entry *)); - } - - me = calloc(1, sizeof(struct menu_entry)); - me->menu = m; - me->entry = m->nentries; - m->menu_entries[m->nentries++] = me; - *all_entries_end = me; - all_entries_end = &me->next; - - return me; + struct menu_entry *me; + + if (m->nentries >= m->nentries_space) { + if (!m->nentries_space) + m->nentries_space = 1; + else + m->nentries_space <<= 1; + + m->menu_entries = realloc(m->menu_entries, m->nentries_space * + sizeof(struct menu_entry *)); + } + + me = calloc(1, sizeof(struct menu_entry)); + me->menu = m; + me->entry = m->nentries; + m->menu_entries[m->nentries++] = me; + *all_entries_end = me; + all_entries_end = &me->next; + + return me; } static void consider_for_hotkey(struct menu *m, struct menu_entry *me) { - const char *p = strchr(me->displayname, '^'); - - if (me->action != MA_DISABLED) { - if ( p && p[1] ) { - unsigned char hotkey = p[1] & ~0x20; - if ( !m->menu_hotkeys[hotkey] ) { - me->hotkey = hotkey; - m->menu_hotkeys[hotkey] = me; - } + const char *p = strchr(me->displayname, '^'); + + if (me->action != MA_DISABLED) { + if (p && p[1]) { + unsigned char hotkey = p[1] & ~0x20; + if (!m->menu_hotkeys[hotkey]) { + me->hotkey = hotkey; + m->menu_hotkeys[hotkey] = me; + } + } } - } } -static void -record(struct menu *m, struct labeldata *ld, const char *append) +static void record(struct menu *m, struct labeldata *ld, const char *append) { - int i; - struct menu_entry *me; - const struct syslinux_ipappend_strings *ipappend; - - if (!ld->label) - return; /* Nothing defined */ - - /* Hidden entries are recorded on a special "hidden menu" */ - if (ld->menuhide) - m = hide_menu; - - if ( ld->label ) { - char ipoptions[4096], *ipp; - const char *a; - char *s; - - me = new_entry(m); - - me->displayname = ld->menulabel - ? refstr_get(ld->menulabel) : refstr_get(ld->label); - me->label = refstr_get(ld->label); - me->passwd = refstr_get(ld->passwd); - me->helptext = ld->helptext; - me->hotkey = 0; - me->action = ld->action ? ld->action : MA_CMD; - me->save = ld->save ? (ld->save > 0) : m->save; - - if ( ld->menuindent ) { - const char *dn; - - rsprintf(&dn, "%*s%s", ld->menuindent, "", me->displayname); - refstr_put(me->displayname); - me->displayname = dn; - } + int i; + struct menu_entry *me; + const struct syslinux_ipappend_strings *ipappend; + + if (!ld->label) + return; /* Nothing defined */ + + /* Hidden entries are recorded on a special "hidden menu" */ + if (ld->menuhide) + m = hide_menu; + + if (ld->label) { + char ipoptions[4096], *ipp; + const char *a; + char *s; + + me = new_entry(m); + + me->displayname = ld->menulabel + ? refstr_get(ld->menulabel) : refstr_get(ld->label); + me->label = refstr_get(ld->label); + me->passwd = refstr_get(ld->passwd); + me->helptext = ld->helptext; + me->hotkey = 0; + me->action = ld->action ? ld->action : MA_CMD; + me->save = ld->save ? (ld->save > 0) : m->save; + + if (ld->menuindent) { + const char *dn; + + rsprintf(&dn, "%*s%s", ld->menuindent, "", me->displayname); + refstr_put(me->displayname); + me->displayname = dn; + } - if ( ld->menuseparator ) { - refstr_put(me->displayname); - me->displayname = refstr_get(empty_string); - } + if (ld->menuseparator) { + refstr_put(me->displayname); + me->displayname = refstr_get(empty_string); + } - if ( ld->menuseparator || ld->menudisabled ) { - me->action = MA_DISABLED; - refstr_put(me->label); - me->label = NULL; - refstr_put(me->passwd); - me->passwd = NULL; - } + if (ld->menuseparator || ld->menudisabled) { + me->action = MA_DISABLED; + refstr_put(me->label); + me->label = NULL; + refstr_put(me->passwd); + me->passwd = NULL; + } - if (ld->menulabel) - consider_for_hotkey(m, me); + if (ld->menulabel) + consider_for_hotkey(m, me); - switch (me->action) { - case MA_CMD: - ipp = ipoptions; - *ipp = '\0'; + switch (me->action) { + case MA_CMD: + ipp = ipoptions; + *ipp = '\0'; - if (ld->initrd) - ipp += sprintf(ipp, " initrd=%s", ld->initrd); + if (ld->initrd) + ipp += sprintf(ipp, " initrd=%s", ld->initrd); + + if (ld->ipappend) { + ipappend = syslinux_ipappend_strings(); + for (i = 0; i < ipappend->count; i++) { + if ((ld->ipappend & (1U << i)) && ipappend->ptr[i]) + ipp += sprintf(ipp, " %s", ipappend->ptr[i]); + } + } - if (ld->ipappend) { - ipappend = syslinux_ipappend_strings(); - for (i = 0; i < ipappend->count; i++) { - if ( (ld->ipappend & (1U << i)) && ipappend->ptr[i] ) - ipp += sprintf(ipp, " %s", ipappend->ptr[i]); + a = ld->append; + if (!a) + a = append; + if (!a || (a[0] == '-' && !a[1])) + a = ""; + s = a[0] ? " " : ""; + if (ld->type == KT_KERNEL) { + rsprintf(&me->cmdline, "%s%s%s%s", ld->kernel, s, a, ipoptions); + } else { + rsprintf(&me->cmdline, ".%s %s%s%s%s", + kernel_types[ld->type], ld->kernel, s, a, ipoptions); + } + break; + + case MA_GOTO_UNRES: + case MA_EXIT_UNRES: + me->cmdline = refstr_get(ld->kernel); + break; + + case MA_GOTO: + case MA_EXIT: + me->submenu = ld->submenu; + break; + + default: + break; } - } - - a = ld->append; - if ( !a ) - a = append; - if ( !a || (a[0] == '-' && !a[1]) ) - a = ""; - s = a[0] ? " " : ""; - if (ld->type == KT_KERNEL) { - rsprintf(&me->cmdline, "%s%s%s%s", - ld->kernel, s, a, ipoptions); - } else { - rsprintf(&me->cmdline, ".%s %s%s%s%s", - kernel_types[ld->type], ld->kernel, s, a, ipoptions); - } - break; - - case MA_GOTO_UNRES: - case MA_EXIT_UNRES: - me->cmdline = refstr_get(ld->kernel); - break; - - case MA_GOTO: - case MA_EXIT: - me->submenu = ld->submenu; - break; - default: - break; + if (ld->menudefault && me->action == MA_CMD) + m->defentry = m->nentries - 1; } - if ( ld->menudefault && me->action == MA_CMD ) - m->defentry = m->nentries-1; - } - - clear_label_data(ld); + clear_label_data(ld); } static struct menu *begin_submenu(const char *tag) { - struct menu_entry *me; + struct menu_entry *me; - if (!tag[0]) - tag = NULL; + if (!tag[0]) + tag = NULL; - me = new_entry(current_menu); - me->displayname = refstrdup(tag); - return new_menu(current_menu, me, refstr_get(me->displayname)); + me = new_entry(current_menu); + me->displayname = refstrdup(tag); + return new_menu(current_menu, me, refstr_get(me->displayname)); } static struct menu *end_submenu(void) { - return current_menu->parent ? current_menu->parent : current_menu; + return current_menu->parent ? current_menu->parent : current_menu; } static struct menu_entry *find_label(const char *str) { - const char *p; - struct menu_entry *me; - int pos; + const char *p; + struct menu_entry *me; + int pos; - p = str; - while ( *p && !my_isspace(*p) ) - p++; + p = str; + while (*p && !my_isspace(*p)) + p++; - /* p now points to the first byte beyond the kernel name */ - pos = p-str; + /* p now points to the first byte beyond the kernel name */ + pos = p - str; - for (me = all_entries; me; me = me->next) { - if (!strncmp(str, me->label, pos) && !me->label[pos]) - return me; - } + for (me = all_entries; me; me = me->next) { + if (!strncmp(str, me->label, pos) && !me->label[pos]) + return me; + } - return NULL; + return NULL; } static const char *unlabel(const char *str) { - /* Convert a CLI-style command line to an executable command line */ - const char *p; - const char *q; - struct menu_entry *me; - int pos; - - p = str; - while ( *p && !my_isspace(*p) ) - p++; - - /* p now points to the first byte beyond the kernel name */ - pos = p-str; - - for (me = all_entries; me; me = me->next) { - if (!strncmp(str, me->label, pos) && !me->label[pos]) { - /* Found matching label */ - rsprintf(&q, "%s%s", me->cmdline, p); - refstr_put(str); - return q; + /* Convert a CLI-style command line to an executable command line */ + const char *p; + const char *q; + struct menu_entry *me; + int pos; + + p = str; + while (*p && !my_isspace(*p)) + p++; + + /* p now points to the first byte beyond the kernel name */ + pos = p - str; + + for (me = all_entries; me; me = me->next) { + if (!strncmp(str, me->label, pos) && !me->label[pos]) { + /* Found matching label */ + rsprintf(&q, "%s%s", me->cmdline, p); + refstr_put(str); + return q; + } } - } - return str; + return str; } -static const char * -refdup_word(char **p) +static const char *refdup_word(char **p) { - char *sp = *p; - char *ep = sp; + char *sp = *p; + char *ep = sp; - while (*ep && !my_isspace(*ep)) - ep++; + while (*ep && !my_isspace(*ep)) + ep++; - *p = ep; - return refstrndup(sp, ep-sp); + *p = ep; + return refstrndup(sp, ep - sp); } int my_isxdigit(char c) { - unsigned int uc = c; + unsigned int uc = c; - return (uc-'0') < 10 || - ((uc|0x20)-'a') < 6; + return (uc - '0') < 10 || ((uc | 0x20) - 'a') < 6; } unsigned int hexval(char c) { - unsigned char uc = c | 0x20; - unsigned int v; + unsigned char uc = c | 0x20; + unsigned int v; - v = uc-'0'; - if (v < 10) - return v; + v = uc - '0'; + if (v < 10) + return v; - return uc-'a'+10; + return uc - 'a' + 10; } unsigned int hexval2(const char *p) { - return (hexval(p[0]) << 4)+hexval(p[1]); + return (hexval(p[0]) << 4) + hexval(p[1]); } uint32_t parse_argb(char **p) { - char *sp = *p; - char *ep; - uint32_t argb; - size_t len, dl; - - if (*sp == '#') - sp++; - - ep = sp; - - while (my_isxdigit(*ep)) - ep++; - - *p = ep; - len = ep-sp; - - switch(len) { - case 3: /* #rgb */ - argb = - 0xff000000 + - (hexval(sp[0])*0x11 << 16) + - (hexval(sp[1])*0x11 << 8) + - (hexval(sp[2])*0x11); - break; - case 4: /* #argb */ - argb = - (hexval(sp[0])*0x11 << 24) + - (hexval(sp[1])*0x11 << 16) + - (hexval(sp[2])*0x11 << 8) + - (hexval(sp[3])*0x11); - break; - case 6: /* #rrggbb */ - case 9: /* #rrrgggbbb */ - case 12: /* #rrrrggggbbbb */ - dl = len/3; - argb = - 0xff000000 + - (hexval2(sp+0) << 16) + - (hexval2(sp+dl) << 8) + - hexval2(sp+dl*2); - break; - case 8: /* #aarrggbb */ - /* #aaarrrgggbbb is indistinguishable from #rrrrggggbbbb, - assume the latter is a more common format */ - case 16: /* #aaaarrrrggggbbbb */ - dl = len/4; - argb = - (hexval2(sp+0) << 24) + - (hexval2(sp+dl) << 16) + - (hexval2(sp+dl*2) << 8) + - hexval2(sp+dl*3); - break; - default: - argb = 0xffff0000; /* Bright red (error indication) */ - break; - } - - return argb; + char *sp = *p; + char *ep; + uint32_t argb; + size_t len, dl; + + if (*sp == '#') + sp++; + + ep = sp; + + while (my_isxdigit(*ep)) + ep++; + + *p = ep; + len = ep - sp; + + switch (len) { + case 3: /* #rgb */ + argb = + 0xff000000 + + (hexval(sp[0]) * 0x11 << 16) + + (hexval(sp[1]) * 0x11 << 8) + (hexval(sp[2]) * 0x11); + break; + case 4: /* #argb */ + argb = + (hexval(sp[0]) * 0x11 << 24) + + (hexval(sp[1]) * 0x11 << 16) + + (hexval(sp[2]) * 0x11 << 8) + (hexval(sp[3]) * 0x11); + break; + case 6: /* #rrggbb */ + case 9: /* #rrrgggbbb */ + case 12: /* #rrrrggggbbbb */ + dl = len / 3; + argb = + 0xff000000 + + (hexval2(sp + 0) << 16) + + (hexval2(sp + dl) << 8) + hexval2(sp + dl * 2); + break; + case 8: /* #aarrggbb */ + /* #aaarrrgggbbb is indistinguishable from #rrrrggggbbbb, + assume the latter is a more common format */ + case 16: /* #aaaarrrrggggbbbb */ + dl = len / 4; + argb = + (hexval2(sp + 0) << 24) + + (hexval2(sp + dl) << 16) + + (hexval2(sp + dl * 2) << 8) + hexval2(sp + dl * 3); + break; + default: + argb = 0xffff0000; /* Bright red (error indication) */ + break; + } + + return argb; } /* @@ -563,510 +551,508 @@ static int parse_one_config(const char *filename); static char *is_kernel_type(char *cmdstr, enum kernel_type *type) { - const char * const *p; - char *q; - enum kernel_type t = KT_NONE; - - for (p = kernel_types; *p; p++, t++) { - if ((q = looking_at(cmdstr, *p))) { - *type = t; - return q; + const char *const *p; + char *q; + enum kernel_type t = KT_NONE; + + for (p = kernel_types; *p; p++, t++) { + if ((q = looking_at(cmdstr, *p))) { + *type = t; + return q; + } } - } - return NULL; + return NULL; } static char *is_message_name(char *cmdstr, enum message_number *msgnr) { - char *q; - enum message_number i; + char *q; + enum message_number i; - for (i = 0; i < MSG_COUNT; i++) { - if ((q = looking_at(cmdstr, messages[i].name))) { - *msgnr = i; - return q; + for (i = 0; i < MSG_COUNT; i++) { + if ((q = looking_at(cmdstr, messages[i].name))) { + *msgnr = i; + return q; + } } - } - return NULL; + return NULL; } static char *is_fkey(char *cmdstr, int *fkeyno) { - char *q; - int no; + char *q; + int no; - if ((cmdstr[0]|0x20) != 'f') - return NULL; + if ((cmdstr[0] | 0x20) != 'f') + return NULL; - no = strtoul(cmdstr+1, &q, 10); - if (!my_isspace(*q)) - return NULL; + no = strtoul(cmdstr + 1, &q, 10); + if (!my_isspace(*q)) + return NULL; - if (no < 0 || no > 12) - return NULL; + if (no < 0 || no > 12) + return NULL; - *fkeyno = (no == 0) ? 10 : no-1; - return q; + *fkeyno = (no == 0) ? 10 : no - 1; + return q; } -static void parse_config_file(FILE *f) +static void parse_config_file(FILE * f) { - char line[MAX_LINE], *p, *ep, ch; - enum kernel_type type; - enum message_number msgnr; - int fkeyno; - struct menu *m = current_menu; - - while ( fgets(line, sizeof line, f) ) { - p = strchr(line, '\r'); - if ( p ) - *p = '\0'; - p = strchr(line, '\n'); - if ( p ) - *p = '\0'; - - p = skipspace(line); - - if ( looking_at(p, "menu") ) { - p = skipspace(p+4); - - if ( looking_at(p, "label") ) { - if ( ld.label ) { - refstr_put(ld.menulabel); - ld.menulabel = refstrdup(skipspace(p+5)); - } else if ( m->parent_entry ) { - refstr_put(m->parent_entry->displayname); - m->parent_entry->displayname = refstrdup(skipspace(p+5)); - consider_for_hotkey(m->parent, m->parent_entry); - if (!m->title[0]) { - /* MENU LABEL -> MENU TITLE on submenu */ - refstr_put(m->title); - m->title = strip_caret(m->parent_entry->displayname); - } - } - } else if ( looking_at(p, "title") ) { - refstr_put(m->title); - m->title = refstrdup(skipspace(p+5)); - if (m->parent_entry) { - /* MENU TITLE -> MENU LABEL on submenu */ - if (m->parent_entry->displayname == m->label) { - refstr_put(m->parent_entry->displayname); - m->parent_entry->displayname = refstr_get(m->title); - } - } - } else if ( looking_at(p, "default") ) { - if (ld.label) { - ld.menudefault = 1; - } else if (m->parent_entry) { - m->parent->defentry = m->parent_entry->entry; - } - } else if ( looking_at(p, "hide") ) { - ld.menuhide = 1; - } else if ( looking_at(p, "passwd") ) { - if ( ld.label ) { - refstr_put(ld.passwd); - ld.passwd = refstrdup(skipspace(p+6)); - } else if ( m->parent_entry ) { - refstr_put(m->parent_entry->passwd); - m->parent_entry->passwd = refstrdup(skipspace(p+6)); - } - } else if ( looking_at(p, "shiftkey") ) { - shiftkey = 1; - } else if ( looking_at(p, "save") ) { - menusave = true; - if (ld.label) - ld.save = 1; - else - m->save = true; - } else if ( looking_at(p, "nosave") ) { - if (ld.label) - ld.save = -1; - else - m->save = false; - } else if ( looking_at(p, "onerror") ) { - refstr_put(m->onerror); - m->onerror = refstrdup(skipspace(p+7)); - } else if ( looking_at(p, "master") ) { - p = skipspace(p+6); - if ( looking_at(p, "passwd") ) { - refstr_put(m->menu_master_passwd); - m->menu_master_passwd = refstrdup(skipspace(p+6)); - } - } else if ( (ep = looking_at(p, "include")) ) { - goto do_include; - } else if ( (ep = looking_at(p, "background")) ) { - p = skipspace(ep); - refstr_put(m->menu_background); - m->menu_background = refdup_word(&p); - } else if ( (ep = looking_at(p, "hidden")) ) { - hiddenmenu = 1; - } else if ( (ep = is_message_name(p, &msgnr)) ) { - refstr_put(m->messages[msgnr]); - m->messages[msgnr] = refstrdup(skipspace(ep)); - } else if ((ep = looking_at(p, "color")) || - (ep = looking_at(p, "colour"))) { - int i; - struct color_table *cptr; - p = skipspace(ep); - cptr = m->color_table; - for ( i = 0; i < menu_color_table_size; i++ ) { - if ( (ep = looking_at(p, cptr->name)) ) { - p = skipspace(ep); - if (*p) { - if (looking_at(p, "*")) { - p++; - } else { - refstr_put(cptr->ansi); - cptr->ansi = refdup_word(&p); - } - - p = skipspace(p); - if (*p) { - if (looking_at(p, "*")) - p++; + char line[MAX_LINE], *p, *ep, ch; + enum kernel_type type; + enum message_number msgnr; + int fkeyno; + struct menu *m = current_menu; + + while (fgets(line, sizeof line, f)) { + p = strchr(line, '\r'); + if (p) + *p = '\0'; + p = strchr(line, '\n'); + if (p) + *p = '\0'; + + p = skipspace(line); + + if (looking_at(p, "menu")) { + p = skipspace(p + 4); + + if (looking_at(p, "label")) { + if (ld.label) { + refstr_put(ld.menulabel); + ld.menulabel = refstrdup(skipspace(p + 5)); + } else if (m->parent_entry) { + refstr_put(m->parent_entry->displayname); + m->parent_entry->displayname = refstrdup(skipspace(p + 5)); + consider_for_hotkey(m->parent, m->parent_entry); + if (!m->title[0]) { + /* MENU LABEL -> MENU TITLE on submenu */ + refstr_put(m->title); + m->title = strip_caret(m->parent_entry->displayname); + } + } + } else if (looking_at(p, "title")) { + refstr_put(m->title); + m->title = refstrdup(skipspace(p + 5)); + if (m->parent_entry) { + /* MENU TITLE -> MENU LABEL on submenu */ + if (m->parent_entry->displayname == m->label) { + refstr_put(m->parent_entry->displayname); + m->parent_entry->displayname = refstr_get(m->title); + } + } + } else if (looking_at(p, "default")) { + if (ld.label) { + ld.menudefault = 1; + } else if (m->parent_entry) { + m->parent->defentry = m->parent_entry->entry; + } + } else if (looking_at(p, "hide")) { + ld.menuhide = 1; + } else if (looking_at(p, "passwd")) { + if (ld.label) { + refstr_put(ld.passwd); + ld.passwd = refstrdup(skipspace(p + 6)); + } else if (m->parent_entry) { + refstr_put(m->parent_entry->passwd); + m->parent_entry->passwd = refstrdup(skipspace(p + 6)); + } + } else if (looking_at(p, "shiftkey")) { + shiftkey = 1; + } else if (looking_at(p, "save")) { + menusave = true; + if (ld.label) + ld.save = 1; + else + m->save = true; + } else if (looking_at(p, "nosave")) { + if (ld.label) + ld.save = -1; else - cptr->argb_fg = parse_argb(&p); + m->save = false; + } else if (looking_at(p, "onerror")) { + refstr_put(m->onerror); + m->onerror = refstrdup(skipspace(p + 7)); + } else if (looking_at(p, "master")) { + p = skipspace(p + 6); + if (looking_at(p, "passwd")) { + refstr_put(m->menu_master_passwd); + m->menu_master_passwd = refstrdup(skipspace(p + 6)); + } + } else if ((ep = looking_at(p, "include"))) { + goto do_include; + } else if ((ep = looking_at(p, "background"))) { + p = skipspace(ep); + refstr_put(m->menu_background); + m->menu_background = refdup_word(&p); + } else if ((ep = looking_at(p, "hidden"))) { + hiddenmenu = 1; + } else if ((ep = is_message_name(p, &msgnr))) { + refstr_put(m->messages[msgnr]); + m->messages[msgnr] = refstrdup(skipspace(ep)); + } else if ((ep = looking_at(p, "color")) || + (ep = looking_at(p, "colour"))) { + int i; + struct color_table *cptr; + p = skipspace(ep); + cptr = m->color_table; + for (i = 0; i < menu_color_table_size; i++) { + if ((ep = looking_at(p, cptr->name))) { + p = skipspace(ep); + if (*p) { + if (looking_at(p, "*")) { + p++; + } else { + refstr_put(cptr->ansi); + cptr->ansi = refdup_word(&p); + } + + p = skipspace(p); + if (*p) { + if (looking_at(p, "*")) + p++; + else + cptr->argb_fg = parse_argb(&p); + + p = skipspace(p); + if (*p) { + if (looking_at(p, "*")) + p++; + else + cptr->argb_bg = parse_argb(&p); + + /* Parse a shadow mode */ + p = skipspace(p); + ch = *p | 0x20; + if (ch == 'n') /* none */ + cptr->shadow = SHADOW_NONE; + else if (ch == 's') /* std, standard */ + cptr->shadow = SHADOW_NORMAL; + else if (ch == 'a') /* all */ + cptr->shadow = SHADOW_ALL; + else if (ch == 'r') /* rev, reverse */ + cptr->shadow = SHADOW_REVERSE; + } + } + } + break; + } + cptr++; + } + } else if ((ep = looking_at(p, "msgcolor")) || + (ep = looking_at(p, "msgcolour"))) { + unsigned int fg_mask = MSG_COLORS_DEF_FG; + unsigned int bg_mask = MSG_COLORS_DEF_BG; + enum color_table_shadow shadow = MSG_COLORS_DEF_SHADOW; + + p = skipspace(ep); + if (*p) { + if (!looking_at(p, "*")) + fg_mask = parse_argb(&p); + + p = skipspace(p); + if (*p) { + if (!looking_at(p, "*")) + bg_mask = parse_argb(&p); + + p = skipspace(p); + switch (*p | 0x20) { + case 'n': + shadow = SHADOW_NONE; + break; + case 's': + shadow = SHADOW_NORMAL; + break; + case 'a': + shadow = SHADOW_ALL; + break; + case 'r': + shadow = SHADOW_REVERSE; + break; + default: + /* go with default */ + break; + } + } + } + set_msg_colors_global(m->color_table, fg_mask, bg_mask, shadow); + } else if (looking_at(p, "separator")) { + record(m, &ld, append); + ld.label = refstr_get(empty_string); + ld.menuseparator = 1; + record(m, &ld, append); + } else if (looking_at(p, "disable") || looking_at(p, "disabled")) { + ld.menudisabled = 1; + } else if (looking_at(p, "indent")) { + ld.menuindent = atoi(skipspace(p + 6)); + } else if (looking_at(p, "begin")) { + record(m, &ld, append); + m = current_menu = begin_submenu(skipspace(p + 5)); + } else if (looking_at(p, "end")) { + record(m, &ld, append); + m = current_menu = end_submenu(); + } else if (looking_at(p, "quit")) { + if (ld.label) + ld.action = MA_QUIT; + } else if (looking_at(p, "goto")) { + if (ld.label) { + ld.action = MA_GOTO_UNRES; + refstr_put(ld.kernel); + ld.kernel = refstrdup(skipspace(p + 4)); + } + } else if (looking_at(p, "exit")) { + p = skipspace(p + 4); + if (ld.label && m->parent) { + if (*p) { + /* This is really just a goto, except for the marker */ + ld.action = MA_EXIT_UNRES; + refstr_put(ld.kernel); + ld.kernel = refstrdup(p); + } else { + ld.action = MA_EXIT; + ld.submenu = m->parent; + } + } + } else if (looking_at(p, "start")) { + start_menu = m; + } else { + /* Unknown, check for layout parameters */ + enum parameter_number mp; + for (mp = 0; mp < NPARAMS; mp++) { + if ((ep = looking_at(p, mparm[mp].name))) { + m->mparm[mp] = atoi(skipspace(ep)); + break; + } + } + } + } else if (looking_at(p, "text")) { + enum text_cmd { + TEXT_UNKNOWN, + TEXT_HELP + } cmd = TEXT_UNKNOWN; + int len = ld.helptext ? strlen(ld.helptext) : 0; + int xlen; + + p = skipspace(p + 4); + + if (looking_at(p, "help")) + cmd = TEXT_HELP; + + while (fgets(line, sizeof line, f)) { + p = skipspace(line); + if (looking_at(p, "endtext")) + break; + + xlen = strlen(line); + + switch (cmd) { + case TEXT_UNKNOWN: + break; + case TEXT_HELP: + ld.helptext = realloc(ld.helptext, len + xlen + 1); + memcpy(ld.helptext + len, line, xlen + 1); + len += xlen; + break; + } + } + } else if ((ep = is_fkey(p, &fkeyno))) { + p = skipspace(ep); + if (m->fkeyhelp[fkeyno].textname) { + refstr_put(m->fkeyhelp[fkeyno].textname); + m->fkeyhelp[fkeyno].textname = NULL; + } + if (m->fkeyhelp[fkeyno].background) { + refstr_put(m->fkeyhelp[fkeyno].background); + m->fkeyhelp[fkeyno].background = NULL; + } + refstr_put(m->fkeyhelp[fkeyno].textname); + m->fkeyhelp[fkeyno].textname = refdup_word(&p); + if (*p) { + p = skipspace(p); + m->fkeyhelp[fkeyno].background = refdup_word(&p); + } + } else if ((ep = looking_at(p, "include"))) { +do_include: + { + const char *file; + p = skipspace(ep); + file = refdup_word(&p); p = skipspace(p); if (*p) { - if (looking_at(p, "*")) - p++; - else - cptr->argb_bg = parse_argb(&p); - - /* Parse a shadow mode */ - p = skipspace(p); - ch = *p | 0x20; - if (ch == 'n') /* none */ - cptr->shadow = SHADOW_NONE; - else if (ch == 's') /* std, standard */ - cptr->shadow = SHADOW_NORMAL; - else if (ch == 'a') /* all */ - cptr->shadow = SHADOW_ALL; - else if (ch == 'r') /* rev, reverse */ - cptr->shadow = SHADOW_REVERSE; + record(m, &ld, append); + m = current_menu = begin_submenu(p); + parse_one_config(file); + record(m, &ld, append); + m = current_menu = end_submenu(); + } else { + parse_one_config(file); } - } + refstr_put(file); } - break; - } - cptr++; - } - } else if ((ep = looking_at(p, "msgcolor")) || - (ep = looking_at(p, "msgcolour"))) { - unsigned int fg_mask = MSG_COLORS_DEF_FG; - unsigned int bg_mask = MSG_COLORS_DEF_BG; - enum color_table_shadow shadow = MSG_COLORS_DEF_SHADOW; - - p = skipspace(ep); - if (*p) { - if (!looking_at(p, "*")) - fg_mask = parse_argb(&p); - - p = skipspace(p); - if (*p) { - if (!looking_at(p, "*")) - bg_mask = parse_argb(&p); - - p = skipspace(p); - switch (*p | 0x20) { - case 'n': - shadow = SHADOW_NONE; - break; - case 's': - shadow = SHADOW_NORMAL; - break; - case 'a': - shadow = SHADOW_ALL; - break; - case 'r': - shadow = SHADOW_REVERSE; - break; - default: - /* go with default */ - break; + } else if (looking_at(p, "append")) { + const char *a = refstrdup(skipspace(p + 6)); + if (ld.label) { + refstr_put(ld.append); + ld.append = a; + } else { + refstr_put(append); + append = a; } - } - } - set_msg_colors_global(m->color_table, fg_mask, bg_mask, shadow); - } else if ( looking_at(p, "separator") ) { - record(m, &ld, append); - ld.label = refstr_get(empty_string); - ld.menuseparator = 1; - record(m, &ld, append); - } else if ( looking_at(p, "disable") || - looking_at(p, "disabled")) { - ld.menudisabled = 1; - } else if ( looking_at(p, "indent") ) { - ld.menuindent = atoi(skipspace(p+6)); - } else if ( looking_at(p, "begin") ) { - record(m, &ld, append); - m = current_menu = begin_submenu(skipspace(p+5)); - } else if ( looking_at(p, "end") ) { - record(m, &ld, append); - m = current_menu = end_submenu(); - } else if ( looking_at(p, "quit") ) { - if (ld.label) - ld.action = MA_QUIT; - } else if ( looking_at(p, "goto") ) { - if (ld.label) { - ld.action = MA_GOTO_UNRES; - refstr_put(ld.kernel); - ld.kernel = refstrdup(skipspace(p+4)); - } - } else if ( looking_at(p, "exit") ) { - p = skipspace(p+4); - if (ld.label && m->parent) { - if (*p) { - /* This is really just a goto, except for the marker */ - ld.action = MA_EXIT_UNRES; - refstr_put(ld.kernel); + } else if (looking_at(p, "initrd")) { + const char *a = refstrdup(skipspace(p + 6)); + if (ld.label) { + refstr_put(ld.initrd); + ld.initrd = a; + } else { + /* Ignore */ + } + } else if (looking_at(p, "label")) { + p = skipspace(p + 5); + record(m, &ld, append); + ld.label = refstrdup(p); ld.kernel = refstrdup(p); - } else { - ld.action = MA_EXIT; - ld.submenu = m->parent; - } - } - } else if ( looking_at(p, "start") ) { - start_menu = m; - } else { - /* Unknown, check for layout parameters */ - enum parameter_number mp; - for (mp = 0; mp < NPARAMS; mp++) { - if ( (ep = looking_at(p, mparm[mp].name)) ) { - m->mparm[mp] = atoi(skipspace(ep)); - break; - } - } - } - } else if ( looking_at(p, "text") ) { - enum text_cmd { - TEXT_UNKNOWN, - TEXT_HELP - } cmd = TEXT_UNKNOWN; - int len = ld.helptext ? strlen(ld.helptext) : 0; - int xlen; - - p = skipspace(p+4); - - if (looking_at(p, "help")) - cmd = TEXT_HELP; - - while ( fgets(line, sizeof line, f) ) { - p = skipspace(line); - if (looking_at(p, "endtext")) - break; - - xlen = strlen(line); - - switch (cmd) { - case TEXT_UNKNOWN: - break; - case TEXT_HELP: - ld.helptext = realloc(ld.helptext, len+xlen+1); - memcpy(ld.helptext+len, line, xlen+1); - len += xlen; - break; - } - } - } else if ( (ep = is_fkey(p, &fkeyno)) ) { - p = skipspace(ep); - if (m->fkeyhelp[fkeyno].textname) { - refstr_put(m->fkeyhelp[fkeyno].textname); - m->fkeyhelp[fkeyno].textname = NULL; - } - if (m->fkeyhelp[fkeyno].background) { - refstr_put(m->fkeyhelp[fkeyno].background); - m->fkeyhelp[fkeyno].background = NULL; - } - - refstr_put(m->fkeyhelp[fkeyno].textname); - m->fkeyhelp[fkeyno].textname = refdup_word(&p); - if (*p) { - p = skipspace(p); - m->fkeyhelp[fkeyno].background = refdup_word(&p); - } - } else if ( (ep = looking_at(p, "include")) ) { - do_include: - { - const char *file; - p = skipspace(ep); - file = refdup_word(&p); - p = skipspace(p); - if (*p) { - record(m, &ld, append); - m = current_menu = begin_submenu(p); - parse_one_config(file); - record(m, &ld, append); - m = current_menu = end_submenu(); - } else { - parse_one_config(file); + ld.type = KT_KERNEL; + ld.passwd = NULL; + ld.append = NULL; + ld.initrd = NULL; + ld.menulabel = NULL; + ld.helptext = NULL; + ld.ipappend = ipappend; + ld.menudefault = ld.menuhide = ld.menuseparator = + ld.menudisabled = ld.menuindent = 0; + } else if ((ep = is_kernel_type(p, &type))) { + if (ld.label) { + refstr_put(ld.kernel); + ld.kernel = refstrdup(skipspace(ep)); + ld.type = type; + } + } else if (looking_at(p, "timeout")) { + m->timeout = (atoi(skipspace(p + 7)) * CLK_TCK + 9) / 10; + } else if (looking_at(p, "totaltimeout")) { + totaltimeout = (atoll(skipspace(p + 13)) * CLK_TCK + 9) / 10; + } else if (looking_at(p, "ontimeout")) { + m->ontimeout = refstrdup(skipspace(p + 9)); + } else if (looking_at(p, "allowoptions")) { + m->allowedit = !!atoi(skipspace(p + 12)); + } else if (looking_at(p, "ipappend")) { + if (ld.label) + ld.ipappend = atoi(skipspace(p + 8)); + else + ipappend = atoi(skipspace(p + 8)); + } else if (looking_at(p, "default")) { + refstr_put(globaldefault); + globaldefault = refstrdup(skipspace(p + 7)); + } else if (looking_at(p, "ui")) { + has_ui = 1; } - refstr_put(file); - } - } else if ( looking_at(p, "append") ) { - const char *a = refstrdup(skipspace(p+6)); - if ( ld.label ) { - refstr_put(ld.append); - ld.append = a; - } else { - refstr_put(append); - append = a; - } - } else if ( looking_at(p, "initrd") ) { - const char *a = refstrdup(skipspace(p+6)); - if ( ld.label ) { - refstr_put(ld.initrd); - ld.initrd = a; - } else { - /* Ignore */ - } - } else if ( looking_at(p, "label") ) { - p = skipspace(p+5); - record(m, &ld, append); - ld.label = refstrdup(p); - ld.kernel = refstrdup(p); - ld.type = KT_KERNEL; - ld.passwd = NULL; - ld.append = NULL; - ld.initrd = NULL; - ld.menulabel = NULL; - ld.helptext = NULL; - ld.ipappend = ipappend; - ld.menudefault = ld.menuhide = ld.menuseparator = - ld.menudisabled = ld.menuindent = 0; - } else if ( (ep = is_kernel_type(p, &type)) ) { - if ( ld.label ) { - refstr_put(ld.kernel); - ld.kernel = refstrdup(skipspace(ep)); - ld.type = type; - } - } else if ( looking_at(p, "timeout") ) { - m->timeout = (atoi(skipspace(p+7))*CLK_TCK+9)/10; - } else if ( looking_at(p, "totaltimeout") ) { - totaltimeout = (atoll(skipspace(p+13))*CLK_TCK+9)/10; - } else if ( looking_at(p, "ontimeout") ) { - m->ontimeout = refstrdup(skipspace(p+9)); - } else if ( looking_at(p, "allowoptions") ) { - m->allowedit = !!atoi(skipspace(p+12)); - } else if ( looking_at(p, "ipappend") ) { - if (ld.label) - ld.ipappend = atoi(skipspace(p+8)); - else - ipappend = atoi(skipspace(p+8)); - } else if ( looking_at(p, "default") ) { - refstr_put(globaldefault); - globaldefault = refstrdup(skipspace(p+7)); - } else if ( looking_at(p, "ui") ) { - has_ui = 1; } - } } static int parse_one_config(const char *filename) { - FILE *f; + FILE *f; - if (!strcmp(filename, "~")) - filename = syslinux_config_file(); + if (!strcmp(filename, "~")) + filename = syslinux_config_file(); - f = fopen(filename, "r"); - if ( !f ) - return -1; + f = fopen(filename, "r"); + if (!f) + return -1; - parse_config_file(f); - fclose(f); + parse_config_file(f); + fclose(f); - return 0; + return 0; } static void resolve_gotos(void) { - struct menu_entry *me; - struct menu *m; - - for (me = all_entries; me; me = me->next) { - if (me->action == MA_GOTO_UNRES || - me->action == MA_EXIT_UNRES) { - m = find_menu(me->cmdline); - refstr_put(me->cmdline); - me->cmdline = NULL; - if (m) { - me->submenu = m; - me->action--; /* Drop the _UNRES */ - } else { - me->action = MA_DISABLED; - } + struct menu_entry *me; + struct menu *m; + + for (me = all_entries; me; me = me->next) { + if (me->action == MA_GOTO_UNRES || me->action == MA_EXIT_UNRES) { + m = find_menu(me->cmdline); + refstr_put(me->cmdline); + me->cmdline = NULL; + if (m) { + me->submenu = m; + me->action--; /* Drop the _UNRES */ + } else { + me->action = MA_DISABLED; + } + } } - } } void parse_configs(char **argv) { - const char *filename; - struct menu *m; - struct menu_entry *me; - - empty_string = refstrdup(""); - - /* Initialize defaults for the root and hidden menus */ - hide_menu = new_menu(NULL, NULL, refstrdup(".hidden")); - root_menu = new_menu(NULL, NULL, refstrdup(".top")); - start_menu = root_menu; - - /* Other initialization */ - memset(&ld, 0, sizeof(struct labeldata)); - - /* Actually process the files */ - current_menu = root_menu; - if ( !*argv ) { - parse_one_config("~"); - } else { - while ( (filename = *argv++) ) - parse_one_config(filename); - } - - /* On final EOF process the last label statement */ - record(current_menu, &ld, append); - - /* Common postprocessing */ - resolve_gotos(); - - /* Handle global default */ - if (has_ui && globaldefault) { - me = find_label(globaldefault); - if (me && me->menu != hide_menu) { - me->menu->defentry = me->entry; - start_menu = me->menu; + const char *filename; + struct menu *m; + struct menu_entry *me; + + empty_string = refstrdup(""); + + /* Initialize defaults for the root and hidden menus */ + hide_menu = new_menu(NULL, NULL, refstrdup(".hidden")); + root_menu = new_menu(NULL, NULL, refstrdup(".top")); + start_menu = root_menu; + + /* Other initialization */ + memset(&ld, 0, sizeof(struct labeldata)); + + /* Actually process the files */ + current_menu = root_menu; + if (!*argv) { + parse_one_config("~"); + } else { + while ((filename = *argv++)) + parse_one_config(filename); } - } - - /* If "menu save" is active, let the ADV override the global default */ - if (menusave) { - size_t len; - const char *lbl = syslinux_getadv(ADV_MENUSAVE, &len); - char *lstr; - if (lbl && len) { - lstr = refstr_alloc(len); - memcpy(lstr, lbl, len); /* refstr_alloc() adds the final null */ - me = find_label(lstr); - if (me && me->menu != hide_menu) { - me->menu->defentry = me->entry; - start_menu = me->menu; - } - refstr_put(lstr); + + /* On final EOF process the last label statement */ + record(current_menu, &ld, append); + + /* Common postprocessing */ + resolve_gotos(); + + /* Handle global default */ + if (has_ui && globaldefault) { + me = find_label(globaldefault); + if (me && me->menu != hide_menu) { + me->menu->defentry = me->entry; + start_menu = me->menu; + } + } + + /* If "menu save" is active, let the ADV override the global default */ + if (menusave) { + size_t len; + const char *lbl = syslinux_getadv(ADV_MENUSAVE, &len); + char *lstr; + if (lbl && len) { + lstr = refstr_alloc(len); + memcpy(lstr, lbl, len); /* refstr_alloc() adds the final null */ + me = find_label(lstr); + if (me && me->menu != hide_menu) { + me->menu->defentry = me->entry; + start_menu = me->menu; + } + refstr_put(lstr); + } } - } - /* Final per-menu initialization, with all labels known */ - for (m = menu_list; m; m = m->next) { - m->curentry = m->defentry; /* All menus start at their defaults */ + /* Final per-menu initialization, with all labels known */ + for (m = menu_list; m; m = m->next) { + m->curentry = m->defentry; /* All menus start at their defaults */ - if ( m->ontimeout ) - m->ontimeout = unlabel(m->ontimeout); - if ( m->onerror ) - m->onerror = unlabel(m->onerror); - } + if (m->ontimeout) + m->ontimeout = unlabel(m->ontimeout); + if (m->onerror) + m->onerror = unlabel(m->onerror); + } } -- 2.7.4