diff mbox

[1/2] kconfig: don't silently ignore unhandled characters

Message ID 5458A4FC0200007800044AC1@mail.emea.novell.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jan Beulich Nov. 4, 2014, 9:05 a.m. UTC
At the very least we should tell people that waht they wrote is not
what the utility understands.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
 scripts/kconfig/zconf.l             |    6 -
 scripts/kconfig/zconf.lex.c_shipped |  194 +++++++++++++++++++-----------------
 2 files changed, 111 insertions(+), 89 deletions(-)



--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Paul Bolle Nov. 4, 2014, 2:06 p.m. UTC | #1
On Tue, 2014-11-04 at 09:05 +0000, Jan Beulich wrote:
> At the very least we should tell people that waht they wrote is not
> what the utility understands.

Yes, we should change this. I'm inclined to think the should die with an
error on invalid syntax. Would that be too strict?  

Anyhow, seems to work as advertised:
    $ make ARCH=arm menuconfig
    [...]
    sound/soc/intel/Kconfig:40:warning: ignoring unsupported character '\'
    sound/soc/intel/Kconfig:70:warning: ignoring unsupported character '\'
    arch/arm/Kconfig.debug:1268:warning: ignoring unsupported character '>'

The soc/intel warnings are for doubled line continuations! You've earned
a Reported-by:, I guess.

> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
>  scripts/kconfig/zconf.l             |    6 -
>  scripts/kconfig/zconf.lex.c_shipped |  194 +++++++++++++++++++-----------------
>  2 files changed, 111 insertions(+), 89 deletions(-)
> 
> --- 3.18-rc3-kconfig.orig/scripts/kconfig/zconf.l
> +++ 3.18-rc3-kconfig/scripts/kconfig/zconf.l
> @@ -141,7 +141,11 @@ n	[A-Za-z0-9_]
>  	}
>  	#.*	/* comment */
>  	\\\n	current_file->lineno++;
> -	.
> +	[[:blank:]]+
> +	.	{
> +		printf("%s:%d:warning: ignoring unsupported character '%c'\n",

                 fprintf(stderr, [...]?

> +		       zconf_curname(), zconf_lineno(), *yytext);
> +	}
>  	<<EOF>> {
>  		BEGIN(INITIAL);
>  	}
> --- 3.18-rc3-kconfig.orig/scripts/kconfig/zconf.lex.c_shipped
> +++ 3.18-rc3-kconfig/scripts/kconfig/zconf.lex.c_shipped
> @@ -414,14 +414,14 @@ static yyconst flex_int16_t yy_nxt[][17]
>      },
>  
>      {
> -       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
> -       33,   34,   35,   35,   36,   37,   38
> +       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
> +       34,   35,   36,   36,   37,   38,   39
>  
>      },
>  
>      {
> -       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
> -       33,   34,   35,   35,   36,   37,   38
> +       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
> +       34,   35,   36,   36,   37,   38,   39
>      },
>  
>      {

I guess we must trust that you manually edited this _shipped file
correctly.

>[...]
> @@ -920,7 +931,7 @@ static int input (void );
>  /* This used to be an fputs(), but since the string might contain NUL's,
>   * we now use fwrite().
>   */
> -#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
> +#define ECHO fwrite( zconftext, zconfleng, 1, zconfout )
>  #endif
>  
>  /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,

But this hunk looks unrelated. Is this needed?


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jan Beulich Nov. 4, 2014, 2:14 p.m. UTC | #2
>>> On 04.11.14 at 15:06, <pebolle@tiscali.nl> wrote:
> On Tue, 2014-11-04 at 09:05 +0000, Jan Beulich wrote:
>> At the very least we should tell people that waht they wrote is not
>> what the utility understands.
> 
> Yes, we should change this. I'm inclined to think the should die with an
> error on invalid syntax. Would that be too strict?  

I would think so. This could be made more strict once the warning
was in place for a couple of releases.

>> --- 3.18-rc3-kconfig.orig/scripts/kconfig/zconf.lex.c_shipped
>> +++ 3.18-rc3-kconfig/scripts/kconfig/zconf.lex.c_shipped
>> @@ -414,14 +414,14 @@ static yyconst flex_int16_t yy_nxt[][17]
>>      },
>>  
>>      {
>> -       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
>> -       33,   34,   35,   35,   36,   37,   38
>> +       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
>> +       34,   35,   36,   36,   37,   38,   39
>>  
>>      },
>>  
>>      {
>> -       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
>> -       33,   34,   35,   35,   36,   37,   38
>> +       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
>> +       34,   35,   36,   36,   37,   38,   39
>>      },
>>  
>>      {
> 
> I guess we must trust that you manually edited this _shipped file
> correctly.

There was no manual editing involved - this is the re-generated
version.

>> @@ -920,7 +931,7 @@ static int input (void );
>>  /* This used to be an fputs(), but since the string might contain NUL's,
>>   * we now use fwrite().
>>   */
>> -#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
>> +#define ECHO fwrite( zconftext, zconfleng, 1, zconfout )
>>  #endif
>>  
>>  /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
> 
> But this hunk looks unrelated. Is this needed?

I think it should stay, even if my flex version may be slightly different
from the one that was used originally. As above - it's simply a result
of re-generating.

Jan

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paul Bolle Nov. 5, 2014, 10:36 a.m. UTC | #3
On Tue, 2014-11-04 at 14:14 +0000, Jan Beulich wrote:
> >>> On 04.11.14 at 15:06, <pebolle@tiscali.nl> wrote:
> > On Tue, 2014-11-04 at 09:05 +0000, Jan Beulich wrote:
> >> @@ -920,7 +931,7 @@ static int input (void );
> >>  /* This used to be an fputs(), but since the string might contain NUL's,
> >>   * we now use fwrite().
> >>   */
> >> -#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
> >> +#define ECHO fwrite( zconftext, zconfleng, 1, zconfout )
> >>  #endif
> >>  
> >>  /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
> > 
> > But this hunk looks unrelated. Is this needed?
> 
> I think it should stay, even if my flex version may be slightly different
> from the one that was used originally. As above - it's simply a result
> of re-generating.

(This annoyed me enough to dive a bit deeper. This message is mainly to
archive my notes publicly.)

This #define was added in v3.1. See commit 2f76b358f9fb ("kconfig: regen
parser"). Commit explanations were probably a bit expensive then since
this is all the info we have: we don't know why this was done, nor how
(which program, which options, etc.).

Anyhow, I don't think ECHO is used anywhere. grepping for ECHO in
scripts/ finds dtc-lexer.lex.c_shipped, lex.lex.c_shipped, and this
file. In the other two _shipped files ECHO is actually used. So,
apparently it's not a bit of lex magic. The #define might as well be
removed.

I personally wouldn't bother to add this hunk, but who cares.


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jan Beulich Nov. 6, 2014, 10:19 a.m. UTC | #4
>>> On 05.11.14 at 11:36, <pebolle@tiscali.nl> wrote:
> On Tue, 2014-11-04 at 14:14 +0000, Jan Beulich wrote:
>> I think it should stay, even if my flex version may be slightly different
>> from the one that was used originally. As above - it's simply a result
>> of re-generating.
> 
> (This annoyed me enough to dive a bit deeper. This message is mainly to
> archive my notes publicly.)
> 
> This #define was added in v3.1. See commit 2f76b358f9fb ("kconfig: regen
> parser"). Commit explanations were probably a bit expensive then since
> this is all the info we have: we don't know why this was done, nor how
> (which program, which options, etc.).
> 
> Anyhow, I don't think ECHO is used anywhere. grepping for ECHO in
> scripts/ finds dtc-lexer.lex.c_shipped, lex.lex.c_shipped, and this
> file. In the other two _shipped files ECHO is actually used. So,
> apparently it's not a bit of lex magic. The #define might as well be
> removed.

Again - this is code that gets generated by flex, and hence
dropping it (entirely, or the hunk that changes it) will make the
discussion re-appear the next time someone re-generates the
file.

Jan

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paul Bolle Nov. 6, 2014, 10:28 a.m. UTC | #5
On Thu, 2014-11-06 at 10:19 +0000, Jan Beulich wrote:
> Again - this is code that gets generated by flex, and hence
> dropping it (entirely, or the hunk that changes it) will make the
> discussion re-appear the next time someone re-generates the
> file.

My public note ended with:
> I personally wouldn't bother to add this hunk, but who cares.

I guess it wasn't clear that this meant that I think that the
discussion, which I started of course, is basically moot.


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paul Bolle Dec. 9, 2014, 10:16 a.m. UTC | #6
Hi Jan,

On Tue, 2014-11-04 at 14:14 +0000, Jan Beulich wrote:
> >>> On 04.11.14 at 15:06, <pebolle@tiscali.nl> wrote:
> > On Tue, 2014-11-04 at 09:05 +0000, Jan Beulich wrote:
> >> At the very least we should tell people that waht they wrote is not
> >> what the utility understands.
> > 
> > Yes, we should change this. I'm inclined to think the should die with an
> > error on invalid syntax. Would that be too strict?  
> 
> I would think so. This could be made more strict once the warning
> was in place for a couple of releases.
> 
> >> --- 3.18-rc3-kconfig.orig/scripts/kconfig/zconf.lex.c_shipped
> >> +++ 3.18-rc3-kconfig/scripts/kconfig/zconf.lex.c_shipped
> >> @@ -414,14 +414,14 @@ static yyconst flex_int16_t yy_nxt[][17]
> >>      },
> >>  
> >>      {
> >> -       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
> >> -       33,   34,   35,   35,   36,   37,   38
> >> +       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
> >> +       34,   35,   36,   36,   37,   38,   39
> >>  
> >>      },
> >>  
> >>      {
> >> -       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
> >> -       33,   34,   35,   35,   36,   37,   38
> >> +       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
> >> +       34,   35,   36,   36,   37,   38,   39
> >>      },
> >>  
> >>      {
> > 
> > I guess we must trust that you manually edited this _shipped file
> > correctly.
> 
> There was no manual editing involved - this is the re-generated
> version.
> 
> >> @@ -920,7 +931,7 @@ static int input (void );
> >>  /* This used to be an fputs(), but since the string might contain NUL's,
> >>   * we now use fwrite().
> >>   */
> >> -#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
> >> +#define ECHO fwrite( zconftext, zconfleng, 1, zconfout )
> >>  #endif
> >>  
> >>  /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
> > 
> > But this hunk looks unrelated. Is this needed?
> 
> I think it should stay, even if my flex version may be slightly different
> from the one that was used originally. As above - it's simply a result
> of re-generating.

It's been five weeks since you've sent this. I'm not aware of any other
comments beside mine. Here's what I'd suggest to get things moving:

Resend these patches. Don't bother sending to Yann, that's pointless. Do
include lkml. Perhaps also include Michal Marek and/or Andrew Morton:
one of them might handle these patches. Who knows...

For 1/2 feel free to add
    Acked-by: Paul Bolle <pebolle@tiscali.nl>

_provided_ you change the printf([...]) to a fprintf(stderr, [...]). It
would be nice if you'd added a note about the flex version and the
command line used to regenerate the _shipped file, maybe even in the
commit explanation.

Note that I tested patch 1/2 on top of next-20141208 for all current
defconfigs (see https://lkml.org/lkml/2014/12/8/587 how I did that).
No .config was changed, which was what I expected.

For 2/2 don't forget to remove those development printf()s. I haven't
yet looked at that patch closely or even tested it. Perhaps I'll
actually manage to do that after you resend it.


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jan Beulich Dec. 19, 2014, 4:31 p.m. UTC | #7
Hi Paul,

>>> On 09.12.14 at 11:16, <pebolle@tiscali.nl> wrote:
> It's been five weeks since you've sent this. I'm not aware of any other
> comments beside mine. Here's what I'd suggest to get things moving:
> 
> Resend these patches.

I guess I'll do this as soon as I got to merge my patch queue onto
3.19-rc, i.e. hopefully early next year.

> Don't bother sending to Yann, that's pointless. Do
> include lkml. Perhaps also include Michal Marek and/or Andrew Morton:
> one of them might handle these patches. Who knows...
> 
> For 1/2 feel free to add
>     Acked-by: Paul Bolle <pebolle@tiscali.nl>
> 
> _provided_ you change the printf([...]) to a fprintf(stderr, [...]).

While I can do that, this will end up being inconsistent with all other
code in zconf.l - it's all using printf(). I therefore think this would
better be another patch changing all of them info fprintf(stderr, ).

Jan

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- 3.18-rc3-kconfig.orig/scripts/kconfig/zconf.l
+++ 3.18-rc3-kconfig/scripts/kconfig/zconf.l
@@ -141,7 +141,11 @@  n	[A-Za-z0-9_]
 	}
 	#.*	/* comment */
 	\\\n	current_file->lineno++;
-	.
+	[[:blank:]]+
+	.	{
+		printf("%s:%d:warning: ignoring unsupported character '%c'\n",
+		       zconf_curname(), zconf_lineno(), *yytext);
+	}
 	<<EOF>> {
 		BEGIN(INITIAL);
 	}
--- 3.18-rc3-kconfig.orig/scripts/kconfig/zconf.lex.c_shipped
+++ 3.18-rc3-kconfig/scripts/kconfig/zconf.lex.c_shipped
@@ -414,14 +414,14 @@  static yyconst flex_int16_t yy_nxt[][17]
     },
 
     {
-       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
-       33,   34,   35,   35,   36,   37,   38
+       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
+       34,   35,   36,   36,   37,   38,   39
 
     },
 
     {
-       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
-       33,   34,   35,   35,   36,   37,   38
+       11,   26,   27,   28,   29,   30,   31,   32,   30,   33,
+       34,   35,   36,   36,   37,   38,   39
     },
 
     {
@@ -435,7 +435,7 @@  static yyconst flex_int16_t yy_nxt[][17]
     },
 
     {
-       11,  -13,   39,   40,  -13,  -13,   41,  -13,  -13,  -13,
+       11,  -13,   40,   41,  -13,  -13,   42,  -13,  -13,  -13,
       -13,  -13,  -13,  -13,  -13,  -13,  -13
     },
 
