projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge 'master' into 'psppsheet'.
[pspp]
/
src
/
libpspp
/
u8-istream.c
diff --git
a/src/libpspp/u8-istream.c
b/src/libpspp/u8-istream.c
index 6d4d7707de628afdec78cf9c0b07e325b5b89307..b172b164f5c382c6055c205f0ea4f8e7ccc0f1c8 100644
(file)
--- a/
src/libpspp/u8-istream.c
+++ b/
src/libpspp/u8-istream.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* 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
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
@@
-22,6
+22,7
@@
#include <errno.h>
#include <fcntl.h>
#include <iconv.h>
#include <errno.h>
#include <fcntl.h>
#include <iconv.h>
+#include <limits.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@
-33,6
+34,7
@@
#include "libpspp/cast.h"
#include "libpspp/compiler.h"
#include "libpspp/encoding-guesser.h"
#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"
#include "gl/c-strcase.h"
#include "gl/localcharset.h"
@@
-119,7
+121,7
@@
u8_istream_for_fd (const char *fromcode, int fd)
goto error;
encoding = encoding_guess_head_encoding (fromcode, is->buffer, is->length);
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
{
is->state = S_UTF8;
else
{
@@
-192,8
+194,12
@@
fill_buffer (struct u8_istream *is)
is->head = is->buffer;
/* Read more input. */
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;
if (n > 0)
is->length += n;
return n;
@@
-252,7
+258,8
@@
convert_iconv (iconv_t converter,
char **inbufp, size_t *inbytesleft,
char **outbufp, size_t *outbytesleft)
{
char **inbufp, size_t *inbytesleft,
char **outbufp, size_t *outbytesleft)
{
- size_t n = iconv (converter, inbufp, inbytesleft, outbufp, outbytesleft);
+ size_t n = iconv (converter, (ICONV_CONST char **) inbufp, inbytesleft,
+ outbufp, outbytesleft);
return n == SIZE_MAX ? errno : 0;
}
return n == SIZE_MAX ? errno : 0;
}