--- IO-AIO/AIO.xs 2009/06/12 17:07:00 1.146 +++ IO-AIO/AIO.xs 2009/06/15 05:34:49 1.147 @@ -230,7 +230,8 @@ if (req->result >= 0) { int i; - char *buf = req->ptr2; + char *names = (char *)req->ptr2; + eio_dirent *ent = (eio_dirent *)req->ptr1; /* might be 0 */ AV *av = newAV (); av_extend (av, req->result - 1); @@ -239,8 +240,7 @@ { if (req->int1 & EIO_READDIR_DENTS) { - eio_dirent *ent = (eio_dirent *)buf; - SV *namesv = newSVpvn (ent->name, ent->namelen); + SV *namesv = newSVpvn (names + ent->nameofs, ent->namelen); if (req->int1 & EIO_READDIR_CUSTOM2) { @@ -264,13 +264,13 @@ else av_store (av, i, namesv); - buf += sizeof (eio_dirent); + ++ent; } else { - SV *name = newSVpv (buf, 0); + SV *name = newSVpv (names, 0); av_store (av, i, name); - buf += SvCUR (name) + 1; + names += SvCUR (name) + 1; } }