@@ -446,8 +446,8 @@  static yyconst flex_int16_t yy_nxt[][17]
     },
 
     {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
+       11,   43,   43,   44,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43
     },
 
     {
@@ -462,28 +462,28 @@  static yyconst flex_int16_t yy_nxt[][17]
 
     {
        11,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
-      -18,  -18,  -18,   44,  -18,  -18,  -18
+      -18,  -18,  -18,   45,  -18,  -18,  -18
     },
 
     {
-       11,   45,   45,  -19,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45
+       11,   46,   46,  -19,   46,   46,   46,   46,   46,   46,
+       46,   46,   46,   46,   46,   46,   46
 
     },
 
     {
-       11,  -20,   46,   47,  -20,  -20,  -20,  -20,  -20,  -20,
+       11,  -20,   47,   48,  -20,  -20,  -20,  -20,  -20,  -20,
       -20,  -20,  -20,  -20,  -20,  -20,  -20
     },
 
     {
-       11,   48,  -21,  -21,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   48
+       11,   49,  -21,  -21,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49
     },
 
     {
-       11,   49,   49,   50,   49,  -22,   49,   49,  -22,   49,
-       49,   49,   49,   49,   49,  -22,   49
+       11,   50,   50,   51,   50,  -22,   50,   50,  -22,   50,
+       50,   50,   50,   50,   50,  -22,   50
     },
 
     {
@@ -498,8 +498,8 @@  static yyconst flex_int16_t yy_nxt[][17]
     },
 
     {
-       11,   51,   51,   52,   51,   51,   51,   51,   51,   51,
-       51,   51,   51,   51,   51,   51,   51
+       11,   52,   52,   53,   52,   52,   52,   52,   52,   52,
+       52,   52,   52,   52,   52,   52,   52
     },
 
     {
@@ -508,33 +508,33 @@  static yyconst flex_int16_t yy_nxt[][17]
     },
 
     {
-       11,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
+       11,  -27,   54,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
       -27,  -27,  -27,  -27,  -27,  -27,  -27
     },
 
     {
        11,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
-      -28,  -28,  -28,  -28,   53,  -28,  -28
+      -28,  -28,  -28,  -28,  -28,  -28,  -28
     },
 
     {
        11,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
-      -29,  -29,  -29,  -29,  -29,  -29,  -29
+      -29,  -29,  -29,  -29,   55,  -29,  -29
 
     },
 
     {
-       11,   54,   54,  -30,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54
+       11,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
+      -30,  -30,  -30,  -30,  -30,  -30,  -30
     },
 
     {
-       11,  -31,  -31,  -31,  -31,  -31,  -31,   55,  -31,  -31,
-      -31,  -31,  -31,  -31,  -31,  -31,  -31
+       11,   56,   56,  -31,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56
     },
 
     {
-       11,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
+       11,  -32,  -32,  -32,  -32,  -32,  -32,   57,  -32,  -32,
       -32,  -32,  -32,  -32,  -32,  -32,  -32
     },
 
@@ -545,100 +545,100 @@  static yyconst flex_int16_t yy_nxt[][17]
 
     {
        11,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
-      -34,   56,   57,   57,  -34,  -34,  -34
+      -34,  -34,  -34,  -34,  -34,  -34,  -34
 
     },
 
     {
        11,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
-      -35,   57,   57,   57,  -35,  -35,  -35
+      -35,   58,   59,   59,  -35,  -35,  -35
     },
 
     {
        11,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-      -36,  -36,  -36,  -36,  -36,  -36,  -36
+      -36,   59,   59,   59,  -36,  -36,  -36
     },
 
     {
-       11,  -37,  -37,   58,  -37,  -37,  -37,  -37,  -37,  -37,
+       11,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,
       -37,  -37,  -37,  -37,  -37,  -37,  -37
     },
 
     {
-       11,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
-      -38,  -38,  -38,  -38,  -38,  -38,   59
+       11,  -38,  -38,   60,  -38,  -38,  -38,  -38,  -38,  -38,
+      -38,  -38,  -38,  -38,  -38,  -38,  -38
     },
 
     {
-       11,  -39,   39,   40,  -39,  -39,   41,  -39,  -39,  -39,
-      -39,  -39,  -39,  -39,  -39,  -39,  -39
+       11,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
+      -39,  -39,  -39,  -39,  -39,  -39,   61
 
     },
 
     {
-       11,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
+       11,  -40,   40,   41,  -40,  -40,   42,  -40,  -40,  -40,
       -40,  -40,  -40,  -40,  -40,  -40,  -40
     },
 
     {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
+       11,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
+      -41,  -41,  -41,  -41,  -41,  -41,  -41
     },
 
     {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
+       11,   43,   43,   44,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43
     },
 
     {
-       11,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
-      -43,  -43,  -43,  -43,  -43,  -43,  -43
+       11,   43,   43,   44,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43
     },
 
     {
        11,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
-      -44,  -44,  -44,   44,  -44,  -44,  -44
+      -44,  -44,  -44,  -44,  -44,  -44,  -44
 
     },
 
     {
-       11,   45,   45,  -45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45
+       11,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
+      -45,  -45,  -45,   45,  -45,  -45,  -45
     },
 
     {
-       11,  -46,   46,   47,  -46,  -46,  -46,  -46,  -46,  -46,
-      -46,  -46,  -46,  -46,  -46,  -46,  -46
+       11,   46,   46,  -46,   46,   46,   46,   46,   46,   46,
+       46,   46,   46,   46,   46,   46,   46
     },
 
     {
-       11,   48,  -47,  -47,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   48
+       11,  -47,   47,   48,  -47,  -47,  -47,  -47,  -47,  -47,
+      -47,  -47,  -47,  -47,  -47,  -47,  -47
     },
 
     {
-       11,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
-      -48,  -48,  -48,  -48,  -48,  -48,  -48
+       11,   49,  -48,  -48,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49
     },
 
     {
-       11,   49,   49,   50,   49,  -49,   49,   49,  -49,   49,
-       49,   49,   49,   49,   49,  -49,   49
+       11,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
+      -49,  -49,  -49,  -49,  -49,  -49,  -49
 
     },
 
     {
-       11,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
-      -50,  -50,  -50,  -50,  -50,  -50,  -50
+       11,   50,   50,   51,   50,  -50,   50,   50,  -50,   50,
+       50,   50,   50,   50,   50,  -50,   50
     },
 
     {
-       11,  -51,  -51,   52,  -51,  -51,  -51,  -51,  -51,  -51,
+       11,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
       -51,  -51,  -51,  -51,  -51,  -51,  -51
     },
 
     {
-       11,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
+       11,  -52,  -52,   53,  -52,  -52,  -52,  -52,  -52,  -52,
       -52,  -52,  -52,  -52,  -52,  -52,  -52
     },
 
@@ -648,8 +648,8 @@  static yyconst flex_int16_t yy_nxt[][17]
     },
 
     {
-       11,   54,   54,  -54,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54
+       11,  -54,   54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,
+      -54,  -54,  -54,  -54,  -54,  -54,  -54
 
     },
 
