… | |
… | |
11 | #include <stddef.h> |
11 | #include <stddef.h> |
12 | #include <stdlib.h> |
12 | #include <stdlib.h> |
13 | #include <errno.h> |
13 | #include <errno.h> |
14 | #include <sys/types.h> |
14 | #include <sys/types.h> |
15 | #include <sys/stat.h> |
15 | #include <sys/stat.h> |
16 | #include <sys/statvfs.h> |
|
|
17 | #include <limits.h> |
16 | #include <limits.h> |
18 | #include <fcntl.h> |
17 | #include <fcntl.h> |
19 | #include <sched.h> |
18 | #include <sched.h> |
20 | |
19 | |
21 | #if _POSIX_MEMLOCK || _POSIX_MEMLOCK_RANGE || _POSIX_MAPPED_FILES |
20 | #if _POSIX_MEMLOCK || _POSIX_MEMLOCK_RANGE || _POSIX_MAPPED_FILES |
… | |
… | |
47 | # undef unlink |
46 | # undef unlink |
48 | # undef rmdir |
47 | # undef rmdir |
49 | # undef rename |
48 | # undef rename |
50 | # undef lseek |
49 | # undef lseek |
51 | |
50 | |
52 | # define chown(a,b,c) (errno = ENOSYS, -1) |
|
|
53 | # define fchown(a,b,c) (errno = ENOSYS, -1) |
|
|
54 | # define fchmod(a,b) (errno = ENOSYS, -1) |
|
|
55 | # define symlink(a,b) (errno = ENOSYS, -1) |
|
|
56 | # define readlink(a,b,c) (errno = ENOSYS, -1) |
|
|
57 | # define mknod(a,b,c) (errno = ENOSYS, -1) |
|
|
58 | # define truncate(a,b) (errno = ENOSYS, -1) |
|
|
59 | # define ftruncate(fd,o) chsize ((fd), (o)) |
|
|
60 | # define fsync(fd) _commit (fd) |
|
|
61 | # define opendir(fd) (errno = ENOSYS, 0) |
51 | # define opendir(fd) (errno = ENOSYS, 0) |
62 | # define readdir(fd) (errno = ENOSYS, -1) |
52 | # define readdir(fd) (errno = ENOSYS, -1) |
63 | # define closedir(fd) (errno = ENOSYS, -1) |
53 | # define closedir(fd) (errno = ENOSYS, -1) |
64 | # define mkdir(a,b) mkdir (a) |
|
|
65 | |
54 | |
66 | #else |
55 | #else |
67 | |
56 | |
68 | # include <sys/time.h> |
57 | # include <sys/time.h> |
69 | # include <sys/select.h> |
58 | # include <sys/select.h> |
… | |
… | |
667 | grp->sv2 = 0; |
656 | grp->sv2 = 0; |
668 | |
657 | |
669 | eio_grp_cancel (grp); |
658 | eio_grp_cancel (grp); |
670 | } |
659 | } |
671 | |
660 | |
672 | static void |
|
|
673 | create_respipe (void) |
661 | static void create_respipe (void) |
674 | { |
662 | { |
675 | if (s_epipe_renew (&respipe)) |
663 | if (s_epipe_renew (&respipe)) |
676 | croak ("IO::AIO: unable to initialize result pipe"); |
664 | croak ("IO::AIO: unable to initialize result pipe"); |
677 | } |
665 | } |
678 | |
666 | |
… | |
… | |
732 | # define MAP_FIXED 0 |
720 | # define MAP_FIXED 0 |
733 | #endif |
721 | #endif |
734 | |
722 | |
735 | #define MMAP_MAGIC PERL_MAGIC_ext |
723 | #define MMAP_MAGIC PERL_MAGIC_ext |
736 | |
724 | |
737 | static int |
|
|
738 | mmap_free (pTHX_ SV *sv, MAGIC *mg) |
725 | static int mmap_free (pTHX_ SV *sv, MAGIC *mg) |
739 | { |
726 | { |
740 | int old_errno = errno; |
727 | int old_errno = errno; |
741 | munmap (mg->mg_ptr, (size_t)mg->mg_obj); |
728 | munmap (mg->mg_ptr, (size_t)mg->mg_obj); |
742 | errno = old_errno; |
729 | errno = old_errno; |
743 | |
730 | |
… | |
… | |
759 | 0, 0, 0, 0, mmap_free |
746 | 0, 0, 0, 0, mmap_free |
760 | }; |
747 | }; |
761 | |
748 | |
762 | /*****************************************************************************/ |
749 | /*****************************************************************************/ |
763 | |
750 | |
764 | static SV * |
|
|
765 | get_cb (SV *cb_sv) |
751 | static SV * get_cb (SV *cb_sv) |
766 | { |
752 | { |
767 | SvGETMAGIC (cb_sv); |
753 | SvGETMAGIC (cb_sv); |
768 | return SvOK (cb_sv) ? s_get_cv_croak (cb_sv) : 0; |
754 | return SvOK (cb_sv) ? s_get_cv_croak (cb_sv) : 0; |
769 | } |
755 | } |
770 | |
756 | |
… | |
… | |
894 | |
880 | |
895 | const_eio (SYNC_FILE_RANGE_WAIT_BEFORE) |
881 | const_eio (SYNC_FILE_RANGE_WAIT_BEFORE) |
896 | const_eio (SYNC_FILE_RANGE_WRITE) |
882 | const_eio (SYNC_FILE_RANGE_WRITE) |
897 | const_eio (SYNC_FILE_RANGE_WAIT_AFTER) |
883 | const_eio (SYNC_FILE_RANGE_WAIT_AFTER) |
898 | |
884 | |
|
|
885 | const_eio (FALLOC_FL_KEEP_SIZE) |
|
|
886 | |
899 | const_eio (READDIR_DENTS) |
887 | const_eio (READDIR_DENTS) |
900 | const_eio (READDIR_DIRS_FIRST) |
888 | const_eio (READDIR_DIRS_FIRST) |
901 | const_eio (READDIR_STAT_ORDER) |
889 | const_eio (READDIR_STAT_ORDER) |
902 | const_eio (READDIR_FOUND_UNKNOWN) |
890 | const_eio (READDIR_FOUND_UNKNOWN) |
903 | |
891 | |
… | |
… | |
1015 | req->sv1 = newSVsv (fh); |
1003 | req->sv1 = newSVsv (fh); |
1016 | req->int1 = fd; |
1004 | req->int1 = fd; |
1017 | req->offs = offset; |
1005 | req->offs = offset; |
1018 | req->size = nbytes; |
1006 | req->size = nbytes; |
1019 | req->int2 = flags; |
1007 | req->int2 = flags; |
|
|
1008 | |
|
|
1009 | REQ_SEND (req); |
|
|
1010 | } |
|
|
1011 | |
|
|
1012 | void |
|
|
1013 | aio_fallocate (SV *fh, int mode, off_t offset, size_t len, SV *callback=&PL_sv_undef) |
|
|
1014 | PPCODE: |
|
|
1015 | { |
|
|
1016 | int fd = s_fileno_croak (fh, 0); |
|
|
1017 | dREQ; |
|
|
1018 | |
|
|
1019 | req->type = EIO_FALLOCATE; |
|
|
1020 | req->sv1 = newSVsv (fh); |
|
|
1021 | req->int1 = fd; |
|
|
1022 | req->int2 = mode; |
|
|
1023 | req->offs = offset; |
|
|
1024 | req->size = len; |
1020 | |
1025 | |
1021 | REQ_SEND (req); |
1026 | REQ_SEND (req); |
1022 | } |
1027 | } |
1023 | |
1028 | |
1024 | void |
1029 | void |