static int pakfire_log_stream_fill_buffer(struct pakfire_log_stream* stream, int fd) {
ssize_t bytes_read;
+ if (stream->buffered >= sizeof(stream->buffer))
+ return -EAGAIN;
+
// Read into the buffer
bytes_read = read(fd, stream->buffer + stream->buffered, sizeof(stream->buffer) - stream->buffered);
if (bytes_read < 0)
for (;;) {
// Find the next line
eol = memchr(stream->buffer, '\n', stream->buffered);
- if (!eol)
- return 0;
+ if (!eol) {
+ if (stream->buffered < sizeof(stream->buffer))
+ return 0;
+ }
// Determine the length of the line
- length = eol - stream->buffer + 1;
+ if (eol)
+ length = eol - stream->buffer + 1;
+ else
+ length = stream->buffered;
// Call the callback
r = stream->callback(stream, stream->buffer, length, stream->data);