logger: separate add reader to buffer function 41/129841/2
authorRafal Pietruch <r.pietruch@samsung.com>
Mon, 15 May 2017 10:11:34 +0000 (12:11 +0200)
committerRafal Pietruch <r.pietruch@samsung.com>
Thu, 18 May 2017 14:59:43 +0000 (16:59 +0200)
Change-Id: I2d9a90bfdddea3ada81c543f31ba9b6d486b583b

src/logger/logger.c

index ee3d6d8..a9bd2c8 100644 (file)
@@ -1004,31 +1004,47 @@ static int service_reader(struct logger* server, struct reader* reader)
 }
 
 /**
+ * @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;