@@ -659,29 +659,39 @@  static yyconst flex_int16_t yy_nxt[][17]
     },
 
     {
-       11,  -56,  -56,  -56,  -56,  -56,  -56,  -56,  -56,  -56,
-      -56,   60,   57,   57,  -56,  -56,  -56
+       11,   56,   56,  -56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56
     },
 
     {
        11,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
-      -57,   57,   57,   57,  -57,  -57,  -57
+      -57,  -57,  -57,  -57,  -57,  -57,  -57
     },
 
     {
        11,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,
-      -58,  -58,  -58,  -58,  -58,  -58,  -58
+      -58,   62,   59,   59,  -58,  -58,  -58
     },
 
     {
        11,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,
-      -59,  -59,  -59,  -59,  -59,  -59,  -59
+      -59,   59,   59,   59,  -59,  -59,  -59
 
     },
 
     {
        11,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,
-      -60,   57,   57,   57,  -60,  -60,  -60
+      -60,  -60,  -60,  -60,  -60,  -60,  -60
+    },
+
+    {
+       11,  -61,  -61,  -61,  -61,  -61,  -61,  -61,  -61,  -61,
+      -61,  -61,  -61,  -61,  -61,  -61,  -61
+    },
+
+    {
+       11,  -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62,
+      -62,   59,   59,   59,  -62,  -62,  -62
     },
 
     } ;
