zip-reader.c: Fix memory leak
[pspp] / src / libpspp / u8-istream.c
index c11163435f04bcf53d54c55f94960cc8de972955..b172b164f5c382c6055c205f0ea4f8e7ccc0f1c8 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011, 2012 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
@@ -34,6 +34,7 @@
 #include "libpspp/cast.h"
 #include "libpspp/compiler.h"
 #include "libpspp/encoding-guesser.h"
+#include "libpspp/i18n.h"
 
 #include "gl/c-strcase.h"
 #include "gl/localcharset.h"
@@ -120,7 +121,7 @@ u8_istream_for_fd (const char *fromcode, int fd)
     goto error;
 
   encoding = encoding_guess_head_encoding (fromcode, is->buffer, is->length);
-  if (!strcmp (encoding, "UTF-8"))
+  if (is_encoding_utf8 (encoding))
     is->state = S_UTF8;
   else
     {
@@ -193,8 +194,12 @@ fill_buffer (struct u8_istream *is)
   is->head = is->buffer;
 
   /* Read more input. */
-  n = read (is->fd, is->buffer + is->length,
-            U8_ISTREAM_BUFFER_SIZE - is->length);
+  do
+    {
+      n = read (is->fd, is->buffer + is->length,
+                U8_ISTREAM_BUFFER_SIZE - is->length);
+    }
+  while (n < 0 && errno == EINTR);
   if (n > 0)
     is->length += n;
   return n;