--- IO-AIO/AIO.xs 2015/06/25 15:20:11 1.234 +++ IO-AIO/AIO.xs 2016/07/18 07:48:01 1.243 @@ -23,7 +23,8 @@ /* the incompetent fool that created musl keeps __linux__, refuses * to implement any linux standard apis, and also has no way to test - * for his broken iplementation. on't complain if this fails for you. + * for his broken iplementation. don't complain to me if this fails + * for you. */ #if __linux__ && (defined __GLIBC__ || defined __UCLIBC__) # include @@ -147,6 +148,7 @@ #endif /* defines all sorts of constants to 0 unless they are already defined */ +/* also provides const_iv_ and const_niv_ macros for them */ #include "def0.h" #ifndef makedev @@ -705,14 +707,14 @@ { int size; - X_LOCK (reslock); - size = res_queue.size; - X_UNLOCK (reslock); + X_LOCK (EIO_POOL->reslock); + size = EIO_POOL->res_queue.size; + X_UNLOCK (EIO_POOL->reslock); if (size) return; - etp_maybe_start_thread (); + etp_maybe_start_thread (EIO_POOL); s_epipe_wait (&respipe); } @@ -753,11 +755,6 @@ #if !_POSIX_MEMORY_PROTECTION # define mprotect(addr,len,prot) EIO_ENOSYS () -# define PROT_NONE 0 -# define PROT_WRITE 0 -# define MAP_PRIVATE 0 -# define MAP_SHARED 0 -# define MAP_FIXED 0 #endif #define MMAP_MAGIC PERL_MAGIC_ext @@ -907,12 +904,31 @@ # define const_iv(name) { # name, (IV) name }, # define const_eio(name) { # name, (IV) EIO_ ## name }, - /* you have to re-run ./gendef0 after adding/Removing any constants here */ - + /* you have to re-run ./gendef0 after adding/removing any constants here */ + /* the first block can be undef if missing */ const_iv (ENOSYS) const_iv (EXDEV) const_iv (EBADR) + /* for lseek */ + const_iv (SEEK_DATA) + const_iv (SEEK_HOLE) + + const_niv (FADV_NORMAL , POSIX_FADV_NORMAL) + const_niv (FADV_SEQUENTIAL, POSIX_FADV_SEQUENTIAL) + const_niv (FADV_RANDOM , POSIX_FADV_RANDOM) + const_niv (FADV_NOREUSE , POSIX_FADV_NOREUSE) + const_niv (FADV_WILLNEED , POSIX_FADV_WILLNEED) + const_niv (FADV_DONTNEED , POSIX_FADV_DONTNEED) + + const_niv (MADV_NORMAL , POSIX_MADV_NORMAL) + const_niv (MADV_SEQUENTIAL, POSIX_MADV_SEQUENTIAL) + const_niv (MADV_RANDOM , POSIX_MADV_RANDOM) + const_niv (MADV_WILLNEED , POSIX_MADV_WILLNEED) + const_niv (MADV_DONTNEED , POSIX_MADV_DONTNEED) + const_niv (MADV_FREE , POSIX_MADV_FREE) + + /* the second block will be 0 when missing */ const_iv (O_RDONLY) const_iv (O_WRONLY) const_iv (O_RDWR) @@ -949,19 +965,6 @@ const_iv (S_IFSOCK) const_iv (S_IFMT) - const_niv (FADV_NORMAL , POSIX_FADV_NORMAL) - const_niv (FADV_SEQUENTIAL, POSIX_FADV_SEQUENTIAL) - const_niv (FADV_RANDOM , POSIX_FADV_RANDOM) - const_niv (FADV_NOREUSE , POSIX_FADV_NOREUSE) - const_niv (FADV_WILLNEED , POSIX_FADV_WILLNEED) - const_niv (FADV_DONTNEED , POSIX_FADV_DONTNEED) - - const_niv (MADV_NORMAL , POSIX_MADV_NORMAL) - const_niv (MADV_SEQUENTIAL, POSIX_MADV_SEQUENTIAL) - const_niv (MADV_RANDOM , POSIX_MADV_RANDOM) - const_niv (MADV_WILLNEED , POSIX_MADV_WILLNEED) - const_niv (MADV_DONTNEED , POSIX_MADV_DONTNEED) - const_iv (ST_RDONLY) const_iv (ST_NOSUID) const_iv (ST_NODEV) @@ -980,17 +983,77 @@ const_iv (PROT_READ) const_iv (PROT_WRITE) - /*const_iv (MAP_FIXED)*/ const_iv (MAP_PRIVATE) const_iv (MAP_SHARED) + const_iv (MAP_FIXED) const_iv (MAP_ANONYMOUS) /* linuxish */ - const_iv (MAP_HUGETLB) const_iv (MAP_LOCKED) const_iv (MAP_NORESERVE) const_iv (MAP_POPULATE) const_iv (MAP_NONBLOCK) + const_iv (MAP_GROWSDOWN) + const_iv (MAP_32BIT) + const_iv (MAP_HUGETLB) + const_iv (MAP_STACK) + + const_iv (FIFREEZE) + const_iv (FITHAW) + const_iv (FITRIM) + const_iv (FICLONE) + const_iv (FICLONERANGE) + const_iv (FIDEDUPERANGE) + + const_iv (FS_IOC_GETFLAGS) + const_iv (FS_IOC_SETFLAGS) + const_iv (FS_IOC_GETVERSION) + const_iv (FS_IOC_SETVERSION) + const_iv (FS_IOC_FIEMAP) + const_iv (FS_IOC_FSGETXATTR) + const_iv (FS_IOC_FSSETXATTR) + const_iv (FS_IOC_SET_ENCRYPTION_POLICY) + const_iv (FS_IOC_GET_ENCRYPTION_PWSALT) + const_iv (FS_IOC_GET_ENCRYPTION_POLICY) + + const_iv (FS_KEY_DESCRIPTOR_SIZE) + + const_iv (FS_SECRM_FL) + const_iv (FS_UNRM_FL) + const_iv (FS_COMPR_FL) + const_iv (FS_SYNC_FL) + const_iv (FS_IMMUTABLE_FL) + const_iv (FS_APPEND_FL) + const_iv (FS_NODUMP_FL) + const_iv (FS_NOATIME_FL) + const_iv (FS_DIRTY_FL) + const_iv (FS_COMPRBLK_FL) + const_iv (FS_NOCOMP_FL) + const_iv (FS_ENCRYPT_FL) + const_iv (FS_BTREE_FL) + const_iv (FS_INDEX_FL) + const_iv (FS_JOURNAL_DATA_FL) + const_iv (FS_NOTAIL_FL) + const_iv (FS_DIRSYNC_FL) + const_iv (FS_TOPDIR_FL) + const_iv (FS_FL_USER_MODIFIABLE) + + const_iv (FS_XFLAG_REALTIME) + const_iv (FS_XFLAG_PREALLOC) + const_iv (FS_XFLAG_IMMUTABLE) + const_iv (FS_XFLAG_APPEND) + const_iv (FS_XFLAG_SYNC) + const_iv (FS_XFLAG_NOATIME) + const_iv (FS_XFLAG_NODUMP) + const_iv (FS_XFLAG_RTINHERIT) + const_iv (FS_XFLAG_PROJINHERIT) + const_iv (FS_XFLAG_NOSYMLINKS) + const_iv (FS_XFLAG_EXTSIZE) + const_iv (FS_XFLAG_EXTSZINHERIT) + const_iv (FS_XFLAG_NODEFRAG) + const_iv (FS_XFLAG_FILESTREAM) + const_iv (FS_XFLAG_DAX) + const_iv (FS_XFLAG_HASATTR) const_iv (FIEMAP_FLAG_SYNC) const_iv (FIEMAP_FLAG_XATTR) @@ -1012,10 +1075,7 @@ const_iv (SPLICE_F_MORE) const_iv (SPLICE_F_GIFT) - const_iv (SEEK_DATA) - const_iv (SEEK_HOLE) - - /* libeio constants */ + /* these are libeio constants, and are independent of gendef0 */ const_eio (SEEK_SET) const_eio (SEEK_CUR) const_eio (SEEK_END) @@ -1297,6 +1357,46 @@ } void +aio_ioctl (SV *fh, unsigned long request, SV8 *arg, SV *callback = &PL_sv_undef) + ALIAS: + aio_ioctl = EIO_IOCTL + aio_fcntl = EIO_FCNTL + PPCODE: +{ + int fd = s_fileno_croak (fh, 0); + char *svptr; + + if (SvPOK (arg) || !SvNIOK (arg)) + { + STRLEN svlen; + /* perl uses IOCPARM_LEN for fcntl, so we do, too */ +#ifdef IOCPARM_LEN + STRLEN need = IOCPARM_LEN (request); +#else + STRLEN need = 256; +#endif + + if (svlen < need) + svptr = SvGROW (arg, need); + } + else + svptr = (char *)SvIV (arg); + + { + dREQ; + + req->type = ix; + req->sv1 = newSVsv (fh); + req->int1 = fd; + req->int2 = (long)request; + req->sv2 = SvREFCNT_inc (arg); + req->ptr2 = svptr; + + REQ_SEND; + } +} + +void aio_readlink (SV8 *pathname, SV *callback = &PL_sv_undef) ALIAS: aio_readlink = EIO_READLINK @@ -1366,7 +1466,7 @@ ALIAS: minor = 1 CODE: - RETVAL = ix ? major (dev) : minor (dev); + RETVAL = ix ? minor (dev) : major (dev); OUTPUT: RETVAL