--- IO-AIO/AIO.xs 2016/02/23 19:42:59 1.240 +++ IO-AIO/AIO.xs 2017/06/23 21:43:51 1.246 @@ -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 @@ -925,6 +926,7 @@ 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) @@ -996,6 +998,69 @@ const_iv (MAP_HUGETLB) const_iv (MAP_STACK) + const_iv (F_DUPFD_CLOEXEC) + + const_iv (F_OFD_GETLK) + const_iv (F_OFD_SETLK) + const_iv (F_OFD_GETLKW) + + 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) const_iv (FIEMAP_FLAGS_COMPAT) @@ -1039,6 +1104,10 @@ const_eio (FALLOC_FL_COLLAPSE_RANGE) const_eio (FALLOC_FL_ZERO_RANGE) + const_eio (RENAME_NOREPLACE) + const_eio (RENAME_EXCHANGE) + const_eio (RENAME_WHITEOUT) + const_eio (READDIR_DENTS) const_eio (READDIR_DIRS_FIRST) const_eio (READDIR_STAT_ORDER) @@ -1407,7 +1476,7 @@ ALIAS: minor = 1 CODE: - RETVAL = ix ? major (dev) : minor (dev); + RETVAL = ix ? minor (dev) : major (dev); OUTPUT: RETVAL @@ -1534,6 +1603,22 @@ } void +aio_rename2 (SV8 *oldpath, SV8 *newpath, int flags = 0, SV *callback = &PL_sv_undef) + PPCODE: +{ + eio_wd wd2 = 0; + dREQ; + + req->type = EIO_RENAME; + req_set_path1 (req, oldpath); + req_set_path (req, newpath, &req->sv2, &req->sv4, &wd2, &req->ptr2); + req->int2 = flags; + req->int3 = (long)wd2; + + REQ_SEND; +} + +void aio_mknod (SV8 *pathname, int mode, UV dev, SV *callback = &PL_sv_undef) PPCODE: { @@ -1548,7 +1633,7 @@ } void -aio_mtouch (SV8 *data, IV offset = 0, SV *length = &PL_sv_undef, int flags = 0, SV *callback = &PL_sv_undef) +aio_mtouch (SV8 *data, IV offset = 0, SV *length = &PL_sv_undef, int flags = -1, SV *callback = &PL_sv_undef) ALIAS: aio_mtouch = EIO_MTOUCH aio_msync = EIO_MSYNC @@ -1558,6 +1643,9 @@ char *svptr = SvPVbyte (data, svlen); UV len = SvUV (length); + if (flags < 0) + flags = ix == EIO_MSYNC ? EIO_MS_SYNC : 0; + if (offset < 0) offset += svlen;