From f02f88f3368caa13f322d4761ce9f783e80b997f Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Sat, 30 Jul 2022 21:13:30 +0100 Subject: [PATCH] mg_rpc_free -> mg_rpc_del --- mongoose.c | 16 ++++++++++------ mongoose.h | 2 +- src/rpc.c | 16 ++++++++++------ src/rpc.h | 2 +- test/unit_test.c | 2 +- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/mongoose.c b/mongoose.c index e67959cc..13614630 100644 --- a/mongoose.c +++ b/mongoose.c @@ -3573,12 +3573,16 @@ void mg_rpc_add(void **head, struct mg_str method, rpc->next = (struct mg_rpc *) *head, *head = rpc; } -void mg_rpc_free(void **head) { - while (head != NULL && *head != NULL) { - struct mg_rpc *rpc = *(struct mg_rpc **) head; - *head = rpc->next; - free((void *) rpc->method.ptr); - free(rpc); +void mg_rpc_del(void **head, void (*fn)(struct mg_rpc_req *)) { + struct mg_rpc *r, **h = (struct mg_rpc **) head; + while ((r = *h) != NULL) { + if (r->fn == fn || fn == NULL) { + *h = r->next; + free((void *) r->method.ptr); + free(r); + } else { + h = &(*h)->next; + } } } diff --git a/mongoose.h b/mongoose.h index 89c028e9..41971929 100644 --- a/mongoose.h +++ b/mongoose.h @@ -1374,7 +1374,7 @@ struct mg_rpc_req { void mg_rpc_add(void **head, struct mg_str method_pattern, void (*handler)(struct mg_rpc_req *), void *handler_data); -void mg_rpc_free(void **head); +void mg_rpc_del(void **head, void (*handler)(struct mg_rpc_req *)); void mg_rpc_process(struct mg_rpc_req *); // Helper functions to print result or error frame diff --git a/src/rpc.c b/src/rpc.c index 03d6951a..c054cb48 100644 --- a/src/rpc.c +++ b/src/rpc.c @@ -14,12 +14,16 @@ void mg_rpc_add(void **head, struct mg_str method, rpc->next = (struct mg_rpc *) *head, *head = rpc; } -void mg_rpc_free(void **head) { - while (head != NULL && *head != NULL) { - struct mg_rpc *rpc = *(struct mg_rpc **) head; - *head = rpc->next; - free((void *) rpc->method.ptr); - free(rpc); +void mg_rpc_del(void **head, void (*fn)(struct mg_rpc_req *)) { + struct mg_rpc *r, **h = (struct mg_rpc **) head; + while ((r = *h) != NULL) { + if (r->fn == fn || fn == NULL) { + *h = r->next; + free((void *) r->method.ptr); + free(r); + } else { + h = &(*h)->next; + } } } diff --git a/src/rpc.h b/src/rpc.h index c066a18c..35d4f2ad 100644 --- a/src/rpc.h +++ b/src/rpc.h @@ -14,7 +14,7 @@ struct mg_rpc_req { void mg_rpc_add(void **head, struct mg_str method_pattern, void (*handler)(struct mg_rpc_req *), void *handler_data); -void mg_rpc_free(void **head); +void mg_rpc_del(void **head, void (*handler)(struct mg_rpc_req *)); void mg_rpc_process(struct mg_rpc_req *); // Helper functions to print result or error frame diff --git a/test/unit_test.c b/test/unit_test.c index e9917501..355d19d1 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -2476,7 +2476,7 @@ static void test_rpc(void) { free(s), s = NULL; } - mg_rpc_free(&head); + mg_rpc_del(&head, NULL); ASSERT(head == NULL); }