}
/**
+ * @brief Add reader to log buffer
+ * @details Adds a reader to the log buffers reader list
+ * @param[in] log_buffer The buffer whither to add the reader
+ * @param[in] reader The reader to add to the buffer
+ * @return 0 on success, -ENOMEM on memory allocation error
+ */
+static int add_buffer_reader(struct log_buffer *buffer, struct reader *reader)
+{
+ assert(reader);
+ assert(buffer);
+ assert(reader->type == READER_BUFFER);
+
+ reader->current = buffer->head;
+ reader->bytes_to_read = buffer_used_space(buffer);
+ return list_add(&buffer->readers, reader) ? 0 : -ENOMEM;
+}
+
+/**
* @brief Add reader to server
* @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
+ * -ENOMEM on memory allocation error
*/
-static int 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;
+ int ret;
switch (reader->type) {
- case READER_BUFFER: {
- const struct log_buffer *const buf = server->buffers[reader->buf_id];
- if (buf) {
- reader->current = buf->head;
- reader->bytes_to_read = buffer_used_space(buf);
- list_add(&server->buffers[reader->buf_id]->readers, reader);
- } else
+ case READER_BUFFER:
+ assert(reader->buf_id >= 0 && reader->buf_id < NELEMS(server->buffers));
+ if (server->buffers[reader->buf_id])
+ ret = add_buffer_reader(server->buffers[reader->buf_id], reader);
+ else
ret = -EINVAL;
break;
- }
case READER_LOGGER:
- list_add(&server->extra_readers, reader);
+ ret = list_add(&server->extra_readers, reader) ? 0 : -ENOMEM;
break;
default:
ret = -EINVAL;