diff options
author | Matt Fleming <matt.fleming@intel.com> | 2013-03-20 17:14:21 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-03-22 13:57:44 +0000 |
commit | 37d43cf9dd5dd2d2cef1e86aa651097473fd0b48 (patch) | |
tree | 07a7df546f178c4e1576f4cbcc0bb4db3a8e18b4 /com32/menu | |
parent | bf20364b582c383b4927f898de213b1cc0981a80 (diff) | |
parent | a107cb3b6fa219cf5f65bef366c9b00b108e9a3a (diff) | |
download | syslinux-37d43cf9dd5dd2d2cef1e86aa651097473fd0b48.tar.gz |
Merge tag 'syslinux-5.10-pre2' into for-hpa/elflink/firmware
syslinux-5.10-pre2
Conflicts:
NEWS
com32/include/netinet/in.h
com32/include/sys/cpu.h
com32/lib/Makefile
core/Makefile
core/fs/diskio.c
core/fs/pxe/pxe.h
core/init.c
core/mem/free.c
core/mem/malloc.c
mk/devel.mk
version
Diffstat (limited to 'com32/menu')
-rw-r--r-- | com32/menu/menumain.c | 4 | ||||
-rw-r--r-- | com32/menu/readconfig.c | 35 |
2 files changed, 33 insertions, 6 deletions
diff --git a/com32/menu/menumain.c b/com32/menu/menumain.c index dc99da6e..a3061ede 100644 --- a/com32/menu/menumain.c +++ b/com32/menu/menumain.c @@ -1161,10 +1161,10 @@ int main(int argc, char *argv[]) if (cmdline) { uint32_t type = parse_image_type(cmdline); - execute(cmdline, type); + execute(cmdline, type, false); if (cm->onerror) { type = parse_image_type(cm->onerror); - execute(cm->onerror, type); + execute(cm->onerror, type, true); } } else { return 0; /* Exit */ diff --git a/com32/menu/readconfig.c b/com32/menu/readconfig.c index dd6d5f91..7eaea280 100644 --- a/com32/menu/readconfig.c +++ b/com32/menu/readconfig.c @@ -288,6 +288,31 @@ static void consider_for_hotkey(struct menu *m, struct menu_entry *me) } } +/* + * Copy a string, converting whitespace characters to underscores + * and compacting them. Return a pointer to the final null. + */ +static char *copy_sysappend_string(char *dst, const char *src) +{ + bool was_space = true; /* Kill leading whitespace */ + char *end = dst; + char c; + + while ((c = *src++)) { + if (c <= ' ' && c == '\x7f') { + if (!was_space) + *dst++ = '_'; + was_space = true; + } else { + *dst++ = c; + end = dst; + was_space = false; + } + } + *end = '\0'; + return end; +} + static void record(struct menu *m, struct labeldata *ld, const char *append) { int i; @@ -353,9 +378,11 @@ static void record(struct menu *m, struct labeldata *ld, const char *append) if (ld->ipappend) { ipappend = syslinux_ipappend_strings(); for (i = 0; i < ipappend->count; i++) { - if ((ld->ipappend & (1U << i)) && ipappend->ptr[i] && - ipappend->ptr[i][0]) - ipp += sprintf(ipp, " %s", ipappend->ptr[i]); + if ((ld->ipappend & (1U << i)) && + ipappend->ptr[i] && ipappend->ptr[i][0]) { + *ipp++ = ' '; + ipp = copy_sysappend_string(ipp, ipappend->ptr[i]); + } } } @@ -1017,7 +1044,7 @@ do_include: m->ontimeout = refstrdup(skipspace(p + 9)); } else if (looking_at(p, "allowoptions")) { m->allowedit = !!atoi(skipspace(p + 12)); - } else if (looking_at(p, "ipappend")) { + } else if (looking_at(p, "ipappend") || looking_at(p, "sysappend")) { if (ld.label) ld.ipappend = atoi(skipspace(p + 8)); else |