@@ -701,8 +711,8 @@  static void yy_fatal_error (yyconst char
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 33
-#define YY_END_OF_BUFFER 34
+#define YY_NUM_RULES 34
+#define YY_END_OF_BUFFER 35
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -710,14 +720,15 @@  struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[61] =
+static yyconst flex_int16_t yy_accept[63] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       34,    5,    4,    2,    3,    7,    8,    6,   32,   29,
-       31,   24,   28,   27,   26,   22,   17,   13,   16,   20,
-       22,   11,   12,   19,   19,   14,   22,   22,    4,    2,
-        3,    3,    1,    6,   32,   29,   31,   30,   24,   23,
-       26,   25,   15,   20,    9,   19,   19,   21,   10,   18
+       35,    5,    4,    2,    3,    7,    8,    6,   33,   30,
+       32,   25,   29,   28,   27,   23,   22,   17,   13,   16,
+       20,   23,   11,   12,   19,   19,   14,   23,   23,    4,
+        2,    3,    3,    1,    6,   33,   30,   32,   31,   25,
+       24,   27,   26,   22,   15,   20,    9,   19,   19,   21,
+       10,   18
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -920,7 +931,7 @@  static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
+#define ECHO fwrite( zconftext, zconfleng, 1, zconfout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1183,14 +1194,21 @@  case 22:
 YY_RULE_SETUP
 
 	YY_BREAK
+case 23:
+YY_RULE_SETUP
+{
+		printf("%s:%d:warning: ignoring unsupported character '%c'\n",
+		       zconf_curname(), zconf_lineno(), *zconftext);
+	}
+	YY_BREAK
 case YY_STATE_EOF(PARAM):
 {
 		BEGIN(INITIAL);
 	}
 	YY_BREAK
 
-case 23:
-/* rule 23 can match eol */
+case 24:
+/* rule 24 can match eol */
 *yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up zconftext again */
@@ -1201,14 +1219,14 @@  YY_RULE_SETUP
 		return T_WORD_QUOTE;
 	}
 	YY_BREAK
