Module Name: src Committed By: christos Date: Thu Aug 18 13:20:04 UTC 2011
Modified Files: src/sys/arch/i386/stand/lib: bootmenu.c parseutils.c Log Message: PR/43563: Wolfgang Solfrank: boot.cfg doesn't support comments Fix makes it support # comments and treat spaces and tabs the same way. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/i386/stand/lib/bootmenu.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/i386/stand/lib/parseutils.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/stand/lib/bootmenu.c diff -u src/sys/arch/i386/stand/lib/bootmenu.c:1.9 src/sys/arch/i386/stand/lib/bootmenu.c:1.10 --- src/sys/arch/i386/stand/lib/bootmenu.c:1.9 Thu May 26 00:25:27 2011 +++ src/sys/arch/i386/stand/lib/bootmenu.c Thu Aug 18 09:20:04 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: bootmenu.c,v 1.9 2011/05/26 04:25:27 uebayasi Exp $ */ +/* $NetBSD: bootmenu.c,v 1.10 2011/08/18 13:20:04 christos Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -101,7 +101,7 @@ int cmenu, cbanner, len; int fd, err, off; struct stat st; - char *key, *value, *v2; + char *next, *key, *value, *v2; /* Clear bootconf structure */ memset((void *)&bootconf, 0, sizeof(bootconf)); @@ -157,13 +157,22 @@ cmenu = 0; cbanner = 0; - for (c = bc; *c; c++) { + for (c = bc; *c; c = next) { key = c; + /* find end of line */ + for (; *c && *c != '\n'; c++) + /* zero terminate line on start of comment */ + if (*c == '#') + *c = 0; + /* zero terminate line */ + if (*(next = c)) + *next++ = 0; /* Look for = separator between key and value */ - for (; *c && *c != '='; c++) + for (c = key; *c && *c != '='; c++) continue; + /* Ignore lines with no key=value pair */ if (*c == '\0') - break; /* break if at end of data */ + continue; /* zero terminate key which points to keyword */ *c++ = 0; Index: src/sys/arch/i386/stand/lib/parseutils.c diff -u src/sys/arch/i386/stand/lib/parseutils.c:1.5 src/sys/arch/i386/stand/lib/parseutils.c:1.6 --- src/sys/arch/i386/stand/lib/parseutils.c:1.5 Sun Dec 14 12:03:43 2008 +++ src/sys/arch/i386/stand/lib/parseutils.c Thu Aug 18 09:20:04 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: parseutils.c,v 1.5 2008/12/14 17:03:43 christos Exp $ */ +/* $NetBSD: parseutils.c,v 1.6 2011/08/18 13:20:04 christos Exp $ */ /* * Copyright (c) 1996, 1997 @@ -52,13 +52,22 @@ { char *options; - if ((options = strchr(arg, ' ')) == NULL) + for (options = arg; *options; options++) { + switch (*options) { + case ' ': + case '\t': + *options++ = '\0'; + break; + default: + continue; + } + break; + } + if (*options == '\0') return ""; - else - *options++ = '\0'; - /* trim leading blanks */ - while (*options && *options == ' ') + /* trim leading blanks/tabs */ + while (*options == ' ' || *options == '\t') options++; return options;