--- IO-AIO/AIO.xs 2006/10/30 23:43:17 1.88 +++ IO-AIO/AIO.xs 2006/11/08 01:59:59 1.92 @@ -89,6 +89,8 @@ if (!aio_buf) \ return -1; +typedef SV SV8; /* byte-sv, used for argument-checking */ + enum { REQ_QUIT, REQ_OPEN, REQ_CLOSE, @@ -131,9 +133,9 @@ } aio_cb; enum { - FLAG_CANCELLED = 0x01, + FLAG_CANCELLED = 0x01, /* request was cancelled */ FLAG_SV1_RO_OFF = 0x40, /* data was set readonly */ - FLAG_PTR2_FREE = 0x80, /* need free(ptr2) */ + FLAG_PTR2_FREE = 0x80, /* need to free(ptr2) */ }; typedef aio_cb *aio_req; @@ -1311,7 +1313,7 @@ void aio_open (pathname,flags,mode,callback=&PL_sv_undef) - SV * pathname + SV8 * pathname int flags int mode SV * callback @@ -1322,7 +1324,7 @@ req->type = REQ_OPEN; req->sv1 = newSVsv (pathname); - req->ptr1 = SvPVbyte_nolen (pathname); + req->ptr1 = SvPVbyte_nolen (req->sv1); req->int1 = flags; req->mode = mode; @@ -1354,7 +1356,7 @@ SV * fh UV offset UV length - SV * data + SV8 * data UV dataoffset SV * callback ALIAS: @@ -1415,7 +1417,7 @@ void aio_readlink (path,callback=&PL_sv_undef) - SV * path + SV8 * path SV * callback PROTOTYPE: $$;$ PPCODE: @@ -1428,7 +1430,7 @@ req->type = REQ_READLINK; req->fh = newSVsv (path); - req->ptr2 = SvPVbyte_nolen (path); + req->ptr2 = SvPVbyte_nolen (req->fh); req->sv1 = data; req->ptr1 = SvPVbyte_nolen (data); @@ -1480,7 +1482,7 @@ void aio_stat (fh_or_path,callback=&PL_sv_undef) - SV * fh_or_path + SV8 * fh_or_path SV * callback ALIAS: aio_stat = REQ_STAT @@ -1502,7 +1504,7 @@ { req->type = ix; req->sv1 = newSVsv (fh_or_path); - req->ptr1 = SvPVbyte_nolen (fh_or_path); + req->ptr1 = SvPVbyte_nolen (req->sv1); } else { @@ -1516,7 +1518,7 @@ void aio_unlink (pathname,callback=&PL_sv_undef) - SV * pathname + SV8 * pathname SV * callback ALIAS: aio_unlink = REQ_UNLINK @@ -1528,15 +1530,15 @@ req->type = ix; req->sv1 = newSVsv (pathname); - req->ptr1 = SvPVbyte_nolen (pathname); + req->ptr1 = SvPVbyte_nolen (req->sv1); REQ_SEND; } void aio_link (oldpath,newpath,callback=&PL_sv_undef) - SV * oldpath - SV * newpath + SV8 * oldpath + SV8 * newpath SV * callback ALIAS: aio_link = REQ_LINK @@ -1550,14 +1552,14 @@ req->fh = newSVsv (oldpath); req->ptr2 = SvPVbyte_nolen (req->fh); req->sv1 = newSVsv (newpath); - req->ptr1 = SvPVbyte_nolen (newpath); + req->ptr1 = SvPVbyte_nolen (req->sv1); REQ_SEND; } void aio_mknod (pathname,mode,dev,callback=&PL_sv_undef) - SV * pathname + SV8 * pathname SV * callback UV mode UV dev @@ -1567,7 +1569,7 @@ req->type = REQ_MKNOD; req->sv1 = newSVsv (pathname); - req->ptr1 = SvPVbyte_nolen (pathname); + req->ptr1 = SvPVbyte_nolen (req->sv1); req->mode = (mode_t)mode; req->offs = dev; @@ -1644,18 +1646,17 @@ while (nreqs) { poll_wait (); - poll_cb (0); + poll_cb (); } -void +int poll() PROTOTYPE: CODE: - if (nreqs) - { - poll_wait (); - poll_cb (0); - } + poll_wait (); + RETVAL = poll_cb (); + OUTPUT: + RETVAL int poll_fileno() @@ -1677,8 +1678,7 @@ poll_wait() PROTOTYPE: CODE: - if (nreqs) - poll_wait (); + poll_wait (); int nreqs()