… | |
… | |
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 | |
820 | static void |
822 | static void |
821 | req_set_path (aio_req req, SV *path, SV **wdsv, SV **pathsv, eio_wd *wd, void **ptr) |
823 | req_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 | |
1329 | void |
1331 | void |
1330 | aio_chmod (SV8 *fh_or_path, int mode, SV *callback=&PL_sv_undef) |
1332 | aio_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 | |
|
|
1373 | void |
|
|
1374 | aio_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 | |
1374 | void |
1386 | void |
1375 | aio_unlink (SV8 *pathname, SV *callback=&PL_sv_undef) |
1387 | aio_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; |