return bytes_written;
}
+int pakfire_buffer_fill(struct pakfire_buffer* self,
+ struct pakfire_ctx* ctx, pakfire_buffer_input_callback callback, void* data) {
+ ssize_t bytes_written = 0;
+ int r;
+
+ // This is not supported if there is no maximum length
+ if (!self->max_length)
+ return -ENOTSUP;
+
+ // Nothing to do if the buffer is full
+ if (pakfire_buffer_is_full(self))
+ return 0;
+
+ // Grow the buffer to its maximum length
+ r = pakfire_buffer_resize(self, self->max_length);
+ if (r < 0)
+ return r;
+
+ // Call the callback
+ bytes_written = callback(ctx, data, self->data + self->used, self->length - self->used);
+ if (bytes_written < 0)
+ return bytes_written;
+
+ // Update the used space
+ self->used += bytes_written;
+
+ return bytes_written;
+}
+
size_t pakfire_buffer_find_line(struct pakfire_buffer* self) {
char* p = NULL;
#ifndef PAKFIRE_BUFFER_H
#define PAKFIRE_BUFFER_H
+#include <pakfire/ctx.h>
+
+typedef ssize_t (*pakfire_buffer_input_callback)
+ (struct pakfire_ctx* ctx, void* data, char* buffer, size_t length);
+
struct pakfire_buffer {
char* data;
size_t length;
int pakfire_buffer_read(struct pakfire_buffer* self, int fd);
int pakfire_buffer_write(struct pakfire_buffer* self, int fd);
+int pakfire_buffer_fill(struct pakfire_buffer* self,
+ struct pakfire_ctx* ctx, pakfire_buffer_input_callback callback, void* data);
+
size_t pakfire_buffer_find_line(struct pakfire_buffer* self);
#endif /* PAKFIRE_BUFFER_H */