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.196 by root, Tue Sep 27 00:41:51 2011 UTC vs.
Revision 1.200 by root, Thu Sep 29 09:51:24 2011 UTC

617 break; 617 break;
618 618
619 case EIO_STAT: 619 case EIO_STAT:
620 case EIO_LSTAT: 620 case EIO_LSTAT:
621 case EIO_FSTAT: 621 case EIO_FSTAT:
622 PL_laststype = req->type == EIO_LSTAT ? OP_LSTAT : OP_STAT; 622 PL_laststype = req->type == EIO_LSTAT ? OP_LSTAT : OP_STAT;
623
623 PL_laststatval = req->result; 624 if (!(PL_laststatval = req->result))
624 /* if compilation fails here then perl's Stat_t is not struct _stati64 */ 625 /* if compilation fails here then perl's Stat_t is not struct _stati64 */
625 PL_statcache = *(EIO_STRUCT_STAT *)(req->ptr2); 626 PL_statcache = *(EIO_STRUCT_STAT *)(req->ptr2);
627
626 PUSHs (sv_result); 628 PUSHs (sv_result);
627 break; 629 break;
628 630
629 case EIO_READ: 631 case EIO_READ:
630 { 632 {
818 XPUSHs (req_sv (req, aio_req_stash)); 820 XPUSHs (req_sv (req, aio_req_stash));
819 821
820static void 822static void
821req_set_path (aio_req req, SV *path, SV **wdsv, SV **pathsv, eio_wd *wd, void **ptr) 823req_set_path (aio_req req, SV *path, SV **wdsv, SV **pathsv, eio_wd *wd, void **ptr)
822{ 824{
823 if (SvROK (path)) 825 if (expect_false (SvROK (path)))
824 { 826 {
825 AV *av = (AV *)SvRV (path); 827 AV *av = (AV *)SvRV (path);
826 SV *wdob; 828 SV *wdob;
827 829
828 if (SvTYPE (av) != SVt_PVAV || AvFILLp (av) != 1) 830 if (SvTYPE (av) != SVt_PVAV || AvFILLp (av) != 1)
1326 REQ_SEND; 1328 REQ_SEND;
1327} 1329}
1328 1330
1329void 1331void
1330aio_chmod (SV8 *fh_or_path, int mode, SV *callback=&PL_sv_undef) 1332aio_chmod (SV8 *fh_or_path, int mode, SV *callback=&PL_sv_undef)
1331 ALIAS:
1332 aio_chmod = EIO_CHMOD
1333 aio_mkdir = EIO_MKDIR
1334 PPCODE: 1333 PPCODE:
1335{ 1334{
1336 dREQ; 1335 dREQ;
1337 1336
1338 req->int2 = mode; 1337 req->int2 = mode;
1359 PPCODE: 1358 PPCODE:
1360{ 1359{
1361 dREQ; 1360 dREQ;
1362 1361
1363 req->type = EIO_READDIR; 1362 req->type = EIO_READDIR;
1364 req->sv1 = newSVsv (pathname);
1365 req->ptr1 = SvPVbyte_nolen (req->sv1);
1366 req->int1 = flags | EIO_READDIR_DENTS | EIO_READDIR_CUSTOM1; 1363 req->int1 = flags | EIO_READDIR_DENTS | EIO_READDIR_CUSTOM1;
1367 1364
1368 if (flags & EIO_READDIR_DENTS) 1365 if (flags & EIO_READDIR_DENTS)
1369 req->int1 |= EIO_READDIR_CUSTOM2; 1366 req->int1 |= EIO_READDIR_CUSTOM2;
1370 1367
1368 req_set_path1 (req, pathname);
1369
1371 REQ_SEND; 1370 REQ_SEND;
1371}
1372
1373void
1374aio_mkdir (SV8 *pathname, int mode, SV *callback=&PL_sv_undef)
1375 PPCODE:
1376{
1377 dREQ;
1378
1379 req->type = EIO_MKDIR;
1380 req->int2 = mode;
1381 req_set_path1 (req, pathname);
1382
1383 REQ_SEND;
1372} 1384}
1373 1385
1374void 1386void
1375aio_unlink (SV8 *pathname, SV *callback=&PL_sv_undef) 1387aio_unlink (SV8 *pathname, SV *callback=&PL_sv_undef)
1376 ALIAS: 1388 ALIAS:
1394 aio_symlink = EIO_SYMLINK 1406 aio_symlink = EIO_SYMLINK
1395 aio_rename = EIO_RENAME 1407 aio_rename = EIO_RENAME
1396 PPCODE: 1408 PPCODE:
1397{ 1409{
1398 dREQ; 1410 dREQ;
1399 eio_wd wd2; 1411 eio_wd wd2 = 0;
1400 1412
1401 req->type = ix; 1413 req->type = ix;
1402 req_set_path1 (req, oldpath); 1414 req_set_path1 (req, oldpath);
1403 req_set_path (req, newpath, &req->sv2, &req->sv4, &wd2, &req->ptr2); 1415 req_set_path (req, newpath, &req->sv2, &req->sv4, &wd2, &req->ptr2);
1404 req->int3 = (long)wd2; 1416 req->int3 = (long)wd2;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines