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.132 by root, Mon Oct 13 10:38:17 2008 UTC vs.
Revision 1.134 by root, Sun Apr 19 13:05:06 2009 UTC

516 newCONSTSUB (stash, "O_CREAT", newSViv (O_CREAT)); 516 newCONSTSUB (stash, "O_CREAT", newSViv (O_CREAT));
517 newCONSTSUB (stash, "O_TRUNC", newSViv (O_TRUNC)); 517 newCONSTSUB (stash, "O_TRUNC", newSViv (O_TRUNC));
518#ifndef _WIN32 518#ifndef _WIN32
519 newCONSTSUB (stash, "S_IFIFO", newSViv (S_IFIFO)); 519 newCONSTSUB (stash, "S_IFIFO", newSViv (S_IFIFO));
520#endif 520#endif
521 newCONSTSUB (stash, "S_IFIFO", newSViv (S_IFIFO));
522 newCONSTSUB (stash, "SYNC_FILE_RANGE_WAIT_BEFORE", newSViv (EIO_SYNC_FILE_RANGE_WAIT_BEFORE));
523 newCONSTSUB (stash, "SYNC_FILE_RANGE_WRITE" , newSViv (EIO_SYNC_FILE_RANGE_WRITE));
524 newCONSTSUB (stash, "SYNC_FILE_RANGE_WAIT_AFTER" , newSViv (EIO_SYNC_FILE_RANGE_WAIT_AFTER));
521 525
522 create_respipe (); 526 create_respipe ();
523 527
524 if (eio_init (want_poll, done_poll) < 0) 528 if (eio_init (want_poll, done_poll) < 0)
525 croak ("IO::AIO: unable to initialise eio library"); 529 croak ("IO::AIO: unable to initialise eio library");
591 dREQ; 595 dREQ;
592 596
593 req->type = ix; 597 req->type = ix;
594 req->sv1 = newSVsv (fh); 598 req->sv1 = newSVsv (fh);
595 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh))); 599 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh)));
600
601 REQ_SEND (req);
602}
603
604void
605aio_sync_file_range (SV *fh, SV *offset, SV *nbytes, IV flags, SV *callback=&PL_sv_undef)
606 PROTOTYPE: $$$$;$
607 PPCODE:
608{
609 dREQ;
610
611 req->type = EIO_SYNC_FILE_RANGE;
612 req->sv1 = newSVsv (fh);
613 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh)));
614 req->offs = SvVAL64 (offset);
615 req->size = SvVAL64 (nbytes);
616 req->int2 = flags;
596 617
597 REQ_SEND (req); 618 REQ_SEND (req);
598} 619}
599 620
600void 621void
634 PPCODE: 655 PPCODE:
635{ 656{
636 STRLEN svlen; 657 STRLEN svlen;
637 char *svptr = SvPVbyte (data, svlen); 658 char *svptr = SvPVbyte (data, svlen);
638 UV len = SvUV (length); 659 UV len = SvUV (length);
660 int fd;
661
662 if (SvTYPE (data) > SVt_PVMG)
663 croak ("illegal data argument '%s', must be plain scalar string", SvPV_nolen (data));
639 664
640 SvUPGRADE (data, SVt_PV); 665 SvUPGRADE (data, SVt_PV);
641 SvPOK_on (data); 666 SvPOK_only (data);
642 667
643 if (dataoffset < 0) 668 if (dataoffset < 0)
644 dataoffset += svlen; 669 dataoffset += svlen;
645 670
646 if (dataoffset < 0 || dataoffset > svlen) 671 if (dataoffset < 0 || dataoffset > svlen)
659 } 684 }
660 685
661 if (len < 0) 686 if (len < 0)
662 croak ("length must not be negative"); 687 croak ("length must not be negative");
663 688
689 fd = PerlIO_fileno (ix == EIO_READ ? IoIFP (sv_2io (fh))
690 : IoOFP (sv_2io (fh)));
691
692 if (fd < 0)
693 croak ("illegal fh argument, either not an OS file or read/write mode mismatch");
694
664 { 695 {
665 dREQ; 696 dREQ;
666 697
667 req->type = ix; 698 req->type = ix;
668 req->sv1 = newSVsv (fh); 699 req->sv1 = newSVsv (fh);
669 req->int1 = PerlIO_fileno (ix == EIO_READ ? IoIFP (sv_2io (fh)) 700 req->int1 = df;
670 : IoOFP (sv_2io (fh)));
671 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1; 701 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1;
672 req->size = len; 702 req->size = len;
673 req->sv2 = SvREFCNT_inc (data); 703 req->sv2 = SvREFCNT_inc (data);
674 req->ptr2 = (char *)svptr + dataoffset; 704 req->ptr2 = (char *)svptr + dataoffset;
675 req->stroffset = dataoffset; 705 req->stroffset = dataoffset;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines