mmenu fixes -- ensuring tab visibility when going to subcat-folder and back up to...
[pandora-libraries.git] / lib / pnd_container.c
index f1fdef6..ca9dac8 100644 (file)
@@ -115,7 +115,7 @@ void *pnd_box_find_by_key ( pnd_box_handle box, char *key ) {
 
   while ( n ) {
 
-    if ( strcmp ( n -> key, key ) == 0 ) {
+    if ( strcasecmp ( n -> key, key ) == 0 ) {
       return ( NODE2PAYLOAD(n) );
     }
 
@@ -132,6 +132,9 @@ char *pnd_box_get_name ( pnd_box_handle box ) {
 
 void *pnd_box_get_head ( pnd_box_handle box ) {
   pnd_box_t *p = (pnd_box_t*) box;
+  if ( ! p ) {
+    return ( NULL ); // fubar!
+  }
   if ( ! p -> head ) {
     return ( NULL );
   }
@@ -151,3 +154,63 @@ char *pnd_box_get_key ( void *node ) {
   pnd_box_node_t *p = PAYLOAD2NODE(node);
   return ( p -> key );
 }
+
+unsigned int pnd_box_get_size ( pnd_box_handle box ) {
+  pnd_box_t *p = (pnd_box_t*) box;
+  pnd_box_node_t *n;
+  unsigned int count = 0;
+
+  if ( ! p ) {
+    return ( 0 );
+  }
+
+  n = p -> head;
+
+  while ( n ) {
+
+    count++;
+
+    n = n -> next;
+  } // while
+
+  return ( count );
+}
+
+unsigned char pnd_box_append ( pnd_box_handle box, pnd_box_handle append ) {
+  pnd_box_t *pbox = (pnd_box_t*) box;
+  pnd_box_t *pappend = (pnd_box_t*) append;
+
+  if ( pbox -> head ) {
+    pnd_box_node_t *n = pbox -> head;
+    while ( n -> next ) {
+      n = n -> next;
+    }
+    // by now, n -> next == NULL
+    n -> next = pappend -> head;
+  } else {
+    pbox -> head = pappend -> head;
+  }
+
+  return ( 1 );
+}
+
+void pnd_box_delete_node ( pnd_box_handle box, void *value ) {
+  pnd_box_t *pbox = (pnd_box_t*) box;
+  pnd_box_node_t *p = PAYLOAD2NODE(value);
+
+  if ( pbox -> head == p ) {
+    pbox -> head = p -> next;
+    free ( p );
+  } else {
+    pnd_box_node_t *i = pbox -> head;
+    while ( i && i -> next != p ) {
+      i = i -> next;
+    }
+    if ( i -> next == p ) {
+      i -> next = p -> next;
+      free ( p );
+    }
+  }
+
+  return;
+}