summaryrefslogtreecommitdiff
path: root/lib/write.c
diff options
context:
space:
mode:
authorBenoît Dejean <benoit@placenet.org>2007-02-14 22:19:01 +0000
committerBenoît Dejean <bdejean@src.gnome.org>2007-02-14 22:19:01 +0000
commit09f8aaec1ed8363b494582b7431792c796772380 (patch)
treef00987f9d037bdfe04a61b5ae5b409aefd866381 /lib/write.c
parent9f509067d46c9091127ea72f4f4576eebc375093 (diff)
downloadlibgtop-09f8aaec1ed8363b494582b7431792c796772380.tar.gz
Handle EINTR.
2007-02-14 Benoît Dejean <benoit@placenet.org> * lib/read.c: (glibtop_read_l): * lib/write.c: (glibtop_write_l): Handle EINTR. * configure.in: Post release version bump. svn path=/trunk/; revision=2554
Diffstat (limited to 'lib/write.c')
-rw-r--r--lib/write.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/write.c b/lib/write.c
index 2d301b3e..55f527a1 100644
--- a/lib/write.c
+++ b/lib/write.c
@@ -22,7 +22,7 @@
*/
#include <config.h>
-
+#include <errno.h>
#include <glibtop/write.h>
#include <glibtop/error.h>
#include <glib/gi18n-lib.h>
@@ -33,6 +33,7 @@ void
glibtop_write_l (glibtop *server, size_t size, void *buf)
{
int ret;
+ int fd;
glibtop_init_r (&server, 0, 0);
@@ -42,11 +43,10 @@ glibtop_write_l (glibtop *server, size_t size, void *buf)
fprintf (stderr, "LIBRARY: really writing %d bytes.\n", (int)size);
#endif
- if (server->socket) {
- ret = send (server->socket, buf, size, 0);
- } else {
- ret = write (server->output [1], buf, size);
- }
+ fd = server->socket ? server->socket : server->output[1];
+
+ while ((ret = write(fd, buf, size)) < 0 && errno == EINTR)
+ ;
if (ret < 0)
glibtop_error_io_r (server,