--- IO-AIO/AIO.xs 2012/01/07 18:42:43 1.208 +++ IO-AIO/AIO.xs 2012/04/01 17:46:02 1.209 @@ -640,6 +640,10 @@ PUSHs (sv_result); break; + case EIO_SEEK: + PUSHs (req->result ? sv_result : sv_2mortal (newSVval64 (req->offs))); + break; + case EIO_READ: { SvCUR_set (req->sv2, req->stroffset + (req->result > 0 ? req->result : 0)); @@ -1004,6 +1008,10 @@ const_iv (MAP_POPULATE) const_iv (MAP_NONBLOCK) + const_eio (SEEK_SET) + const_eio (SEEK_CUR) + const_eio (SEEK_END) + const_eio (MCL_FUTURE) const_eio (MCL_CURRENT) @@ -1135,7 +1143,7 @@ req->sv1 = newSVsv (fh); req->int1 = fd; - REQ_SEND (req); + REQ_SEND; } void @@ -1152,7 +1160,7 @@ req->size = nbytes; req->int2 = flags; - REQ_SEND (req); + REQ_SEND; } void @@ -1169,7 +1177,7 @@ req->offs = offset; req->size = len; - REQ_SEND (req); + REQ_SEND; } void @@ -1203,7 +1211,24 @@ req->sv2 = newSVsv (fh); req->int2 = fd; - REQ_SEND (req); + REQ_SEND; +} + +void +aio_seek (SV *fh, SV *offset, int whence, SV *callback=&PL_sv_undef) + PPCODE: +{ + STRLEN svlen; + int fd = s_fileno_croak (fh, 0); + dREQ; + + req->type = EIO_SEEK; + req->sv1 = newSVsv (fh); + req->int1 = fd; + req->offs = SvVAL64 (offset); + req->int2 = whence; + + REQ_SEND; } void