]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/util/queue.c
Add asprint() compatibility function for systems lacking it
[netatalk.git] / libatalk / util / queue.c
index b7b697f41375cd74196a836158535ef448a2d3f7..114e6401aa2da7c199cc4c6e95fe1d7815ea43a3 100644 (file)
@@ -1,5 +1,4 @@
 /*
-  $Id: queue.c,v 1.1.2.1 2010-02-01 10:56:08 franklahm Exp $
   Copyright (c) 2010 Frank Lahm <franklahm@gmail.com>
 
   This program is free software; you can redistribute it and/or modify
@@ -40,9 +39,9 @@ static qnode_t *alloc_init_node(void *data)
  * Interface
  *******************************************************************************/
 
-queue_t *queue_init(void)
+q_t *queue_init(void)
 {
-    queue_t *queue;
+    q_t *queue;
 
     if ((queue = alloc_init_node(NULL)) == NULL)
         return NULL;
@@ -51,7 +50,8 @@ queue_t *queue_init(void)
     return queue;
 }
 
-qnode_t *enqueue(queue_t *q, void *data)
+/* Insert at tail */
+qnode_t *enqueue(q_t *q, void *data)
 {
     qnode_t *node;
 
@@ -67,7 +67,25 @@ qnode_t *enqueue(queue_t *q, void *data)
     return node;
 }
 
-void *dequeue(queue_t *q)
+/* Insert at head */
+qnode_t *prequeue(q_t *q, void *data)
+{
+    qnode_t *node;
+
+    if ((node = alloc_init_node(data)) == NULL)
+        return NULL;
+
+    /* insert at head */
+    q->next->prev = node;
+    node->next = q->next;
+    node->prev = q;
+    q->next = node;
+
+    return node;
+}
+
+/* Take from head */
+void *dequeue(q_t *q)
 {
     qnode_t *node;
     void *data;
@@ -85,7 +103,7 @@ void *dequeue(queue_t *q)
     return data;    
 }
 
-void queue_destroy(queue_t *q, void (*callback)(void *))
+void queue_destroy(q_t *q, void (*callback)(void *))
 {
     void *p;