Fix parsing hex constants in strings. Add test for the fix.
authorNick Clifton <nickc@redhat.com>
Tue, 9 Apr 2002 15:36:43 +0000 (15:36 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 9 Apr 2002 15:36:43 +0000 (15:36 +0000)
binutils/ChangeLog
binutils/rclex.l
binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/windres/escapex.rc [new file with mode: 0644]
binutils/testsuite/binutils-all/windres/escapex.rsd [new file with mode: 0644]

index 18f1baac069068092c69ca2eda14bbf34dfc671e..f1fab3fb57fbe8b1ef561bc7c8425cff8446d641 100644 (file)
@@ -2,7 +2,9 @@
 
        * rcparse.y: CLASS definitions in DIALOG resources 
        are quoted.
-       Fix typo in BEDIT warning
+       Fix typo in BEDIT warning.
+
+       * rclex.l: "\xhex" encoding in strings corrected.
 
 2002-04-09  Gunnar Degnbol <degnbol@danbbs.dk>
 
index c9073e2ac38d7b24d9db2d0cfbcffeb84fc8e602..f20c82ff2b71788527cba95dd36c8df4c38e1fba 100644 (file)
@@ -1,5 +1,5 @@
 %{ /* rclex.l -- lexer for Windows rc files parser  */
-/* Copyright 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
+/* Copyright 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GNU Binutils.
@@ -284,11 +284,11 @@ cpp_line (s)
   if (!initial_fn)
     {
       initial_fn = xmalloc (strlen (fn) + 1);
-      strcpy(initial_fn, fn);
+      strcpy (initial_fn, fn);
     }
 
   /* Allow the initial file, regardless of name.  Suppress all other
-     files if they end in ".h" (this allows included "*.rc") */
+     files if they end in ".h" (this allows included "*.rc") */
   if (strcmp (initial_fn, fn) == 0
       || strcmp (fn + strlen (fn) - 2, ".h") != 0)
     suppress_cpp_data = 0;
@@ -394,9 +394,9 @@ handle_quotes (input, len)
                  if (*t >= '0' && *t <= '9')
                    ch = (ch << 4) | (*t - '0');
                  else if (*t >= 'a' && *t <= 'f')
-                   ch = (ch << 4) | (*t - 'a');
+                   ch = (ch << 4) | (*t - 'a' + 10);
                  else if (*t >= 'A' && *t <= 'F')
-                   ch = (ch << 4) | (*t - 'A');
+                   ch = (ch << 4) | (*t - 'A' + 10);
                  else
                    break;
                  ++t;
index e61a6873b63f887a59665950db9e6b714af539c8..9c84fd74ca5e9cdcd76fd465f880313c554ec9d4 100644 (file)
@@ -1,5 +1,9 @@
 2002-04-09  Nick Clifton  <nickc@cambridge.redhat.com>
 
+       * binutils-all/windres/escapex.rc: New test case for hex constants
+       in strings.
+       * binutils-all/windres/escapex.rsd: Expected output
+
        * binutils-all/windres/quoteclass.rc: New test case for quoted
        CLASS definitions in DIALOG resources.
 
diff --git a/binutils/testsuite/binutils-all/windres/escapex.rc b/binutils/testsuite/binutils-all/windres/escapex.rc
new file mode 100644 (file)
index 0000000..1a025f6
--- /dev/null
@@ -0,0 +1,4 @@
+101 DIALOG DISCARDABLE  0, 0, 186, 95
+BEGIN
+    LTEXT "\xB0",-1,23,46,28,8
+END
diff --git a/binutils/testsuite/binutils-all/windres/escapex.rsd b/binutils/testsuite/binutils-all/windres/escapex.rsd
new file mode 100644 (file)
index 0000000..9165342
--- /dev/null
@@ -0,0 +1,8 @@
+ 0000 00000000 20000000 ffff0000 ffff0000  .... ...........
+ 0010 00000000 00000000 00000000 00000000  ................
+ 0020 34000000 20000000 ffff0500 ffff6500  4... .........e.
+ 0030 00000000 10100000 00000000 00000000  ................
+ 0040 00008880 00000000 01000000 0000ba00  ................
+ 0050 5f000000 00000000 00000250 00000000  _..........P....
+ 0060 17002e00 1c000800 ffffffff 8200b000  ................
+ 0070 00000000                             ....