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.118 by root, Sun May 11 00:01:03 2008 UTC vs.
Revision 1.119 by root, Sun May 11 19:11:05 2008 UTC

280 case EIO_BUSY: 280 case EIO_BUSY:
281 break; 281 break;
282 282
283 case EIO_READLINK: 283 case EIO_READLINK:
284 if (req->result > 0) 284 if (req->result > 0)
285 { 285 PUSHs (sv_2mortal (newSVpvn (req->ptr2, req->result)));
286 SvCUR_set (req->sv2, req->result);
287 *SvEND (req->sv2) = 0;
288 PUSHs (req->sv2);
289 }
290 break; 286 break;
291 287
292 case EIO_STAT: 288 case EIO_STAT:
293 case EIO_LSTAT: 289 case EIO_LSTAT:
294 case EIO_FSTAT: 290 case EIO_FSTAT:
664 PPCODE: 660 PPCODE:
665{ 661{
666 SV *data; 662 SV *data;
667 dREQ; 663 dREQ;
668 664
669 data = newSV (NAME_MAX);
670 SvPOK_on (data);
671
672 req->type = EIO_READLINK; 665 req->type = EIO_READLINK;
673 req->sv1 = newSVsv (path); 666 req->sv1 = newSVsv (path);
674 req->ptr1 = SvPVbyte_nolen (req->sv1); 667 req->ptr1 = SvPVbyte_nolen (req->sv1);
675 req->sv2 = data;
676 req->ptr2 = SvPVbyte_nolen (data);
677 668
678 REQ_SEND; 669 REQ_SEND;
679} 670}
680 671
681void 672void
719 aio_lstat = EIO_LSTAT 710 aio_lstat = EIO_LSTAT
720 PPCODE: 711 PPCODE:
721{ 712{
722 dREQ; 713 dREQ;
723 714
724 req->ptr2 = malloc (sizeof (EIO_STRUCT_STAT));
725 if (!req->ptr2)
726 {
727 req_destroy (req);
728 croak ("out of memory during aio_stat statdata allocation");
729 }
730
731 req->flags |= EIO_FLAG_PTR2_FREE;
732 req->sv1 = newSVsv (fh_or_path); 715 req->sv1 = newSVsv (fh_or_path);
733 716
734 if (SvPOK (fh_or_path)) 717 if (SvPOK (req->sv1))
735 { 718 {
736 req->type = ix; 719 req->type = ix;
737 req->ptr1 = SvPVbyte_nolen (req->sv1); 720 req->ptr1 = SvPVbyte_nolen (req->sv1);
738 } 721 }
739 else 722 else
753 736
754 req->nv1 = SvOK (atime) ? SvNV (atime) : -1.; 737 req->nv1 = SvOK (atime) ? SvNV (atime) : -1.;
755 req->nv2 = SvOK (mtime) ? SvNV (mtime) : -1.; 738 req->nv2 = SvOK (mtime) ? SvNV (mtime) : -1.;
756 req->sv1 = newSVsv (fh_or_path); 739 req->sv1 = newSVsv (fh_or_path);
757 740
758 if (SvPOK (fh_or_path)) 741 if (SvPOK (req->sv1))
759 { 742 {
760 req->type = EIO_UTIME; 743 req->type = EIO_UTIME;
761 req->ptr1 = SvPVbyte_nolen (req->sv1); 744 req->ptr1 = SvPVbyte_nolen (req->sv1);
762 } 745 }
763 else 746 else
776 dREQ; 759 dREQ;
777 760
778 req->sv1 = newSVsv (fh_or_path); 761 req->sv1 = newSVsv (fh_or_path);
779 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1; 762 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1;
780 763
781 if (SvPOK (fh_or_path)) 764 if (SvPOK (req->sv1))
782 { 765 {
783 req->type = EIO_TRUNCATE; 766 req->type = EIO_TRUNCATE;
784 req->ptr1 = SvPVbyte_nolen (req->sv1); 767 req->ptr1 = SvPVbyte_nolen (req->sv1);
785 } 768 }
786 else 769 else
794 777
795void 778void
796aio_chmod (SV8 *fh_or_path, int mode, SV *callback=&PL_sv_undef) 779aio_chmod (SV8 *fh_or_path, int mode, SV *callback=&PL_sv_undef)
797 ALIAS: 780 ALIAS:
798 aio_chmod = EIO_CHMOD 781 aio_chmod = EIO_CHMOD
799 aio_fchmod = EIO_FCHMOD
800 aio_mkdir = EIO_MKDIR 782 aio_mkdir = EIO_MKDIR
801 PPCODE: 783 PPCODE:
802{ 784{
803 dREQ; 785 dREQ;
804 786
805 req->type = ix;
806 req->int2 = mode; 787 req->int2 = mode;
807 req->sv1 = newSVsv (fh_or_path); 788 req->sv1 = newSVsv (fh_or_path);
808 789
809 if (ix == EIO_FCHMOD) 790 if (SvPOK (req->sv1))
791 {
792 req->type = EIO_FCHMOD;
810 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh_or_path))); 793 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh_or_path)));
794 }
811 else 795 else
796 {
797 req->type = ix;
812 req->ptr1 = SvPVbyte_nolen (req->sv1); 798 req->ptr1 = SvPVbyte_nolen (req->sv1);
799 }
813 800
814 REQ_SEND; 801 REQ_SEND;
815} 802}
816 803
817void 804void
822 809
823 req->int2 = SvOK (uid) ? SvIV (uid) : -1; 810 req->int2 = SvOK (uid) ? SvIV (uid) : -1;
824 req->int3 = SvOK (gid) ? SvIV (gid) : -1; 811 req->int3 = SvOK (gid) ? SvIV (gid) : -1;
825 req->sv1 = newSVsv (fh_or_path); 812 req->sv1 = newSVsv (fh_or_path);
826 813
827 if (SvPOK (fh_or_path)) 814 if (SvPOK (req->sv1))
828 { 815 {
829 req->type = EIO_CHOWN; 816 req->type = EIO_CHOWN;
830 req->ptr1 = SvPVbyte_nolen (req->sv1); 817 req->ptr1 = SvPVbyte_nolen (req->sv1);
831 } 818 }
832 else 819 else

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines