CITS2002 Systems Programming  
prev
next CITS2002 CITS2002 schedule  

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.