return retval;
}
- log_id_t buf_id = bit_single(params->enabled_buffers);
- if (!is_core_buffer(buf_id))
- return -EINVAL;
-
if ((params->file.path == NULL && !params->compression)
|| (params->file.path != NULL && params->compression))
return -EINVAL;
- retval = reader_pipe_init(&reader, buf_id, server, params->monitor, params->is_dumping);
+ retval = reader_pipe_init(&reader, params->enabled_buffers, server, params->monitor, params->is_dumping);
if (retval != 0)
return retval;
#include "reader_pipe.h"
+#include <buffer_traits.h>
#include "logger_internal.h"
static void reader_pipe_free(struct reader_common *_reader)
return ret;
}
-int reader_pipe_init(struct reader_pipe **reader, log_id_t buf_id, struct logger *server,
+int reader_pipe_init(struct reader_pipe **reader, int enabled_buffers, struct logger *server,
bool monitor, bool is_dumping)
{
assert(reader);
- assert(buf_id > LOG_ID_INVALID);
- assert(buf_id < LOG_ID_MAX);
assert(server);
__attribute__((cleanup(reader_free_ptr))) struct reader_pipe *ret = reader_pipe_alloc(server, monitor, is_dumping);
if (!ret)
return -ENOMEM;
- log_storage_reader *const lsr = log_storage_new_reader(server->buffers[buf_id]->log_storage_ptr,
- is_dumping, monitor, reader_pipe_notify_losing_log, ret);
- if (!lsr)
- return -ENOMEM;
- ret->log_storage_reader_ptrs[0] = lsr;
+ for (int i = 0; i < LOG_ID_MAX; ++i) {
+ if (!(enabled_buffers & (1 << i)))
+ continue;
+
+ const struct log_buffer *const buffer = server->buffers[i];
+ if (!buffer)
+ continue;
+
+ log_storage_reader *const lsr = log_storage_new_reader(buffer->log_storage_ptr,
+ is_dumping, monitor, reader_pipe_notify_losing_log, ret);
+ if (!lsr)
+ return -ENOMEM;
+ ret->log_storage_reader_ptrs[i] = lsr;
+ }
init_fd_entity(&ret->common.fd_entity_sink, dispatch_event_reader, ret);
init_fd_entity(&ret->common.fd_entity_source, dispatch_event_reader, ret);
log_storage_reader *log_storage_reader_ptrs[LOG_ID_MAX];
};
-int reader_pipe_init(struct reader_pipe **reader, log_id_t buf_id, struct logger *server,
+int reader_pipe_init(struct reader_pipe **reader, int enabled_buffers, struct logger *server,
bool monitor, bool is_dumping);
int reader_pipe_init_with_writer(struct reader_pipe **reader, struct writer *writer, struct logger *server,
bool monitor, bool is_dumping);