diff options
| author | Andrew Clayton <a.clayton@nginx.com> | 2023-08-28 16:11:15 +0100 |
|---|---|---|
| committer | Andrew Clayton <a.clayton@nginx.com> | 2023-08-28 16:20:26 +0100 |
| commit | da5d9dc03b14b4d0f1ce0ce3ff093f387e148706 (patch) | |
| tree | e78c14545bd275aec15768d410f9b2be0a21d4d1 /src/c/libunit-wasm.c | |
| parent | 5bf0dfc92eb57f43dcf2eb29d9647c096b984774 (diff) | |
| download | unit-wasm-da5d9dc03b14b4d0f1ce0ce3ff093f387e148706.tar.gz unit-wasm-da5d9dc03b14b4d0f1ce0ce3ff093f387e148706.tar.bz2 | |
libunit-wasm: Remove the idx argument from luw_http_add_header()
This was used to specify the index of the response header being added,
starting at 0 and incrementing by one for each header.
Instead of having the programmer specify this, track it internally.
We add an extra check in luw_http_add_header() to make sure we aren't
trying to add more headers than we said with luw_http_init_headers(), if
we are, simply return.
This updates the API-C.md and the various examples and 'rusty' API
wrapper.
Suggested-by: Liam Crilly <liam@nginx.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
Diffstat (limited to 'src/c/libunit-wasm.c')
| -rw-r--r-- | src/c/libunit-wasm.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/c/libunit-wasm.c b/src/c/libunit-wasm.c index 8cea78a..11272ed 100644 --- a/src/c/libunit-wasm.c +++ b/src/c/libunit-wasm.c @@ -83,6 +83,7 @@ void luw_init_ctx(luw_ctx_t *ctx, u8 *addr, size_t offset) ctx->resp_offset = offset; ctx->resp->size = 0; ctx->resp_hdr->nr_fields = 0; + ctx->resp_hdr_idx = -1; } /* @@ -326,6 +327,7 @@ void luw_mem_reset(luw_ctx_t *ctx) ctx->mem = ctx->resp->data; ctx->resp->size = 0; ctx->resp_hdr->nr_fields = 0; + ctx->resp_hdr_idx = -1; } void luw_http_send_response(const luw_ctx_t *ctx) @@ -342,9 +344,14 @@ void luw_http_init_headers(luw_ctx_t *ctx, size_t nr, size_t offset) ctx->resp_hdr->nr_fields = nr; } -void luw_http_add_header(luw_ctx_t *ctx, u16 idx, const char *name, - const char *value) +void luw_http_add_header(luw_ctx_t *ctx, const char *name, const char *value) { + s32 idx = ctx->resp_hdr_idx; + + idx++; + if ((u32)idx == ctx->resp_hdr->nr_fields) + return; + ctx->resp_hdr->fields[idx].name_off = ctx->hdrp - ctx->addr; ctx->resp_hdr->fields[idx].name_len = strlen(name); ctx->hdrp = mempcpy(ctx->hdrp, name, strlen(name)); @@ -352,6 +359,8 @@ void luw_http_add_header(luw_ctx_t *ctx, u16 idx, const char *name, ctx->resp_hdr->fields[idx].value_off = ctx->hdrp - ctx->addr; ctx->resp_hdr->fields[idx].value_len = strlen(value); ctx->hdrp = mempcpy(ctx->hdrp, value, strlen(value)); + + ctx->resp_hdr_idx = idx; } void luw_http_send_headers(const luw_ctx_t *ctx) |
