… | |
… | |
87 | self->dbuf = aio_buf = malloc (AIO_BUFSIZE); \ |
87 | self->dbuf = aio_buf = malloc (AIO_BUFSIZE); \ |
88 | UNLOCK (wrklock); \ |
88 | UNLOCK (wrklock); \ |
89 | if (!aio_buf) \ |
89 | if (!aio_buf) \ |
90 | return -1; |
90 | return -1; |
91 | |
91 | |
|
|
92 | typedef SV SV8; /* byte-sv, used for argument-checking */ |
|
|
93 | |
92 | enum { |
94 | enum { |
93 | REQ_QUIT, |
95 | REQ_QUIT, |
94 | REQ_OPEN, REQ_CLOSE, |
96 | REQ_OPEN, REQ_CLOSE, |
95 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
97 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
96 | REQ_SENDFILE, |
98 | REQ_SENDFILE, |
… | |
… | |
445 | PUSHs (sv_2mortal (newSViv (req->result))); |
447 | PUSHs (sv_2mortal (newSViv (req->result))); |
446 | PUTBACK; |
448 | PUTBACK; |
447 | call_pv ("IO::AIO::_fd2fh", G_SCALAR | G_EVAL); |
449 | call_pv ("IO::AIO::_fd2fh", G_SCALAR | G_EVAL); |
448 | SPAGAIN; |
450 | SPAGAIN; |
449 | |
451 | |
450 | fh = SvREFCNT_inc (POPs); |
452 | fh = POPs; |
451 | |
|
|
452 | PUSHMARK (SP); |
453 | PUSHMARK (SP); |
453 | XPUSHs (sv_2mortal (fh)); |
454 | XPUSHs (fh); |
454 | } |
455 | } |
455 | break; |
456 | break; |
456 | |
457 | |
457 | case REQ_GROUP: |
458 | case REQ_GROUP: |
458 | req->int1 = 2; /* mark group as finished */ |
459 | req->int1 = 2; /* mark group as finished */ |
… | |
… | |
1309 | OUTPUT: |
1310 | OUTPUT: |
1310 | RETVAL |
1311 | RETVAL |
1311 | |
1312 | |
1312 | void |
1313 | void |
1313 | aio_open (pathname,flags,mode,callback=&PL_sv_undef) |
1314 | aio_open (pathname,flags,mode,callback=&PL_sv_undef) |
1314 | SV * pathname |
1315 | SV8 * pathname |
1315 | int flags |
1316 | int flags |
1316 | int mode |
1317 | int mode |
1317 | SV * callback |
1318 | SV * callback |
1318 | PROTOTYPE: $$$;$ |
1319 | PROTOTYPE: $$$;$ |
1319 | PPCODE: |
1320 | PPCODE: |
… | |
… | |
1352 | void |
1353 | void |
1353 | aio_read (fh,offset,length,data,dataoffset,callback=&PL_sv_undef) |
1354 | aio_read (fh,offset,length,data,dataoffset,callback=&PL_sv_undef) |
1354 | SV * fh |
1355 | SV * fh |
1355 | UV offset |
1356 | UV offset |
1356 | UV length |
1357 | UV length |
1357 | SV * data |
1358 | SV8 * data |
1358 | UV dataoffset |
1359 | UV dataoffset |
1359 | SV * callback |
1360 | SV * callback |
1360 | ALIAS: |
1361 | ALIAS: |
1361 | aio_read = REQ_READ |
1362 | aio_read = REQ_READ |
1362 | aio_write = REQ_WRITE |
1363 | aio_write = REQ_WRITE |
… | |
… | |
1413 | } |
1414 | } |
1414 | } |
1415 | } |
1415 | |
1416 | |
1416 | void |
1417 | void |
1417 | aio_readlink (path,callback=&PL_sv_undef) |
1418 | aio_readlink (path,callback=&PL_sv_undef) |
1418 | SV * path |
1419 | SV8 * path |
1419 | SV * callback |
1420 | SV * callback |
1420 | PROTOTYPE: $$;$ |
1421 | PROTOTYPE: $$;$ |
1421 | PPCODE: |
1422 | PPCODE: |
1422 | { |
1423 | { |
1423 | SV *data; |
1424 | SV *data; |
… | |
… | |
1478 | REQ_SEND; |
1479 | REQ_SEND; |
1479 | } |
1480 | } |
1480 | |
1481 | |
1481 | void |
1482 | void |
1482 | aio_stat (fh_or_path,callback=&PL_sv_undef) |
1483 | aio_stat (fh_or_path,callback=&PL_sv_undef) |
1483 | SV * fh_or_path |
1484 | SV8 * fh_or_path |
1484 | SV * callback |
1485 | SV * callback |
1485 | ALIAS: |
1486 | ALIAS: |
1486 | aio_stat = REQ_STAT |
1487 | aio_stat = REQ_STAT |
1487 | aio_lstat = REQ_LSTAT |
1488 | aio_lstat = REQ_LSTAT |
1488 | PPCODE: |
1489 | PPCODE: |
… | |
… | |
1514 | REQ_SEND; |
1515 | REQ_SEND; |
1515 | } |
1516 | } |
1516 | |
1517 | |
1517 | void |
1518 | void |
1518 | aio_unlink (pathname,callback=&PL_sv_undef) |
1519 | aio_unlink (pathname,callback=&PL_sv_undef) |
1519 | SV * pathname |
1520 | SV8 * pathname |
1520 | SV * callback |
1521 | SV * callback |
1521 | ALIAS: |
1522 | ALIAS: |
1522 | aio_unlink = REQ_UNLINK |
1523 | aio_unlink = REQ_UNLINK |
1523 | aio_rmdir = REQ_RMDIR |
1524 | aio_rmdir = REQ_RMDIR |
1524 | aio_readdir = REQ_READDIR |
1525 | aio_readdir = REQ_READDIR |
… | |
… | |
1533 | REQ_SEND; |
1534 | REQ_SEND; |
1534 | } |
1535 | } |
1535 | |
1536 | |
1536 | void |
1537 | void |
1537 | aio_link (oldpath,newpath,callback=&PL_sv_undef) |
1538 | aio_link (oldpath,newpath,callback=&PL_sv_undef) |
1538 | SV * oldpath |
1539 | SV8 * oldpath |
1539 | SV * newpath |
1540 | SV8 * newpath |
1540 | SV * callback |
1541 | SV * callback |
1541 | ALIAS: |
1542 | ALIAS: |
1542 | aio_link = REQ_LINK |
1543 | aio_link = REQ_LINK |
1543 | aio_symlink = REQ_SYMLINK |
1544 | aio_symlink = REQ_SYMLINK |
1544 | aio_rename = REQ_RENAME |
1545 | aio_rename = REQ_RENAME |
… | |
… | |
1555 | REQ_SEND; |
1556 | REQ_SEND; |
1556 | } |
1557 | } |
1557 | |
1558 | |
1558 | void |
1559 | void |
1559 | aio_mknod (pathname,mode,dev,callback=&PL_sv_undef) |
1560 | aio_mknod (pathname,mode,dev,callback=&PL_sv_undef) |
1560 | SV * pathname |
1561 | SV8 * pathname |
1561 | SV * callback |
1562 | SV * callback |
1562 | UV mode |
1563 | UV mode |
1563 | UV dev |
1564 | UV dev |
1564 | PPCODE: |
1565 | PPCODE: |
1565 | { |
1566 | { |
… | |
… | |
1642 | PROTOTYPE: |
1643 | PROTOTYPE: |
1643 | CODE: |
1644 | CODE: |
1644 | while (nreqs) |
1645 | while (nreqs) |
1645 | { |
1646 | { |
1646 | poll_wait (); |
1647 | poll_wait (); |
1647 | poll_cb (0); |
1648 | poll_cb (); |
1648 | } |
1649 | } |
1649 | |
1650 | |
1650 | void |
1651 | int |
1651 | poll() |
1652 | poll() |
1652 | PROTOTYPE: |
1653 | PROTOTYPE: |
1653 | CODE: |
1654 | CODE: |
1654 | if (nreqs) |
|
|
1655 | { |
|
|
1656 | poll_wait (); |
1655 | poll_wait (); |
1657 | poll_cb (0); |
1656 | RETVAL = poll_cb (); |
1658 | } |
1657 | OUTPUT: |
|
|
1658 | RETVAL |
1659 | |
1659 | |
1660 | int |
1660 | int |
1661 | poll_fileno() |
1661 | poll_fileno() |
1662 | PROTOTYPE: |
1662 | PROTOTYPE: |
1663 | CODE: |
1663 | CODE: |
… | |
… | |
1675 | |
1675 | |
1676 | void |
1676 | void |
1677 | poll_wait() |
1677 | poll_wait() |
1678 | PROTOTYPE: |
1678 | PROTOTYPE: |
1679 | CODE: |
1679 | CODE: |
1680 | if (nreqs) |
|
|
1681 | poll_wait (); |
1680 | poll_wait (); |
1682 | |
1681 | |
1683 | int |
1682 | int |
1684 | nreqs() |
1683 | nreqs() |
1685 | PROTOTYPE: |
1684 | PROTOTYPE: |
1686 | CODE: |
1685 | CODE: |