… | |
… | |
92 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
92 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
93 | REQ_SENDFILE, |
93 | REQ_SENDFILE, |
94 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
94 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
95 | REQ_FSYNC, REQ_FDATASYNC, |
95 | REQ_FSYNC, REQ_FDATASYNC, |
96 | REQ_UNLINK, REQ_RMDIR, REQ_RENAME, |
96 | REQ_UNLINK, REQ_RMDIR, REQ_RENAME, |
97 | REQ_READDIR, |
97 | REQ_MKNOD, REQ_READDIR, |
98 | REQ_LINK, REQ_SYMLINK, |
98 | REQ_LINK, REQ_SYMLINK, |
99 | REQ_GROUP, REQ_NOP, |
99 | REQ_GROUP, REQ_NOP, |
100 | REQ_BUSY, |
100 | REQ_BUSY, |
101 | }; |
101 | }; |
102 | |
102 | |
… | |
… | |
1043 | case REQ_UNLINK: req->result = unlink (req->dataptr); break; |
1043 | case REQ_UNLINK: req->result = unlink (req->dataptr); break; |
1044 | case REQ_RMDIR: req->result = rmdir (req->dataptr); break; |
1044 | case REQ_RMDIR: req->result = rmdir (req->dataptr); break; |
1045 | case REQ_RENAME: req->result = rename (req->data2ptr, req->dataptr); break; |
1045 | case REQ_RENAME: req->result = rename (req->data2ptr, req->dataptr); break; |
1046 | case REQ_LINK: req->result = link (req->data2ptr, req->dataptr); break; |
1046 | case REQ_LINK: req->result = link (req->data2ptr, req->dataptr); break; |
1047 | case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break; |
1047 | case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break; |
|
|
1048 | case REQ_MKNOD: req->result = mknod (req->data2ptr, req->mode, (dev_t)req->offset); break; |
1048 | |
1049 | |
1049 | case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; |
1050 | case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; |
1050 | case REQ_FSYNC: req->result = fsync (req->fd); break; |
1051 | case REQ_FSYNC: req->result = fsync (req->fd); break; |
1051 | case REQ_READDIR: scandir_ (req, self); break; |
1052 | case REQ_READDIR: scandir_ (req, self); break; |
1052 | |
1053 | |
… | |
… | |
1178 | PROTOTYPES: ENABLE |
1179 | PROTOTYPES: ENABLE |
1179 | |
1180 | |
1180 | BOOT: |
1181 | BOOT: |
1181 | { |
1182 | { |
1182 | HV *stash = gv_stashpv ("IO::AIO", 1); |
1183 | HV *stash = gv_stashpv ("IO::AIO", 1); |
|
|
1184 | |
1183 | newCONSTSUB (stash, "EXDEV", newSViv (EXDEV)); |
1185 | newCONSTSUB (stash, "EXDEV", newSViv (EXDEV)); |
1184 | newCONSTSUB (stash, "O_RDONLY", newSViv (O_RDONLY)); |
1186 | newCONSTSUB (stash, "O_RDONLY", newSViv (O_RDONLY)); |
1185 | newCONSTSUB (stash, "O_WRONLY", newSViv (O_WRONLY)); |
1187 | newCONSTSUB (stash, "O_WRONLY", newSViv (O_WRONLY)); |
|
|
1188 | newCONSTSUB (stash, "O_CREAT", newSViv (O_CREAT)); |
|
|
1189 | newCONSTSUB (stash, "O_TRUNC", newSViv (O_TRUNC)); |
|
|
1190 | newCONSTSUB (stash, "S_IFIFO", newSViv (S_IFIFO)); |
1186 | |
1191 | |
1187 | create_pipe (); |
1192 | create_pipe (); |
1188 | pthread_atfork (atfork_prepare, atfork_parent, atfork_child); |
1193 | pthread_atfork (atfork_prepare, atfork_parent, atfork_child); |
1189 | |
1194 | |
1190 | start_thread (); |
1195 | start_thread (); |
… | |
… | |
1423 | req->type = ix; |
1428 | req->type = ix; |
1424 | req->fh = newSVsv (oldpath); |
1429 | req->fh = newSVsv (oldpath); |
1425 | req->data2ptr = SvPVbyte_nolen (req->fh); |
1430 | req->data2ptr = SvPVbyte_nolen (req->fh); |
1426 | req->data = newSVsv (newpath); |
1431 | req->data = newSVsv (newpath); |
1427 | req->dataptr = SvPVbyte_nolen (req->data); |
1432 | req->dataptr = SvPVbyte_nolen (req->data); |
|
|
1433 | |
|
|
1434 | REQ_SEND; |
|
|
1435 | } |
|
|
1436 | |
|
|
1437 | void |
|
|
1438 | aio_mknod (pathname,mode,dev,callback=&PL_sv_undef) |
|
|
1439 | SV * pathname |
|
|
1440 | SV * callback |
|
|
1441 | UV mode |
|
|
1442 | UV dev |
|
|
1443 | PPCODE: |
|
|
1444 | { |
|
|
1445 | dREQ; |
|
|
1446 | |
|
|
1447 | req->type = REQ_MKNOD; |
|
|
1448 | req->data = newSVsv (pathname); |
|
|
1449 | req->dataptr = SvPVbyte_nolen (req->data); |
|
|
1450 | req->mode = (mode_t)mode; |
|
|
1451 | req->offset = dev; |
1428 | |
1452 | |
1429 | REQ_SEND; |
1453 | REQ_SEND; |
1430 | } |
1454 | } |
1431 | |
1455 | |
1432 | void |
1456 | void |