Deleted Added
1
2/*
3 * Copyright (C) Alexander Borisov
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <perl/nxt_perl_psgi_layer.h>
8

--- 79 unchanged lines hidden (view full) ---

88nxt_perl_psgi_layer_stream_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg,
89 PerlIO_funcs *tab)
90{
91 nxt_perl_psgi_layer_stream_t *unit_stream;
92
93 unit_stream = PerlIOSelf(f, nxt_perl_psgi_layer_stream_t);
94
95 if (arg != NULL && SvOK(arg)) {
96 unit_stream->var = SvREFCNT_inc(arg);
97 }
98
99 return PerlIOBase_pushed(aTHX_ f, mode, Nullsv, tab);
100}
101
102
103static IV
104nxt_perl_psgi_layer_stream_popped(pTHX_ PerlIO *f)
105{
106 nxt_perl_psgi_io_arg_t *arg;
107 nxt_perl_psgi_layer_stream_t *unit_stream;
108
109 unit_stream = PerlIOSelf(f, nxt_perl_psgi_layer_stream_t);
110
111 if (unit_stream->var != NULL) {
112 arg = (void *) (intptr_t) SvIV(SvRV(unit_stream->var));
113
114 arg->io = NULL;
115 arg->fp = NULL;
116
117 SvREFCNT_dec(unit_stream->var);
118 unit_stream->var = Nullsv;
119 }
120
121 return 0;
122}
123
124

--- 55 unchanged lines hidden (view full) ---

180{
181 nxt_perl_psgi_io_arg_t *arg;
182 nxt_perl_psgi_layer_stream_t *unit_stream;
183
184 if (f == NULL) {
185 return 0;
186 }
187
188 if ((PerlIOBase(f)->flags & PERLIO_F_CANREAD) == 0) {
189 PerlIOBase(f)->flags |= PERLIO_F_ERROR;
190
191 SETERRNO(EBADF, SS_IVCHAN);
192
193 return 0;
194 }
195
196 unit_stream = PerlIOSelf(f, nxt_perl_psgi_layer_stream_t);
197 arg = (void *) (intptr_t) SvIV(SvRV(unit_stream->var));
198
199 return arg->io_tab->read(PERL_GET_CONTEXT, arg, vbuf, count);
200}
201
202
203static SSize_t
204nxt_perl_psgi_layer_stream_write(pTHX_ PerlIO *f,
205 const void *vbuf, Size_t count)
206{
207 nxt_perl_psgi_io_arg_t *arg;
208 nxt_perl_psgi_layer_stream_t *unit_stream;
209
210 if (PerlIOBase(f)->flags & PERLIO_F_CANWRITE) {
211 unit_stream = PerlIOSelf(f, nxt_perl_psgi_layer_stream_t);
212 arg = (void *) (intptr_t) SvIV(SvRV(unit_stream->var));
213
214 return arg->io_tab->write(PERL_GET_CONTEXT, arg, vbuf, count);
215 }
216
217 return 0;
218}
219
220
221static IV
222nxt_perl_psgi_layer_stream_seek(pTHX_ PerlIO *f, Off_t offset, int whence)

--- 17 unchanged lines hidden (view full) ---

240 PERL_UNUSED_ARG(f);
241 return -1;
242}
243
244
245static IV
246nxt_perl_psgi_layer_stream_flush(pTHX_ PerlIO *f)
247{
248 return 0;
249}
250
251
252static SV *
253nxt_perl_psgi_layer_stream_arg(pTHX_ PerlIO * f,
254 CLONE_PARAMS *param, int flags)
255{
256 SV *var;

--- 79 unchanged lines hidden (view full) ---

336void
337nxt_perl_psgi_layer_stream_init(pTHX)
338{
339 PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_NGINX_Unit));
340}
341
342
343PerlIO *
344nxt_perl_psgi_layer_stream_fp_create(pTHX_ SV *arg_rv,
345 const char *mode)
346{
347 return PerlIO_openn(aTHX_ "NGINX_Unit_PSGI_Layer_Stream",
348 mode, 0, 0, 0, NULL, 1, &arg_rv);
349}
350
351
352void
353nxt_perl_psgi_layer_stream_fp_destroy(pTHX_ PerlIO *io)
354{
355 PerlIO_close(io);
356}

--- 18 unchanged lines hidden (view full) ---

375
376 if (rvio == NULL) {
377 SvREFCNT_dec(thatio);
378 return NULL;
379 }
380
381 return rvio;
382}