while ( n ) {
- if ( strcmp ( n -> key, key ) == 0 ) {
+ if ( strcasecmp ( n -> key, key ) == 0 ) {
return ( NODE2PAYLOAD(n) );
}
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 );
}
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;
+}