From 2f7d39e679d1c6b6ae9e28028a9c590819593cf7 Mon Sep 17 00:00:00 2001 From: ngiddings Date: Tue, 23 Aug 2022 12:56:45 -0500 Subject: [PATCH] Improved error handling in queue.c --- include/queue.h | 11 +++++++---- src/queue.c | 11 ++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/include/queue.h b/include/queue.h index 97ac60a..6b8368a 100644 --- a/include/queue.h +++ b/include/queue.h @@ -1,5 +1,7 @@ #pragma once +#include "types/status.h" + struct queue_node_t; /** @@ -38,15 +40,16 @@ void queue_construct(struct queue_t *queue); * @brief Inserts a new item at the end of the queue. * * @param queue - * @param ptr + * @param ptr A pointer to some user-defined data to store on the queue. + * @return enum error_t */ -void queue_insert(struct queue_t *queue, void *ptr); +enum error_t queue_insert(struct queue_t *queue, void *ptr); /** * @brief Removes the next item from the queue and returns it. * * @param queue - * @return void* + * @return void* The pointer stored at the front of the queue. */ void *queue_get_next(struct queue_t *queue); @@ -54,7 +57,7 @@ void *queue_get_next(struct queue_t *queue); * @brief Returns the next item on the queue without removing it. * * @param queue - * @return void* + * @return void* The pointer stored at the front of the queue. */ void *queue_peek(struct queue_t *queue); diff --git a/src/queue.c b/src/queue.c index dc51873..492f257 100644 --- a/src/queue.c +++ b/src/queue.c @@ -23,9 +23,13 @@ void queue_construct(struct queue_t *queue) queue->count = 0; } -void queue_insert(struct queue_t *queue, void *ptr) +enum error_t queue_insert(struct queue_t *queue, void *ptr) { struct queue_node_t *node = kmalloc(sizeof(struct queue_node_t)); + if(node == NULL) + { + return ENOMEM; + } node->ptr = ptr; node->next = NULL; if(queue->last == NULL) @@ -38,11 +42,16 @@ void queue_insert(struct queue_t *queue, void *ptr) queue->last = node; } queue->count++; + return ENONE; } void *queue_get_next(struct queue_t *queue) { struct queue_node_t *node = queue->first; + if(node == NULL) + { + return NULL; + } queue->first = node->next; if(queue->first == NULL) {