> On 21 Apr 2022, at 02:18, Maxim Dounin <mdou...@mdounin.ru> wrote: > > # HG changeset patch > # User Maxim Dounin <mdou...@mdounin.ru> > # Date 1650492323 -10800 > # Thu Apr 21 01:05:23 2022 +0300 > # Node ID 50fe52f516ff9c148aa9e7dfcc1c31cc6a4929ae > # Parent 2ea48b5e4643a818cd81179f040f0b36be9050d6 > Reworked multi headers to use linked lists. > > Multi headers are now using linked lists instead of arrays. Notably, > the following fields were changed: r->headers_in.cookies (renamed > to r->headers_in.cookie), r->headers_in.x_forwarded_for, > r->headers_out.cache_control, r->headers_out.link, u->headers_in.cache_control > u->headers_in.cookies (renamed to u->headers_in.set_cookie). > > The r->headers_in.cookies and u->headers_in.cookies fields were renamed > to r->headers_in.cookie and u->headers_in.set_cookie to match header names. > > The ngx_http_parse_multi_header_lines() and ngx_http_parse_set_cookie_lines() > functions were changed accordingly. > > With this change, multi headers are now essentially equivalent to normal > headers, and following changes will further make them equivalent. > > [...] > > diff --git a/src/http/modules/perl/nginx.xs b/src/http/modules/perl/nginx.xs > --- a/src/http/modules/perl/nginx.xs > +++ b/src/http/modules/perl/nginx.xs > @@ -302,7 +302,7 @@ header_in(r, key) > > if (hh) { > > - if (hh->offset == offsetof(ngx_http_headers_in_t, cookies)) { > + if (hh->offset == offsetof(ngx_http_headers_in_t, cookie)) { > sep = ';'; > goto multi; > } > @@ -327,17 +327,13 @@ header_in(r, key) > > /* Cookie, X-Forwarded-For */ > > - a = (ngx_array_t *) ((char *) &r->headers_in + hh->offset); > + ph = (ngx_table_elt_t **) ((char *) &r->headers_in + hh->offset); > > - n = a->nelts; > - > - if (n == 0) { > + if (*ph == NULL) { > XSRETURN_UNDEF; > } > > - ph = a->elts; > - > - if (n == 1) { > + if ((*ph)->next == NULL) { > ngx_http_perl_set_targ((*ph)->value.data, (*ph)->value.len); > > goto done; > @@ -345,8 +341,8 @@ header_in(r, key) > > size = - (ssize_t) (sizeof("; ") - 1); > > - for (i = 0; i < n; i++) { > - size += ph[i]->value.len + sizeof("; ") - 1; > + for (h = *ph; h; h = h->next) { > + size += h->value.len + sizeof("; ") - 1; > } > > value = ngx_pnalloc(r->pool, size); > @@ -357,10 +353,10 @@ header_in(r, key) > > p = value; > > - for (i = 0; /* void */ ; i++) { > - p = ngx_copy(p, ph[i]->value.data, ph[i]->value.len); > + for (h = *ph; h; h = h->next) { > + p = ngx_copy(p, h->value.data, h->value.len); > > - if (i == n - 1) { > + if (h->next == NULL) { > break; > } > [...]
A follow-up I would like to commit. It is caught on distributions that have -Wall in Perl's config_args: nginx.xs:273:33: warning: unused variable āaā [-Wunused-variable] nginx.xs:272:36: warning: unused variable ānā [-Wunused-variable] # HG changeset patch # User Sergey Kandaurov <pluk...@nginx.com> # Date 1655137187 -14400 # Mon Jun 13 20:19:47 2022 +0400 # Node ID f1d335894234ea518f4b6d7064fc3aeba89706cc # Parent aa28c802409fb7a74e3323195f859d09fe73cd6d Perl: removed unused variables, forgotten in ef6a3a99a81a. diff --git a/src/http/modules/perl/nginx.xs b/src/http/modules/perl/nginx.xs --- a/src/http/modules/perl/nginx.xs +++ b/src/http/modules/perl/nginx.xs @@ -269,8 +269,7 @@ header_in(r, key) u_char *p, *lowcase_key, *value, sep; STRLEN len; ssize_t size; - ngx_uint_t i, n, hash; - ngx_array_t *a; + ngx_uint_t i, hash; ngx_list_part_t *part; ngx_table_elt_t *h, *header, **ph; ngx_http_header_t *hh; -- Sergey Kandaurov _______________________________________________ nginx-devel mailing list -- nginx-devel@nginx.org To unsubscribe send an email to nginx-devel-le...@nginx.org