… | |
… | |
18 | #include <sys/socket.h> |
18 | #include <sys/socket.h> |
19 | #include <sys/stat.h> |
19 | #include <sys/stat.h> |
20 | #include <limits.h> |
20 | #include <limits.h> |
21 | #include <fcntl.h> |
21 | #include <fcntl.h> |
22 | #include <sched.h> |
22 | #include <sched.h> |
23 | |
|
|
24 | /* the incompetent fool that created musl keeps __linux__, refuses |
|
|
25 | * to implement any linux standard apis, and also has no way to test |
|
|
26 | * for his broken iplementation. don't complain to me if this fails |
|
|
27 | * for you. |
|
|
28 | */ |
|
|
29 | #if __linux__ && (defined __GLIBC__ || defined __UCLIBC__) |
|
|
30 | # include <linux/fs.h> |
|
|
31 | # ifdef FS_IOC_FIEMAP |
|
|
32 | # include <linux/types.h> |
|
|
33 | # include <linux/fiemap.h> |
|
|
34 | # define HAVE_FIEMAP 1 |
|
|
35 | # endif |
|
|
36 | #endif |
|
|
37 | |
23 | |
38 | /* perl namespace pollution */ |
24 | /* perl namespace pollution */ |
39 | #undef VERSION |
25 | #undef VERSION |
40 | |
26 | |
41 | /* perl stupidly overrides readdir and maybe others */ |
27 | /* perl stupidly overrides readdir and maybe others */ |
… | |
… | |
122 | |
108 | |
123 | #if HAVE_SYS_UIO_H |
109 | #if HAVE_SYS_UIO_H |
124 | # include <sys/uio.h> |
110 | # include <sys/uio.h> |
125 | #endif |
111 | #endif |
126 | |
112 | |
|
|
113 | /* MUST be included before linux/fs.h, as the latter includes |
|
|
114 | * linux/mount.h, which is incompatible to sys/mount.h |
|
|
115 | */ |
|
|
116 | #if HAVE_SYS_MOUNT_H |
|
|
117 | # include <sys/mount.h> |
|
|
118 | #endif |
|
|
119 | |
|
|
120 | /* the incompetent fool that created musl keeps __linux__, refuses |
|
|
121 | * to implement any linux standard apis, and also has no way to test |
|
|
122 | * for his broken implementation. don't complain to me if this fails |
|
|
123 | * for you. |
|
|
124 | */ |
|
|
125 | #if __linux__ && (defined __GLIBC__ || defined __UCLIBC__) |
|
|
126 | # include <linux/fs.h> /* MUST be included after sys/mount.h */ |
|
|
127 | # ifdef FS_IOC_FIEMAP |
|
|
128 | # include <linux/types.h> |
|
|
129 | # include <linux/fiemap.h> |
|
|
130 | # undef HAVE_FIEMAP |
|
|
131 | # define HAVE_FIEMAP 1 |
|
|
132 | # endif |
|
|
133 | #endif |
|
|
134 | |
127 | #if HAVE_ST_XTIMENSEC |
135 | #if HAVE_ST_XTIMENSEC |
128 | # define ATIMENSEC PL_statcache.st_atimensec |
136 | # define ATIMENSEC PL_statcache.st_atimensec |
129 | # define MTIMENSEC PL_statcache.st_mtimensec |
137 | # define MTIMENSEC PL_statcache.st_mtimensec |
130 | # define CTIMENSEC PL_statcache.st_ctimensec |
138 | # define CTIMENSEC PL_statcache.st_ctimensec |
131 | #elif HAVE_ST_XTIMESPEC |
139 | #elif HAVE_ST_XTIMESPEC |
… | |
… | |
169 | #include <sys/time.h> |
177 | #include <sys/time.h> |
170 | #include <sys/resource.h> |
178 | #include <sys/resource.h> |
171 | #endif |
179 | #endif |
172 | |
180 | |
173 | typedef SV SV8; /* byte-sv, used for argument-checking */ |
181 | typedef SV SV8; /* byte-sv, used for argument-checking */ |
|
|
182 | typedef char *octet_string; |
|
|
183 | typedef char *octet_string_ornull; |
174 | typedef int aio_rfd; /* read file desriptor */ |
184 | typedef int aio_rfd; /* read file desriptor */ |
175 | typedef int aio_wfd; /* write file descriptor */ |
185 | typedef int aio_wfd; /* write file descriptor */ |
176 | |
186 | |
177 | static HV *aio_stash, *aio_req_stash, *aio_grp_stash, *aio_wd_stash; |
187 | static HV *aio_stash, *aio_req_stash, *aio_grp_stash, *aio_wd_stash; |
178 | |
188 | |
… | |
… | |
1429 | const_iv (MOUNT_ATTR_RELATIME) |
1439 | const_iv (MOUNT_ATTR_RELATIME) |
1430 | const_iv (MOUNT_ATTR_NOATIME) |
1440 | const_iv (MOUNT_ATTR_NOATIME) |
1431 | const_iv (MOUNT_ATTR_STRICTATIME) |
1441 | const_iv (MOUNT_ATTR_STRICTATIME) |
1432 | const_iv (MOUNT_ATTR_NODIRATIME) |
1442 | const_iv (MOUNT_ATTR_NODIRATIME) |
1433 | |
1443 | |
|
|
1444 | /* sys/mount.h */ |
|
|
1445 | const_iv (MS_RDONLY) |
|
|
1446 | const_iv (MS_NOSUID) |
|
|
1447 | const_iv (MS_NODEV) |
|
|
1448 | const_iv (MS_NOEXEC) |
|
|
1449 | const_iv (MS_SYNCHRONOUS) |
|
|
1450 | const_iv (MS_REMOUNT) |
|
|
1451 | const_iv (MS_MANDLOCK) |
|
|
1452 | const_iv (MS_DIRSYNC) |
|
|
1453 | const_iv (MS_NOATIME) |
|
|
1454 | const_iv (MS_NODIRATIME) |
|
|
1455 | const_iv (MS_BIND) |
|
|
1456 | const_iv (MS_MOVE) |
|
|
1457 | const_iv (MS_REC) |
|
|
1458 | const_iv (MS_SILENT) |
|
|
1459 | const_iv (MS_POSIXACL) |
|
|
1460 | const_iv (MS_UNBINDABLE) |
|
|
1461 | const_iv (MS_PRIVATE) |
|
|
1462 | const_iv (MS_SLAVE) |
|
|
1463 | const_iv (MS_SHARED) |
|
|
1464 | const_iv (MS_RELATIME) |
|
|
1465 | const_iv (MS_KERNMOUNT) |
|
|
1466 | const_iv (MS_I_VERSION) |
|
|
1467 | const_iv (MS_STRICTATIME) |
|
|
1468 | const_iv (MS_LAZYTIME) |
|
|
1469 | const_iv (MS_ACTIVE) |
|
|
1470 | const_iv (MS_NOUSER) |
|
|
1471 | const_iv (MS_RMT_MASK) |
|
|
1472 | const_iv (MS_MGC_VAL) |
|
|
1473 | const_iv (MS_MGC_MSK) |
|
|
1474 | |
|
|
1475 | const_iv (MNT_FORCE) |
|
|
1476 | const_iv (MNT_DETACH) |
|
|
1477 | const_iv (MNT_EXPIRE) |
|
|
1478 | const_iv (UMOUNT_NOFOLLOW) |
|
|
1479 | |
|
|
1480 | const_iv (BLKROSET) |
|
|
1481 | const_iv (BLKROGET) |
|
|
1482 | const_iv (BLKRRPART) |
|
|
1483 | const_iv (BLKGETSIZE) |
|
|
1484 | const_iv (BLKFLSBUF) |
|
|
1485 | const_iv (BLKRASET) |
|
|
1486 | const_iv (BLKRAGET) |
|
|
1487 | const_iv (BLKFRASET) |
|
|
1488 | const_iv (BLKFRAGET) |
|
|
1489 | const_iv (BLKSECTSET) |
|
|
1490 | const_iv (BLKSECTGET) |
|
|
1491 | const_iv (BLKSSZGET) |
|
|
1492 | const_iv (BLKBSZGET) |
|
|
1493 | const_iv (BLKBSZSET) |
|
|
1494 | const_iv (BLKGETSIZE64) |
|
|
1495 | |
1434 | /* these are libeio constants, and are independent of gendef0 */ |
1496 | /* these are libeio constants, and are independent of gendef0 */ |
1435 | const_eio (SEEK_SET) |
1497 | const_eio (SEEK_SET) |
1436 | const_eio (SEEK_CUR) |
1498 | const_eio (SEEK_CUR) |
1437 | const_eio (SEEK_END) |
1499 | const_eio (SEEK_END) |
1438 | |
1500 | |
… | |
… | |
2824 | errno = ENOSYS; |
2886 | errno = ENOSYS; |
2825 | #endif |
2887 | #endif |
2826 | } |
2888 | } |
2827 | |
2889 | |
2828 | void |
2890 | void |
2829 | memfd_create (SV8 *pathname, int flags = 0) |
2891 | memfd_create (octet_string pathname, int flags = 0) |
2830 | PPCODE: |
2892 | PPCODE: |
2831 | { |
2893 | { |
2832 | int fd; |
2894 | int fd; |
2833 | #if HAVE_MEMFD_CREATE |
2895 | #if HAVE_MEMFD_CREATE |
2834 | fd = memfd_create (SvPVbyte_nolen (pathname), flags); |
2896 | fd = memfd_create (pathname, flags); |
2835 | #else |
2897 | #else |
2836 | fd = (errno = ENOSYS, -1); |
2898 | fd = (errno = ENOSYS, -1); |
2837 | #endif |
2899 | #endif |
2838 | |
2900 | |
2839 | XPUSHs (newmortalFH (fd, O_RDWR)); |
2901 | XPUSHs (newmortalFH (fd, O_RDWR)); |
… | |
… | |
2859 | RETVAL = (errno = ENOSYS, -1); |
2921 | RETVAL = (errno = ENOSYS, -1); |
2860 | #endif |
2922 | #endif |
2861 | } |
2923 | } |
2862 | OUTPUT: RETVAL |
2924 | OUTPUT: RETVAL |
2863 | |
2925 | |
|
|
2926 | int |
|
|
2927 | mount (octet_string special, octet_string path, octet_string fstype, UV flags = 0, octet_string_ornull data = 0) |
|
|
2928 | OUTPUT: RETVAL |
|
|
2929 | |
|
|
2930 | int |
|
|
2931 | umount (octet_string path, int flags = 0) |
|
|
2932 | CODE: |
|
|
2933 | if (flags) |
|
|
2934 | #if HAVE_UMOUNT2 |
|
|
2935 | RETVAL = umount2 (path, flags); |
|
|
2936 | #else |
|
|
2937 | RETVAL = (errno = ENOSYS, -1); |
|
|
2938 | #endif |
|
|
2939 | else |
|
|
2940 | RETVAL = umount (path); |
|
|
2941 | OUTPUT: RETVAL |
|
|
2942 | |
2864 | UV |
2943 | UV |
2865 | get_fdlimit () |
2944 | get_fdlimit () |
2866 | CODE: |
2945 | CODE: |
2867 | #if HAVE_RLIMITS |
2946 | #if HAVE_RLIMITS |
2868 | struct rlimit rl; |
2947 | struct rlimit rl; |