Adding (appending) new items to our queue, continued
void queue_add(QUEUE *Q, void *data, size_t datalen)
{
ELEMENT *newelement;
// ALLOCATE MEMORY FOR A NEW ELEMENT
newelement = calloc(1, sizeof(ELEMENT));
if(newelement == NULL) {
perror( __func__ );
exit(EXIT_FAILURE);
}
// ALLOCATE MEMORY FOR THE DATA IN THE NEW ELEMENT
newelement->data = malloc(datalen);
if(newelement->data == NULL) {
perror( __func__ );
exit(EXIT_FAILURE);
}
// SAVE (COPY) THE UNKNOWN DATA INTO OUR NEW MEMORY
memcpy(newelement->data, data, datalen);
newelement->datalen = datalen;
newelement->next = NULL;
// APPEND THE NEW ELEMENT TO AN EMPTY LIST
if(q->head == NULL) {
q->head = newelement;
q->tail = newelement;
}
// OR APPEND THE NEW ELEMENT TO THE TAIL OF THE LIST
else {
q->tail->next = newelement;
q->tail = newelement;
}
}
|
Writing a function to remove items from our queue,
is left as a simple exercise.
CITS2002 Systems Programming, Lecture 19, p17, 3rd October 2023.
|