void *LQRemoveAfterSpec(manager *m, void *test, int (*cmp)(void *, void *)) { node *spec; node *prev; void *data; if(m != NULL) { if(m->first != NULL) { spec = m->head; prev = NULL; while(cmp(spec->data, test) == FALSE && spec->next != NULL) { prev = spec; spec = spec->next; } if(cmp(spec->data,test) == TRUE && spec->next != NULL) { prev = spec; spec = spec->next; data = spec->data; if(prev != NULL) { prev->next = spec->next; } else { m->head = spec->next; } free(spec); return data; } } } return NULL; } int LQAddBeforeSpec(manager *m, void *test, int (*cmp)(void *, void *), void *data) { node *spec; node *prev; node *newN; newN = (node*) malloc(sizeof(node)); if(newN == NULL) { return FALSE; } newN->data = data; if(m != NULL) { if(m->first != NULL) { spec = m->head; prev = NULL; while(cmp(spec->data, test) == FALSE && spec->next != NULL) { prev = spec; spec = spec->next; } if(cmp(spec->data,test) == TRUE) { if(prev == NULL) if(prev != NULL) { prev->next = newN; } else { m->head = newN; } newN->next = spec; return TRUE; } } } return FALSE; }