… | |
… | |
97 | REQ_OPEN, REQ_CLOSE, |
97 | REQ_OPEN, REQ_CLOSE, |
98 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
98 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
99 | REQ_SENDFILE, |
99 | REQ_SENDFILE, |
100 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
100 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
101 | REQ_FSYNC, REQ_FDATASYNC, |
101 | REQ_FSYNC, REQ_FDATASYNC, |
102 | REQ_UNLINK, REQ_RMDIR, REQ_RENAME, |
102 | REQ_UNLINK, REQ_RMDIR, REQ_MKDIR, REQ_RENAME, |
103 | REQ_MKNOD, REQ_READDIR, |
103 | REQ_MKNOD, REQ_READDIR, |
104 | REQ_LINK, REQ_SYMLINK, REQ_READLINK, |
104 | REQ_LINK, REQ_SYMLINK, REQ_READLINK, |
105 | REQ_GROUP, REQ_NOP, |
105 | REQ_GROUP, REQ_NOP, |
106 | REQ_BUSY, |
106 | REQ_BUSY, |
107 | }; |
107 | }; |
… | |
… | |
777 | --npending; |
777 | --npending; |
778 | |
778 | |
779 | if (!res_queue.size) |
779 | if (!res_queue.size) |
780 | { |
780 | { |
781 | /* read any signals sent by the worker threads */ |
781 | /* read any signals sent by the worker threads */ |
782 | char buf [32]; |
782 | char buf [4]; |
783 | while (read (respipe [0], buf, 32) == 32) |
783 | while (read (respipe [0], buf, 4) == 4) |
784 | ; |
784 | ; |
785 | } |
785 | } |
786 | } |
786 | } |
787 | |
787 | |
788 | UNLOCK (reslock); |
788 | UNLOCK (reslock); |
… | |
… | |
1171 | |
1171 | |
1172 | case REQ_OPEN: req->result = open (req->ptr1, req->int1, req->mode); break; |
1172 | case REQ_OPEN: req->result = open (req->ptr1, req->int1, req->mode); break; |
1173 | case REQ_CLOSE: req->result = close (req->int1); break; |
1173 | case REQ_CLOSE: req->result = close (req->int1); break; |
1174 | case REQ_UNLINK: req->result = unlink (req->ptr1); break; |
1174 | case REQ_UNLINK: req->result = unlink (req->ptr1); break; |
1175 | case REQ_RMDIR: req->result = rmdir (req->ptr1); break; |
1175 | case REQ_RMDIR: req->result = rmdir (req->ptr1); break; |
|
|
1176 | case REQ_MKDIR: req->result = mkdir (req->ptr1, req->mode); break; |
1176 | case REQ_RENAME: req->result = rename (req->ptr2, req->ptr1); break; |
1177 | case REQ_RENAME: req->result = rename (req->ptr2, req->ptr1); break; |
1177 | case REQ_LINK: req->result = link (req->ptr2, req->ptr1); break; |
1178 | case REQ_LINK: req->result = link (req->ptr2, req->ptr1); break; |
1178 | case REQ_SYMLINK: req->result = symlink (req->ptr2, req->ptr1); break; |
1179 | case REQ_SYMLINK: req->result = symlink (req->ptr2, req->ptr1); break; |
1179 | case REQ_MKNOD: req->result = mknod (req->ptr2, req->mode, (dev_t)req->offs); break; |
1180 | case REQ_MKNOD: req->result = mknod (req->ptr2, req->mode, (dev_t)req->offs); break; |
1180 | case REQ_READLINK: req->result = readlink (req->ptr2, req->ptr1, NAME_MAX); break; |
1181 | case REQ_READLINK: req->result = readlink (req->ptr2, req->ptr1, NAME_MAX); break; |
… | |
… | |
1446 | length = svlen - dataoffset; |
1447 | length = svlen - dataoffset; |
1447 | } |
1448 | } |
1448 | else |
1449 | else |
1449 | { |
1450 | { |
1450 | /* read: grow scalar as necessary */ |
1451 | /* read: grow scalar as necessary */ |
1451 | svptr = SvGROW (data, length + dataoffset); |
1452 | svptr = SvGROW (data, length + dataoffset + 1); |
1452 | } |
1453 | } |
1453 | |
1454 | |
1454 | if (length < 0) |
1455 | if (length < 0) |
1455 | croak ("length must not be negative"); |
1456 | croak ("length must not be negative"); |
1456 | |
1457 | |
… | |
… | |
1596 | |
1597 | |
1597 | REQ_SEND; |
1598 | REQ_SEND; |
1598 | } |
1599 | } |
1599 | |
1600 | |
1600 | void |
1601 | void |
|
|
1602 | aio_mkdir (pathname,mode,callback=&PL_sv_undef) |
|
|
1603 | SV8 * pathname |
|
|
1604 | UV mode |
|
|
1605 | SV * callback |
|
|
1606 | PPCODE: |
|
|
1607 | { |
|
|
1608 | dREQ; |
|
|
1609 | |
|
|
1610 | req->type = REQ_MKDIR; |
|
|
1611 | req->sv1 = newSVsv (pathname); |
|
|
1612 | req->ptr1 = SvPVbyte_nolen (req->sv1); |
|
|
1613 | req->mode = mode; |
|
|
1614 | |
|
|
1615 | REQ_SEND; |
|
|
1616 | } |
|
|
1617 | |
|
|
1618 | void |
1601 | aio_link (oldpath,newpath,callback=&PL_sv_undef) |
1619 | aio_link (oldpath,newpath,callback=&PL_sv_undef) |
1602 | SV8 * oldpath |
1620 | SV8 * oldpath |
1603 | SV8 * newpath |
1621 | SV8 * newpath |
1604 | SV * callback |
1622 | SV * callback |
1605 | ALIAS: |
1623 | ALIAS: |
… | |
… | |
1620 | } |
1638 | } |
1621 | |
1639 | |
1622 | void |
1640 | void |
1623 | aio_mknod (pathname,mode,dev,callback=&PL_sv_undef) |
1641 | aio_mknod (pathname,mode,dev,callback=&PL_sv_undef) |
1624 | SV8 * pathname |
1642 | SV8 * pathname |
1625 | SV * callback |
|
|
1626 | UV mode |
1643 | UV mode |
1627 | UV dev |
1644 | UV dev |
|
|
1645 | SV * callback |
1628 | PPCODE: |
1646 | PPCODE: |
1629 | { |
1647 | { |
1630 | dREQ; |
1648 | dREQ; |
1631 | |
1649 | |
1632 | req->type = REQ_MKNOD; |
1650 | req->type = REQ_MKNOD; |