--- IO-AIO/AIO.xs 2011/09/26 20:19:08 1.195 +++ IO-AIO/AIO.xs 2011/09/27 00:41:51 1.196 @@ -332,7 +332,7 @@ typedef eio_req *aio_req; typedef eio_req *aio_req_ornot; -typedef eio_wd *aio_wd; +typedef eio_wd aio_wd; static SV *on_next_submit; static int next_pri = EIO_PRI_DEFAULT; @@ -367,6 +367,12 @@ return sv_2mortal (sv_bless (newRV_inc (req->self), stash)); } +static SV * +newSVaio_wd (aio_wd wd) +{ + return sv_bless (newRV_noinc (newSViv ((long)wd)), aio_wd_stash); +} + static aio_req SvAIO_REQ (SV *sv) { MAGIC *mg; @@ -459,7 +465,7 @@ switch (req->type) { case EIO_WD_OPEN: - PUSHs (sv_2mortal (sv_bless (newRV_noinc (newSViv (((long)req->wd))), aio_wd_stash))); + PUSHs (sv_2mortal (newSVaio_wd (req->wd))); break; case EIO_READDIR: @@ -825,8 +831,13 @@ path = AvARRAY (av)[1]; wdob = AvARRAY (av)[0]; - *wd = SvAIO_WD (wdob); - *wdsv = SvREFCNT_inc_NN (SvRV (wdob)); + if (SvOK (wdob)) + { + *wd = SvAIO_WD (wdob); + *wdsv = SvREFCNT_inc_NN (SvRV (wdob)); + } + else + *wd = EIO_INVALID_WD; } *pathsv = newSVsv (path); @@ -1738,6 +1749,12 @@ MODULE = IO::AIO PACKAGE = IO::AIO::WD +BOOT: +{ + newCONSTSUB (aio_stash, "CWD" , newSVaio_wd (EIO_CWD )); + newCONSTSUB (aio_stash, "INVALID_WD", newSVaio_wd (EIO_INVALID_WD)); +} + void DESTROY (SV *self) CODE: