--- IO-AIO/AIO.xs 2009/04/19 13:19:57 1.137 +++ IO-AIO/AIO.xs 2009/06/03 12:24:49 1.140 @@ -314,9 +314,13 @@ break; case EIO_READ: - SvCUR_set (req->sv2, req->stroffset + (req->result > 0 ? req->result : 0)); - *SvEND (req->sv2) = 0; - PUSHs (sv_2mortal (newSViv (req->result))); + { + SvCUR_set (req->sv2, req->stroffset + (req->result > 0 ? req->result : 0)); + *SvEND (req->sv2) = 0; + SvPOK_only (req->sv2); + SvSETMAGIC (req->sv2); + PUSHs (sv_2mortal (newSViv (req->result))); + } break; case EIO_DUP2: @@ -522,6 +526,7 @@ stash = gv_stashpv ("IO::AIO", 1); newCONSTSUB (stash, "EXDEV", newSViv (EXDEV)); + newCONSTSUB (stash, "ENOSYS", newSViv (ENOSYS)); newCONSTSUB (stash, "O_RDONLY", newSViv (O_RDONLY)); newCONSTSUB (stash, "O_WRONLY", newSViv (O_WRONLY)); newCONSTSUB (stash, "O_CREAT", newSViv (O_CREAT)); @@ -673,12 +678,6 @@ char *svptr = SvPVbyte (data, svlen); UV len = SvUV (length); - if (SvTYPE (data) > SVt_PVMG || SvROK (data)) - croak ("illegal data argument '%s', must be plain scalar string", SvPV_nolen (data)); - - SvUPGRADE (data, SVt_PV); - SvPOK_only (data); - if (dataoffset < 0) dataoffset += svlen; @@ -693,13 +692,11 @@ } else { - /* read: grow scalar as necessary */ + /* read: check type and grow scalar as necessary */ + SvUPGRADE (data, SVt_PV); svptr = SvGROW (data, len + dataoffset + 1); } - if (len < 0) - croak ("length must not be negative"); - { dREQ;