Implement buffer_write.
authorPierre Habouzit <madcoder@debian.org>
Sun, 2 Dec 2007 11:36:28 +0000 (12:36 +0100)
committerPierre Habouzit <madcoder@debian.org>
Sun, 2 Dec 2007 11:36:28 +0000 (12:36 +0100)
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
buffer.c
buffer.h

index bdd5715..4e41b3c 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -33,6 +33,7 @@
  * Copyright © 2006-2007 Pierre Habouzit
  */
 
+#include <errno.h>
 #include <stdio.h>
 #include <unistd.h>
 
@@ -80,3 +81,13 @@ ssize_t buffer_read(buffer_t *buf, int fd, ssize_t count)
     buffer_extend(buf, res);
     return res;
 }
+
+ssize_t buffer_write(buffer_t *buf, int fd)
+{
+    ssize_t res = write(fd, buf->data, buf->len);
+    if (res < 0) {
+        return errno == EINTR || errno == EAGAIN ? 0 : -1;
+    }
+    buffer_consume(buf, res);
+    return res;
+}
index c399259..816788a 100644 (file)
--- a/buffer.h
+++ b/buffer.h
@@ -105,5 +105,6 @@ static inline void buffer_addch(buffer_t *buf, int c) {
 void buffer_consume(buffer_t *buf, ssize_t len);
 
 ssize_t buffer_read(buffer_t *buf, int fd, ssize_t count);
+ssize_t buffer_write(buffer_t *buf, int fd);
 
 #endif /* PFIXTOOLS_BUFFER_H */