-case 24:
+case 25:
 YY_RULE_SETUP
 {
 		append_string(zconftext, zconfleng);
 	}
 	YY_BREAK
-case 25:
-/* rule 25 can match eol */
+case 26:
+/* rule 26 can match eol */
 *yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up zconftext again */
@@ -1219,13 +1237,13 @@  YY_RULE_SETUP
 		return T_WORD_QUOTE;
 	}
 	YY_BREAK
-case 26:
+case 27:
 YY_RULE_SETUP
 {
 		append_string(zconftext + 1, zconfleng - 1);
 	}
 	YY_BREAK
-case 27:
+case 28:
 YY_RULE_SETUP
 {
 		if (str == zconftext[0]) {
@@ -1236,8 +1254,8 @@  YY_RULE_SETUP
 			append_string(zconftext, 1);
 	}
 	YY_BREAK
-case 28:
-/* rule 28 can match eol */
+case 29:
+/* rule 29 can match eol */
 YY_RULE_SETUP
 {
 		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
@@ -1252,7 +1270,7 @@  case YY_STATE_EOF(STRING):
 	}
 	YY_BREAK
 
-case 29:
+case 30:
 YY_RULE_SETUP
 {
 		ts = 0;
@@ -1277,8 +1295,8 @@  YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 30:
-/* rule 30 can match eol */
+case 31:
+/* rule 31 can match eol */
 *yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up zconftext again */
@@ -1289,15 +1307,15 @@  YY_RULE_SETUP
 		return T_HELPTEXT;
 	}
 	YY_BREAK
-case 31:
-/* rule 31 can match eol */
+case 32:
+/* rule 32 can match eol */
 YY_RULE_SETUP
 {
 		current_file->lineno++;
 		append_string("\n", 1);
 	}
 	YY_BREAK
-case 32:
+case 33:
 YY_RULE_SETUP
 {
 		while (zconfleng) {
@@ -1328,7 +1346,7 @@  case YY_STATE_EOF(COMMAND):
 	yyterminate();
 }
 	YY_BREAK
-case 33:
+case 34:
 YY_RULE_SETUP
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK