ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.xs
(Generate patch)

Comparing IO-AIO/AIO.xs (file contents):
Revision 1.146 by root, Fri Jun 12 17:07:00 2009 UTC vs.
Revision 1.147 by root, Mon Jun 15 05:34:49 2009 UTC

228 SV *rv = &PL_sv_undef; 228 SV *rv = &PL_sv_undef;
229 229
230 if (req->result >= 0) 230 if (req->result >= 0)
231 { 231 {
232 int i; 232 int i;
233 char *buf = req->ptr2; 233 char *names = (char *)req->ptr2;
234 eio_dirent *ent = (eio_dirent *)req->ptr1; /* might be 0 */
234 AV *av = newAV (); 235 AV *av = newAV ();
235 236
236 av_extend (av, req->result - 1); 237 av_extend (av, req->result - 1);
237 238
238 for (i = 0; i < req->result; ++i) 239 for (i = 0; i < req->result; ++i)
239 { 240 {
240 if (req->int1 & EIO_READDIR_DENTS) 241 if (req->int1 & EIO_READDIR_DENTS)
241 { 242 {
242 eio_dirent *ent = (eio_dirent *)buf;
243 SV *namesv = newSVpvn (ent->name, ent->namelen); 243 SV *namesv = newSVpvn (names + ent->nameofs, ent->namelen);
244 244
245 if (req->int1 & EIO_READDIR_CUSTOM2) 245 if (req->int1 & EIO_READDIR_CUSTOM2)
246 { 246 {
247 static SV *sv_type [EIO_DT_MAX + 1]; /* type sv cache */ 247 static SV *sv_type [EIO_DT_MAX + 1]; /* type sv cache */
248 AV *avent = newAV (); 248 AV *avent = newAV ();
262 av_store (av, i, newRV_noinc ((SV *)avent)); 262 av_store (av, i, newRV_noinc ((SV *)avent));
263 } 263 }
264 else 264 else
265 av_store (av, i, namesv); 265 av_store (av, i, namesv);
266 266
267 buf += sizeof (eio_dirent); 267 ++ent;
268 } 268 }
269 else 269 else
270 { 270 {
271 SV *name = newSVpv (buf, 0); 271 SV *name = newSVpv (names, 0);
272 av_store (av, i, name); 272 av_store (av, i, name);
273 buf += SvCUR (name) + 1; 273 names += SvCUR (name) + 1;
274 } 274 }
275 } 275 }
276 276
277 rv = sv_2mortal (newRV_noinc ((SV *)av)); 277 rv = sv_2mortal (newRV_noinc ((SV *)av));
278 } 278 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines