#include "queue.h" /* Author: Justin Kenny Creates a queue to hold packets for shared memory based on a linked list */ //Initializes the queue.s void queue_init(queue_t *queue) { queue->head = NULL; queue->tail = NULL; queue->size = 0; } //Returns a pointer to the new queue node. If it return null, then malloc failed. queue_node_t* enqueue(queue_t *queue, packet_t* packet) { queue_node_t *n; n = malloc(sizeof(*n)); if(n) { n->data = packet; if(queue->head) { queue->tail->next = n; n->prev = queue->tail; queue->tail = n; } else { //the queue is empty queue->head = queue->tail = n; } queue->size++; } return n; } packet_t* dequeue(queue_t *queue) { queue_node_t *n; if(!queue->head) { return NULL; } if(queue->head == queue->tail) { n = queue->head; queue->head = queue->tail = NULL; } else { queue_node_t *next; next = queue->head->next; n = queue->head; next->prev = NULL; queue->head = next; } packet_t *packet = n->data; free(n); return packet; }