diff options
author | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-12-18 03:50:35 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-12-18 03:50:35 +0800 |
commit | 1b8e8b861ea517a296ff4980f3c988926dc41586 (patch) | |
tree | d5daaa4df4ef2b9f188b13c7ec9e77295f8ed20d | |
parent | 9ed571f9de3e7f49e068071affb4c9204ba0527d (diff) | |
download | gsoc2013-evolution-1b8e8b861ea517a296ff4980f3c988926dc41586.tar.gz gsoc2013-evolution-1b8e8b861ea517a296ff4980f3c988926dc41586.tar.zst gsoc2013-evolution-1b8e8b861ea517a296ff4980f3c988926dc41586.zip |
ack, fix a small logic bug.
svn path=/trunk/; revision=15131
-rw-r--r-- | composer/e-msg-composer.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index f2112f67c2..35be879162 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -674,38 +674,33 @@ read_file_content (int fd) char *body, buf[4096]; struct timeval tv; fd_set rdset; + int retval; ssize_t n; - int flags; g_return_val_if_fail (fd > 0, NULL); contents = g_byte_array_new (); - flags = fcntl (fd, F_GETFL); - fcntl (fd, F_SETFL, flags | O_NONBLOCK); - FD_ZERO (&rdset); FD_SET (fd, &rdset); - do { - tv.tv_sec = 0; - tv.tv_usec = 10; - - n = -1; - select (fd + 1, &rdset, NULL, NULL, &tv); - if (FD_ISSET (fd, &rdset)) { - n = read (fd, buf, 4096); + tv.tv_sec = 0; + tv.tv_usec = 10; + + retval = select (fd + 1, &rdset, NULL, NULL, &tv); + if (retval) { + n = 0; + while (n >= 0 || errno == EINTR) { + n = read (fd, buf, sizeof (buf)); if (n > 0) g_byte_array_append (contents, buf, n); } - } while (n != -1); - - fcntl (fd, F_SETFL, flags); + } g_byte_array_append (contents, "", 1); body = (contents->len == 1) ? NULL : (char *) contents->data; - g_byte_array_free (contents, body != NULL); + g_byte_array_free (contents, body == NULL); return body; } |