summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libply/ply-buffer.c20
-rw-r--r--src/libply/ply-buffer.h3
2 files changed, 23 insertions, 0 deletions
diff --git a/src/libply/ply-buffer.c b/src/libply/ply-buffer.c
index 69b45ff..eb9e1d7 100644
--- a/src/libply/ply-buffer.c
+++ b/src/libply/ply-buffer.c
@@ -192,6 +192,26 @@ ply_buffer_append_bytes (ply_buffer_t *buffer,
buffer->size += length;
}
+void
+ply_buffer_append_from_fd (ply_buffer_t *buffer,
+ int fd)
+{
+
+ char bytes[PLY_BUFFER_MAX_APPEND_SIZE] = "";
+ ssize_t bytes_read;
+
+ assert (buffer != NULL);
+ assert (fd >= 0);
+
+ if (!ply_fd_has_data (fd))
+ return;
+
+ bytes_read = read (fd, bytes, sizeof (bytes));
+
+ if (bytes_read > 0)
+ ply_buffer_append_bytes (buffer, bytes, bytes_read);
+}
+
const char *
ply_buffer_get_bytes (ply_buffer_t *buffer)
{
diff --git a/src/libply/ply-buffer.h b/src/libply/ply-buffer.h
index e73a47c..d8686a5 100644
--- a/src/libply/ply-buffer.h
+++ b/src/libply/ply-buffer.h
@@ -34,6 +34,9 @@ void ply_buffer_free (ply_buffer_t *buffer);
void ply_buffer_append_bytes (ply_buffer_t *buffer,
const void *bytes,
size_t number_of_bytes);
+
+void ply_buffer_append_from_fd (ply_buffer_t *buffer,
+ int fd);
#define ply_buffer_append(buffer, format, args...) \
ply_buffer_append_with_non_literal_format_string (buffer, \
format "", ##args)