struct logger_config_data {
struct buffering buffering;
- int first_buffer;
struct reader* readers;
+ int is_buffer_enabled[LOG_ID_MAX];
struct buffer_config_data buffers[LOG_ID_MAX];
};
*/
static int print_out_logs(struct reader* reader, struct log_buffer* buffer)
{
+ assert(reader);
+ assert(buffer);
+
int r, ret = 0;
struct logger_entry* ple;
char tmp[LOG_MAX_SIZE];
* @details Adds a reader to the server's reader list
* @param[in] server The server whither to add the reader
* @param[in] reader The reader to add to the server
+ * @return 0 on success, -EINVAL if related buffer not enabled or invalid reader type given
*/
-static void add_reader(struct logger * server, struct reader * reader)
+static int add_reader(struct logger * server, struct reader * reader)
{
+ assert(reader);
+ assert(server);
+
+ int ret = 0;
switch (reader->type) {
case READER_BUFFER:
- reader->current = server->buffers[reader->buf_id]->head;
- LIST_ADD(server->buffers[reader->buf_id]->readers, reader);
+ if (server->buffers[reader->buf_id]) {
+ reader->current = server->buffers[reader->buf_id]->head;
+ LIST_ADD(server->buffers[reader->buf_id]->readers, reader);
+ } else
+ ret = -EINVAL;
break;
case READER_LOGGER:
LIST_ADD(server->extra_readers, reader);
break;
default:
+ ret = -EINVAL;
break;
}
+ return ret;
}
/**
return -EINVAL;
}
- add_reader(server, rd);
+ r = add_reader(server, rd);
+ if (r < 0)
+ return r;
if (wr->readed > msg->length) {
wr->readed -= msg->length;
l->buffering = data->buffering;
int i;
- for (i = data->first_buffer; i < LOG_ID_MAX; i++) {
- int r = buffer_create(l->buffers + i, i, data->buffers + i, l->epollfd);
- if (r < 0)
- return r;
+ for (i = 0; i < LOG_ID_MAX; i++) {
+ if (data->is_buffer_enabled[i]) {
+ int r = buffer_create(l->buffers + i, i, data->buffers + i, l->epollfd);
+ if (r < 0)
+ return r;
+ }
}
/* TODO: make writers creation optional/configurable */
[LOG_ID_KMSG] = create_kmsg_writer,
};
for (i = 0; i < NELEMS(writers_factories); ++i)
- if (writers_factories[i]) {
+ if (writers_factories[i] && data->is_buffer_enabled[i]) {
struct writer *wr;
int r = writers_factories[i](&wr, l->buffers[i]);
if (r < 0)
goto end;
}
- data->first_buffer = !strcmp(backend, "pipe") ? 0 : LOG_ID_KMSG;
+ memset(data->is_buffer_enabled, 0, sizeof(data->is_buffer_enabled));
+ if (!strcmp(backend, "pipe")) {
+ data->is_buffer_enabled[LOG_ID_MAIN] =
+ data->is_buffer_enabled[LOG_ID_RADIO] =
+ data->is_buffer_enabled[LOG_ID_SYSTEM] =
+ data->is_buffer_enabled[LOG_ID_APPS] = 1;
+ }
+ data->is_buffer_enabled[LOG_ID_KMSG] = 1;
int buf_id;
- for (buf_id = data->first_buffer; buf_id < LOG_ID_MAX; ++buf_id) {
- ret = prepare_buffer_data(&conf, data->buffers + buf_id, buf_id);
- if (ret < 0)
- goto end;
+ for (buf_id = 0; buf_id < LOG_ID_MAX; ++buf_id) {
+ if (data->is_buffer_enabled[buf_id]) {
+ ret = prepare_buffer_data(&conf, data->buffers + buf_id, buf_id);
+ if (ret < 0)
+ goto end;
+ }
}
ret = logger_parse_configs(data, &conf);