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.107 by root, Wed Oct 3 21:27:51 2007 UTC vs.
Revision 1.110 by root, Sun Dec 2 20:54:33 2007 UTC

119 REQ_STAT, REQ_LSTAT, REQ_FSTAT, 119 REQ_STAT, REQ_LSTAT, REQ_FSTAT,
120 REQ_TRUNCATE, REQ_FTRUNCATE, 120 REQ_TRUNCATE, REQ_FTRUNCATE,
121 REQ_UTIME, REQ_FUTIME, 121 REQ_UTIME, REQ_FUTIME,
122 REQ_CHMOD, REQ_FCHMOD, 122 REQ_CHMOD, REQ_FCHMOD,
123 REQ_CHOWN, REQ_FCHOWN, 123 REQ_CHOWN, REQ_FCHOWN,
124 REQ_FSYNC, REQ_FDATASYNC, 124 REQ_SYNC, REQ_FSYNC, REQ_FDATASYNC,
125 REQ_UNLINK, REQ_RMDIR, REQ_MKDIR, REQ_RENAME, 125 REQ_UNLINK, REQ_RMDIR, REQ_MKDIR, REQ_RENAME,
126 REQ_MKNOD, REQ_READDIR, 126 REQ_MKNOD, REQ_READDIR,
127 REQ_LINK, REQ_SYMLINK, REQ_READLINK, 127 REQ_LINK, REQ_SYMLINK, REQ_READLINK,
128 REQ_GROUP, REQ_NOP, 128 REQ_GROUP, REQ_NOP,
129 REQ_BUSY, 129 REQ_BUSY,
524 flags == O_RDONLY ? "<" : flags == O_WRONLY ? ">" : "+<", 524 flags == O_RDONLY ? "<" : flags == O_WRONLY ? ">" : "+<",
525 req->result 525 req->result
526 ); 526 );
527 527
528 if (do_open (gv, sym, symlen, 0, 0, 0, 0)) 528 if (do_open (gv, sym, symlen, 0, 0, 0, 0))
529 fh = gv; 529 fh = (SV *)gv;
530 } 530 }
531 531
532 XPUSHs (fh); 532 PUSHs (fh);
533 } 533 }
534 break; 534 break;
535 535
536 case REQ_GROUP: 536 case REQ_GROUP:
537 req->int1 = 2; /* mark group as finished */ 537 req->int1 = 2; /* mark group as finished */
581 } 581 }
582 582
583 errno = req->errorno; 583 errno = req->errorno;
584 584
585 PUTBACK; 585 PUTBACK;
586 call_sv (req->callback, G_VOID | G_EVAL); 586 call_sv (req->callback, G_VOID | G_EVAL | G_DISCARD);
587 SPAGAIN; 587 SPAGAIN;
588 588
589 FREETMPS; 589 FREETMPS;
590 LEAVE; 590 LEAVE;
591
592 PUTBACK;
591 } 593 }
592 594
593 if (req->grp) 595 if (req->grp)
594 { 596 {
595 aio_req grp = req->grp; 597 aio_req grp = req->grp;
1255 case REQ_FCHMOD: req->result = fchmod (req->int1, req->mode); break; 1257 case REQ_FCHMOD: req->result = fchmod (req->int1, req->mode); break;
1256 case REQ_TRUNCATE: req->result = truncate (req->ptr1, req->offs); break; 1258 case REQ_TRUNCATE: req->result = truncate (req->ptr1, req->offs); break;
1257 case REQ_FTRUNCATE: req->result = ftruncate (req->int1, req->offs); break; 1259 case REQ_FTRUNCATE: req->result = ftruncate (req->int1, req->offs); break;
1258 1260
1259 case REQ_OPEN: req->result = open (req->ptr1, req->int1, req->mode); break; 1261 case REQ_OPEN: req->result = open (req->ptr1, req->int1, req->mode); break;
1260 case REQ_CLOSE: req->result = PerlIO_close ((PerlIO *)req->ptr1); break; 1262 case REQ_CLOSE: req->result = close (req->int1); break;
1261 case REQ_UNLINK: req->result = unlink (req->ptr1); break; 1263 case REQ_UNLINK: req->result = unlink (req->ptr1); break;
1262 case REQ_RMDIR: req->result = rmdir (req->ptr1); break; 1264 case REQ_RMDIR: req->result = rmdir (req->ptr1); break;
1263 case REQ_MKDIR: req->result = mkdir (req->ptr1, req->mode); break; 1265 case REQ_MKDIR: req->result = mkdir (req->ptr1, req->mode); break;
1264 case REQ_RENAME: req->result = rename (req->ptr2, req->ptr1); break; 1266 case REQ_RENAME: req->result = rename (req->ptr2, req->ptr1); break;
1265 case REQ_LINK: req->result = link (req->ptr2, req->ptr1); break; 1267 case REQ_LINK: req->result = link (req->ptr2, req->ptr1); break;
1266 case REQ_SYMLINK: req->result = symlink (req->ptr2, req->ptr1); break; 1268 case REQ_SYMLINK: req->result = symlink (req->ptr2, req->ptr1); break;
1267 case REQ_MKNOD: req->result = mknod (req->ptr2, req->mode, (dev_t)req->offs); break; 1269 case REQ_MKNOD: req->result = mknod (req->ptr2, req->mode, (dev_t)req->offs); break;
1268 case REQ_READLINK: req->result = readlink (req->ptr2, req->ptr1, NAME_MAX); break; 1270 case REQ_READLINK: req->result = readlink (req->ptr2, req->ptr1, NAME_MAX); break;
1269 1271
1272 case REQ_SYNC: req->result = 0; sync (); break;
1273 case REQ_FSYNC: req->result = fsync (req->int1); break;
1270 case REQ_FDATASYNC: req->result = fdatasync (req->int1); break; 1274 case REQ_FDATASYNC: req->result = fdatasync (req->int1); break;
1271 case REQ_FSYNC: req->result = fsync (req->int1); break; 1275
1272 case REQ_READDIR: scandir_ (req, self); break; 1276 case REQ_READDIR: scandir_ (req, self); break;
1273 1277
1274 case REQ_BUSY: 1278 case REQ_BUSY:
1275#ifdef _WIN32 1279#ifdef _WIN32
1276 Sleep (req->nv1 * 1000.); 1280 Sleep (req->nv1 * 1000.);
1532 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh))); 1536 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh)));
1533 1537
1534 REQ_SEND (req); 1538 REQ_SEND (req);
1535} 1539}
1536 1540
1541int
1542_dup (int fd)
1543 PROTOTYPE: $
1544 CODE:
1545 RETVAL = dup (fd);
1546 OUTPUT:
1547 RETVAL
1548
1537void 1549void
1538aio_close (SV *fh, SV *callback=&PL_sv_undef) 1550_aio_close (int fd, SV *callback=&PL_sv_undef)
1539 PROTOTYPE: $;$ 1551 PROTOTYPE: $;$
1540 PPCODE: 1552 PPCODE:
1541{ 1553{
1542 PerlIO *io = IoIFP (sv_2io (fh));
1543 int fd = PerlIO_fileno (io);
1544
1545 if (fd < 0)
1546 croak ("aio_close called with fd-less filehandle");
1547
1548 PerlIO_binmode (io, 0, 0, 0);
1549
1550 {
1551 dREQ; 1554 dREQ;
1552 1555
1553 req->type = REQ_CLOSE; 1556 req->type = REQ_CLOSE;
1554 req->sv1 = newSVsv (fh); 1557 req->int1 = fd;
1555 req->ptr1 = (void *)io;
1556 1558
1557 REQ_SEND (req); 1559 REQ_SEND (req);
1558 }
1559} 1560}
1560 1561
1561void 1562void
1562aio_read (SV *fh, SV *offset, SV *length, SV8 *data, IV dataoffset, SV *callback=&PL_sv_undef) 1563aio_read (SV *fh, SV *offset, SV *length, SV8 *data, IV dataoffset, SV *callback=&PL_sv_undef)
1563 ALIAS: 1564 ALIAS:
1888 XPUSHs (req_sv (req, AIO_GRP_KLASS)); 1889 XPUSHs (req_sv (req, AIO_GRP_KLASS));
1889} 1890}
1890 1891
1891void 1892void
1892aio_nop (SV *callback=&PL_sv_undef) 1893aio_nop (SV *callback=&PL_sv_undef)
1894 ALIAS:
1895 aio_nop = REQ_NOP
1896 aio_sync = REQ_SYNC
1893 PPCODE: 1897 PPCODE:
1894{ 1898{
1895 dREQ; 1899 dREQ;
1896 1900
1897 req->type = REQ_NOP; 1901 req->type = ix;
1898 1902
1899 REQ_SEND; 1903 REQ_SEND;
1900} 1904}
1901 1905
1902int 1906int

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines