bool queue_push_after(struct queue *queue, void *entry, void *data) { struct queue_entry *qentry, *tmp, *new_entry; qentry = NULL; if (!queue) return false; for (tmp = queue->head; tmp; tmp = tmp->next) { if (tmp->data == entry) { qentry = tmp; break; } } if (!qentry) return false; new_entry = queue_entry_new(data); if (!new_entry) return false; new_entry->next = qentry->next; if (!qentry->next) queue->tail = new_entry; qentry->next = new_entry; queue->entries++; return true; }
bool queue_push_head(struct queue *queue, void *data) { struct queue_entry *entry; if (!queue) return false; entry = queue_entry_new(data); entry->next = queue->head; queue->head = entry; if (!queue->tail) queue->tail = entry; queue->entries++; return true; }