Ignore UTF-8 BOMs. See Savannah bug #36529.
authorPaul Smith <psmith@gnu.org>
Sun, 9 Sep 2012 21:11:00 +0000 (21:11 +0000)
committerPaul Smith <psmith@gnu.org>
Sun, 9 Sep 2012 21:11:00 +0000 (21:11 +0000)
ChangeLog
read.c
tests/ChangeLog
tests/scripts/features/utf8 [new file with mode: 0644]

index 786f438fb67ba02fab21bfc540218bfbcb7a9e49..94e4aabea521c6f9e6c71a4ee685d4b472d089be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-09-09  Paul Smith  <psmith@gnu.org>
+
+       * read.c (eval): If we detect an initial UTF-8 BOM, skip it.
+       Fixes Savannah bug #36529.
+       (record_target_var): Remove unused variable "fname".
+
 2012-09-09  Eli Zaretskii  <eliz@gnu.org>
 
        * read.c (unescape_char): Fix a thinko in the last change.
diff --git a/read.c b/read.c
index d4bfb9c37a9964b3280365c9da6444cdf21de64a..b28c66fb04eb56231c42cae692f2a20b720bf0ab 100644 (file)
--- a/read.c
+++ b/read.c
@@ -619,8 +619,24 @@ eval (struct ebuffer *ebuf, int set_default)
       if (nlines < 0)
         break;
 
-      /* If this line is empty, skip it.  */
       line = ebuf->buffer;
+
+      /* If this is the first line, check for a UTF-8 BOM and skip it.  */
+      if (ebuf->floc.lineno == 1 && line[0] == (char)0xEF
+          && line[1] == (char)0xBB && line[2] == (char)0xBF)
+        {
+          line += 3;
+          if (ISDB(DB_BASIC))
+            {
+              if (ebuf->floc.filenm)
+                printf (_("Skipping UTF-8 BOM in makefile '%s'\n"),
+                        ebuf->floc.filenm);
+              else
+                printf (_("Skipping UTF-8 BOM in makefile buffer\n"));
+            }
+        }
+
+      /* If this line is empty, skip it.  */
       if (line[0] == '\0')
         continue;
 
@@ -1741,7 +1757,6 @@ record_target_var (struct nameseq *filenames, char *defn,
     {
       struct variable *v;
       const char *name = filenames->name;
-      const char *fname;
       const char *percent;
       struct pattern_var *p;
 
@@ -1766,8 +1781,6 @@ record_target_var (struct nameseq *filenames, char *defn,
             v->value = allocated_variable_expand (v->value);
           else
             v->value = xstrdup (v->value);
-
-          fname = p->target;
         }
       else
         {
@@ -1784,7 +1797,6 @@ record_target_var (struct nameseq *filenames, char *defn,
             f = f->double_colon;
 
           initialize_file_variables (f, 1);
-          fname = f->name;
 
           current_variable_set_list = f->variables;
           v = try_variable_definition (flocp, defn, origin, 1);
index f9585e61109afe1d1bfd37371a3f30d2af50f16e..aa572d305babf2012be83e6d886a1653fb7e71e2 100644 (file)
@@ -1,5 +1,8 @@
 2012-09-09  Paul Smith  <psmith@gnu.org>
 
+       * scripts/features/utf8: New test for UTF-8 support.
+       See Savannah bug #36529.
+
        * scripts/targets/POSIX: Add tests for default macro values as
        specified by IEEE Std 1003.1-2008.  See Savannah bug #37069.
 
diff --git a/tests/scripts/features/utf8 b/tests/scripts/features/utf8
new file mode 100644 (file)
index 0000000..54bc471
--- /dev/null
@@ -0,0 +1,11 @@
+#                                                                    -*-perl-*-
+
+$description = "Test support for UTF-8.";
+
+$details = "";
+
+# Verify that the UTF-8 BOM is ignored.
+run_make_test("\xEF\xBB\xBFall: ; \@echo \$\@\n", '', "all");
+
+# This tells the test driver that the perl test script executed properly.
+1;