ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.xs
(Generate patch)

Comparing IO-AIO/AIO.xs (file contents):
Revision 1.195 by root, Mon Sep 26 20:19:08 2011 UTC vs.
Revision 1.196 by root, Tue Sep 27 00:41:51 2011 UTC

330 FLAG_SV2_RO_OFF = 0x40, /* data was set readonly */ 330 FLAG_SV2_RO_OFF = 0x40, /* data was set readonly */
331}; 331};
332 332
333typedef eio_req *aio_req; 333typedef eio_req *aio_req;
334typedef eio_req *aio_req_ornot; 334typedef eio_req *aio_req_ornot;
335typedef eio_wd *aio_wd; 335typedef eio_wd aio_wd;
336 336
337static SV *on_next_submit; 337static SV *on_next_submit;
338static int next_pri = EIO_PRI_DEFAULT; 338static int next_pri = EIO_PRI_DEFAULT;
339static int max_outstanding; 339static int max_outstanding;
340 340
363 req->self = (SV *)newHV (); 363 req->self = (SV *)newHV ();
364 sv_magic (req->self, 0, PERL_MAGIC_ext, (char *)req, 0); 364 sv_magic (req->self, 0, PERL_MAGIC_ext, (char *)req, 0);
365 } 365 }
366 366
367 return sv_2mortal (sv_bless (newRV_inc (req->self), stash)); 367 return sv_2mortal (sv_bless (newRV_inc (req->self), stash));
368}
369
370static SV *
371newSVaio_wd (aio_wd wd)
372{
373 return sv_bless (newRV_noinc (newSViv ((long)wd)), aio_wd_stash);
368} 374}
369 375
370static aio_req SvAIO_REQ (SV *sv) 376static aio_req SvAIO_REQ (SV *sv)
371{ 377{
372 MAGIC *mg; 378 MAGIC *mg;
457 } 463 }
458 464
459 switch (req->type) 465 switch (req->type)
460 { 466 {
461 case EIO_WD_OPEN: 467 case EIO_WD_OPEN:
462 PUSHs (sv_2mortal (sv_bless (newRV_noinc (newSViv (((long)req->wd))), aio_wd_stash))); 468 PUSHs (sv_2mortal (newSVaio_wd (req->wd)));
463 break; 469 break;
464 470
465 case EIO_READDIR: 471 case EIO_READDIR:
466 { 472 {
467 SV *rv = &PL_sv_undef; 473 SV *rv = &PL_sv_undef;
823 croak ("IO::AIO: pathname arguments must be specified as strings or [wd, path] arrayrefs"); 829 croak ("IO::AIO: pathname arguments must be specified as strings or [wd, path] arrayrefs");
824 830
825 path = AvARRAY (av)[1]; 831 path = AvARRAY (av)[1];
826 wdob = AvARRAY (av)[0]; 832 wdob = AvARRAY (av)[0];
827 833
834 if (SvOK (wdob))
835 {
828 *wd = SvAIO_WD (wdob); 836 *wd = SvAIO_WD (wdob);
829 *wdsv = SvREFCNT_inc_NN (SvRV (wdob)); 837 *wdsv = SvREFCNT_inc_NN (SvRV (wdob));
838 }
839 else
840 *wd = EIO_INVALID_WD;
830 } 841 }
831 842
832 *pathsv = newSVsv (path); 843 *pathsv = newSVsv (path);
833 *ptr = SvPVbyte_nolen (*pathsv); 844 *ptr = SvPVbyte_nolen (*pathsv);
834} 845}
1736 1747
1737PROTOTYPES: DISABLE 1748PROTOTYPES: DISABLE
1738 1749
1739MODULE = IO::AIO PACKAGE = IO::AIO::WD 1750MODULE = IO::AIO PACKAGE = IO::AIO::WD
1740 1751
1752BOOT:
1753{
1754 newCONSTSUB (aio_stash, "CWD" , newSVaio_wd (EIO_CWD ));
1755 newCONSTSUB (aio_stash, "INVALID_WD", newSVaio_wd (EIO_INVALID_WD));
1756}
1757
1741void 1758void
1742DESTROY (SV *self) 1759DESTROY (SV *self)
1743 CODE: 1760 CODE:
1744{ 1761{
1745 aio_wd wd = SvAIO_WD (self); 1762 aio_wd wd = SvAIO_WD (self);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines