Fix error message for bad characters in syntax files.
authorBen Pfaff <blp@gnu.org>
Fri, 27 Mar 2009 04:11:12 +0000 (21:11 -0700)
committerBen Pfaff <blp@gnu.org>
Fri, 27 Mar 2009 04:11:43 +0000 (21:11 -0700)
Before this commit, on systems where "char" is a signed type,
formatting a char with %o would sign-extend to the width of "int",
so that a typical error message would look like:
   Bad character in input: `\37777777605'.

With this commit, the value gets zero-extended, producing the more
sensible error mesage:
   Bad character in input: `\205'.

src/language/lexer/lexer.c

index 16195b0dd22303a92f5c3075488f58ec8da5d088..265116141eb36f0d8ffa685a326431cd79f7b7ad 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -384,10 +384,11 @@ lex_get (struct lexer *lexer)
             }
           else
             {
-              if (c_isgraph ((unsigned char) *lexer->prog))
-                msg (SE, _("Bad character in input: `%c'."), *lexer->prog++);
+              unsigned char c = *lexer->prog++;
+              if (c_isgraph (c))
+                msg (SE, _("Bad character in input: `%c'."), c);
               else
-                msg (SE, _("Bad character in input: `\\%o'."), *lexer->prog++);
+                msg (SE, _("Bad character in input: `\\%o'."), c);
               continue;
             }
         }