u8-istream: Fix handling of UTF-8 byte order marks.
[pspp] / src / libpspp / u8-istream.c
index b172b164f5c382c6055c205f0ea4f8e7ccc0f1c8..22135dbb3381f08ed3f3c70440df99b1d1521dcb 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011, 2012, 2013 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
@@ -122,7 +122,14 @@ u8_istream_for_fd (const char *fromcode, int fd)
 
   encoding = encoding_guess_head_encoding (fromcode, is->buffer, is->length);
   if (is_encoding_utf8 (encoding))
-    is->state = S_UTF8;
+    {
+      unsigned int bom_len;
+
+      is->state = S_UTF8;
+      bom_len = encoding_guess_bom_length (encoding, is->buffer, is->length);
+      is->head += bom_len;
+      is->length -= bom_len;
+    }
   else
     {
       if (encoding_guess_encoding_is_auto (fromcode)