diff --git a/src/headers.c b/src/headers.c index e6de523..5057412 100644 --- a/src/headers.c +++ b/src/headers.c @@ -26,6 +26,20 @@ const char* headers_get(struct headers* headers, const char* key) { return headers->headers[tmp].value; } +int headers_remove(struct headers* headers, const char* key) { + int tmp = headers_find(headers, key); + if (tmp < 0) + return -1; + struct header header = headers->headers[tmp]; + memmove(headers->headers + tmp * sizeof(struct header), headers->headers + (tmp + 1) * sizeof(struct header), sizeof(struct header) * (headers->number - tmp - 1)); + headers->number--; + + free(header.key); + free(header.value); + + return 0; +} + int headers_mod(struct headers* headers, const char* _key, const char* _value) { char* tmp = strclone(_key); if (tmp == NULL) { diff --git a/src/headers.h b/src/headers.h index 09a5b31..d2e3430 100644 --- a/src/headers.h +++ b/src/headers.h @@ -22,6 +22,7 @@ struct headers { struct headers headers_create(); const char* headers_get(struct headers* headers, const char* key); +int headers_remove(struct headers* headers, const char* key); int headers_mod(struct headers* headers, const char* key, const char* value); int headers_parse(struct headers* headers, const char* currentHeader, size_t length); void headers_free(struct headers* headers);