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.117 by root, Sat May 10 20:02:09 2008 UTC vs.
Revision 1.119 by root, Sun May 11 19:11:05 2008 UTC

12#include <sys/types.h> 12#include <sys/types.h>
13#include <sys/stat.h> 13#include <sys/stat.h>
14#include <limits.h> 14#include <limits.h>
15#include <fcntl.h> 15#include <fcntl.h>
16#include <sched.h> 16#include <sched.h>
17
18/* perl namespace pollution */
19#undef VERSION
17 20
18#ifdef _WIN32 21#ifdef _WIN32
19 22
20# define EIO_STRUCT_DIRENT Direntry_t 23# define EIO_STRUCT_DIRENT Direntry_t
21# undef malloc 24# undef malloc
277 case EIO_BUSY: 280 case EIO_BUSY:
278 break; 281 break;
279 282
280 case EIO_READLINK: 283 case EIO_READLINK:
281 if (req->result > 0) 284 if (req->result > 0)
282 { 285 PUSHs (sv_2mortal (newSVpvn (req->ptr2, req->result)));
283 SvCUR_set (req->sv2, req->result);
284 *SvEND (req->sv2) = 0;
285 PUSHs (req->sv2);
286 }
287 break; 286 break;
288 287
289 case EIO_STAT: 288 case EIO_STAT:
290 case EIO_LSTAT: 289 case EIO_LSTAT:
291 case EIO_FSTAT: 290 case EIO_FSTAT:
661 PPCODE: 660 PPCODE:
662{ 661{
663 SV *data; 662 SV *data;
664 dREQ; 663 dREQ;
665 664
666 data = newSV (NAME_MAX);
667 SvPOK_on (data);
668
669 req->type = EIO_READLINK; 665 req->type = EIO_READLINK;
670 req->sv1 = newSVsv (path); 666 req->sv1 = newSVsv (path);
671 req->ptr1 = SvPVbyte_nolen (req->sv1); 667 req->ptr1 = SvPVbyte_nolen (req->sv1);
672 req->sv2 = data;
673 req->ptr2 = SvPVbyte_nolen (data);
674 668
675 REQ_SEND; 669 REQ_SEND;
676} 670}
677 671
678void 672void
716 aio_lstat = EIO_LSTAT 710 aio_lstat = EIO_LSTAT
717 PPCODE: 711 PPCODE:
718{ 712{
719 dREQ; 713 dREQ;
720 714
721 req->ptr2 = malloc (sizeof (EIO_STRUCT_STAT));
722 if (!req->ptr2)
723 {
724 req_destroy (req);
725 croak ("out of memory during aio_stat statdata allocation");
726 }
727
728 req->flags |= EIO_FLAG_PTR2_FREE;
729 req->sv1 = newSVsv (fh_or_path); 715 req->sv1 = newSVsv (fh_or_path);
730 716
731 if (SvPOK (fh_or_path)) 717 if (SvPOK (req->sv1))
732 { 718 {
733 req->type = ix; 719 req->type = ix;
734 req->ptr1 = SvPVbyte_nolen (req->sv1); 720 req->ptr1 = SvPVbyte_nolen (req->sv1);
735 } 721 }
736 else 722 else
750 736
751 req->nv1 = SvOK (atime) ? SvNV (atime) : -1.; 737 req->nv1 = SvOK (atime) ? SvNV (atime) : -1.;
752 req->nv2 = SvOK (mtime) ? SvNV (mtime) : -1.; 738 req->nv2 = SvOK (mtime) ? SvNV (mtime) : -1.;
753 req->sv1 = newSVsv (fh_or_path); 739 req->sv1 = newSVsv (fh_or_path);
754 740
755 if (SvPOK (fh_or_path)) 741 if (SvPOK (req->sv1))
756 { 742 {
757 req->type = EIO_UTIME; 743 req->type = EIO_UTIME;
758 req->ptr1 = SvPVbyte_nolen (req->sv1); 744 req->ptr1 = SvPVbyte_nolen (req->sv1);
759 } 745 }
760 else 746 else
773 dREQ; 759 dREQ;
774 760
775 req->sv1 = newSVsv (fh_or_path); 761 req->sv1 = newSVsv (fh_or_path);
776 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1; 762 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1;
777 763
778 if (SvPOK (fh_or_path)) 764 if (SvPOK (req->sv1))
779 { 765 {
780 req->type = EIO_TRUNCATE; 766 req->type = EIO_TRUNCATE;
781 req->ptr1 = SvPVbyte_nolen (req->sv1); 767 req->ptr1 = SvPVbyte_nolen (req->sv1);
782 } 768 }
783 else 769 else
791 777
792void 778void
793aio_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)
794 ALIAS: 780 ALIAS:
795 aio_chmod = EIO_CHMOD 781 aio_chmod = EIO_CHMOD
796 aio_fchmod = EIO_FCHMOD
797 aio_mkdir = EIO_MKDIR 782 aio_mkdir = EIO_MKDIR
798 PPCODE: 783 PPCODE:
799{ 784{
800 dREQ; 785 dREQ;
801 786
802 req->type = ix;
803 req->int2 = mode; 787 req->int2 = mode;
804 req->sv1 = newSVsv (fh_or_path); 788 req->sv1 = newSVsv (fh_or_path);
805 789
806 if (ix == EIO_FCHMOD) 790 if (SvPOK (req->sv1))
791 {
792 req->type = EIO_FCHMOD;
807 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh_or_path))); 793 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh_or_path)));
794 }
808 else 795 else
796 {
797 req->type = ix;
809 req->ptr1 = SvPVbyte_nolen (req->sv1); 798 req->ptr1 = SvPVbyte_nolen (req->sv1);
799 }
810 800
811 REQ_SEND; 801 REQ_SEND;
812} 802}
813 803
814void 804void
819 809
820 req->int2 = SvOK (uid) ? SvIV (uid) : -1; 810 req->int2 = SvOK (uid) ? SvIV (uid) : -1;
821 req->int3 = SvOK (gid) ? SvIV (gid) : -1; 811 req->int3 = SvOK (gid) ? SvIV (gid) : -1;
822 req->sv1 = newSVsv (fh_or_path); 812 req->sv1 = newSVsv (fh_or_path);
823 813
824 if (SvPOK (fh_or_path)) 814 if (SvPOK (req->sv1))
825 { 815 {
826 req->type = EIO_CHOWN; 816 req->type = EIO_CHOWN;
827 req->ptr1 = SvPVbyte_nolen (req->sv1); 817 req->ptr1 = SvPVbyte_nolen (req->sv1);
828 } 818 }
829 else 819 else

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines