# HG changeset patch # User Igor Sysoev # Date 1197806247 0 # Node ID 5b7baef2e11eba5fc1025c1a41146af52ae44fad # Parent e8cef87413a04e413b1adfc287bf582f19541d12 copy return values to perl's allocated memory 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 @@ -13,19 +13,16 @@ #include "XSUB.h" + #define ngx_http_perl_set_request(r) \ r = INT2PTR(ngx_http_request_t *, SvIV((SV *) SvRV(ST(0)))) -#define ngx_http_perl_set_targ(p, len, z) \ +#define ngx_http_perl_set_targ(p, len) \ \ - sv_upgrade(TARG, SVt_PV); \ + SvUPGRADE(TARG, SVt_PV); \ SvPOK_on(TARG); \ - SvPV_set(TARG, (char *) p); \ - SvLEN_set(TARG, len + z); \ - SvCUR_set(TARG, len); \ - SvFAKE_on(TARG); \ - SvREADONLY_on(TARG); \ + sv_setpvn(TARG, (char *) p, len) static ngx_int_t @@ -172,7 +169,7 @@ uri(r) ngx_http_request_t *r; ngx_http_perl_set_request(r); - ngx_http_perl_set_targ(r->uri.data, r->uri.len, 0); + ngx_http_perl_set_targ(r->uri.data, r->uri.len); ST(0) = TARG; @@ -185,7 +182,7 @@ args(r) ngx_http_request_t *r; ngx_http_perl_set_request(r); - ngx_http_perl_set_targ(r->args.data, r->args.len, 0); + ngx_http_perl_set_targ(r->args.data, r->args.len); ST(0) = TARG; @@ -198,7 +195,7 @@ request_method(r) ngx_http_request_t *r; ngx_http_perl_set_request(r); - ngx_http_perl_set_targ(r->method_name.data, r->method_name.len, 0); + ngx_http_perl_set_targ(r->method_name.data, r->method_name.len); ST(0) = TARG; @@ -212,7 +209,7 @@ remote_addr(r) ngx_http_perl_set_request(r); ngx_http_perl_set_targ(r->connection->addr_text.data, - r->connection->addr_text.len, 1); + r->connection->addr_text.len); ST(0) = TARG; @@ -266,7 +263,7 @@ header_in(r, key) ph = (ngx_table_elt_t **) ((char *) &r->headers_in + hh->offset); if (*ph) { - ngx_http_perl_set_targ((*ph)->value.data, (*ph)->value.len, 0); + ngx_http_perl_set_targ((*ph)->value.data, (*ph)->value.len); goto done; } @@ -285,7 +282,7 @@ header_in(r, key) ph = r->headers_in.cookies.elts; if (n == 1) { - ngx_http_perl_set_targ((*ph)->value.data, (*ph)->value.len, 0); + ngx_http_perl_set_targ((*ph)->value.data, (*ph)->value.len); goto done; } @@ -313,7 +310,7 @@ header_in(r, key) *p++ = ';'; *p++ = ' '; } - ngx_http_perl_set_targ(cookie, size, 0); + ngx_http_perl_set_targ(cookie, size); goto done; } @@ -341,7 +338,7 @@ header_in(r, key) continue; } - ngx_http_perl_set_targ(h[i].value.data, h[i].value.len, 0); + ngx_http_perl_set_targ(h[i].value.data, h[i].value.len); goto done; } @@ -409,7 +406,7 @@ request_body(r) XSRETURN_UNDEF; } - ngx_http_perl_set_targ(r->request_body->bufs->buf->pos, len, 0); + ngx_http_perl_set_targ(r->request_body->bufs->buf->pos, len); ST(0) = TARG; @@ -428,7 +425,7 @@ request_body_file(r) } ngx_http_perl_set_targ(r->request_body->temp_file->file.name.data, - r->request_body->temp_file->file.name.len, 1); + r->request_body->temp_file->file.name.len); ST(0) = TARG; @@ -507,7 +504,7 @@ filename(r) done: - ngx_http_perl_set_targ(ctx->filename.data, ctx->filename.len, 1); + ngx_http_perl_set_targ(ctx->filename.data, ctx->filename.len); ST(0) = TARG; @@ -785,7 +782,7 @@ unescape(r, text, type = 0) ngx_unescape_uri(&dst, &src, len, (ngx_uint_t) type); *dst = '\0'; - ngx_http_perl_set_targ(p, dst - p, 1); + ngx_http_perl_set_targ(p, dst - p); ST(0) = TARG; @@ -882,7 +879,7 @@ variable(r, name, value = NULL) XSRETURN_UNDEF; } - ngx_http_perl_set_targ(v[i].value.data, v[i].value.len, 0); + ngx_http_perl_set_targ(v[i].value.data, v[i].value.len); goto done; } @@ -926,7 +923,7 @@ variable(r, name, value = NULL) XSRETURN_UNDEF; } - ngx_http_perl_set_targ(vv->data, vv->len, 0); + ngx_http_perl_set_targ(vv->data, vv->len); done: