mc: multple fixes (#2367)
[termux-packages] / packages / tar / mkfifoat.patch
1 mkfifoat() is available in Android only after API 23. We can't use tar's
2 implementation of mkfifioat() since it will use tar's implementation of
3 mknodat(). This will cause infinite recursion in file gnu/at-func.c and
4 segfault.
5
6 Snippet of backtrace:
7 ....
8 #9 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
9 #10 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
10 #11 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
11 #12 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
12 #13 0x000000555556a9d4 in extract_node (file_name=0x7fb7c90050 "sda", typeflag=52) at /home/builder/.termux-build/tar/src/src/extract.c:1447
13 #14 0x0000005555568f38 in extract_archive () at /home/builder/.termux-build/tar/src/src/extract.c:1709
14 ....
15
16 diff -uNr tar-1.30/src/extract.c tar-1.30.mod/src/extract.c
17 --- tar-1.30/src/extract.c 2017-12-16 23:23:12.000000000 +0200
18 +++ tar-1.30.mod/src/extract.c 2017-12-25 14:31:31.541886176 +0200
19 @@ -42,6 +42,11 @@
20 # define fchown(fd, uid, gid) (errno = ENOSYS, -1)
21 #endif
22
23 +static int
24 +mkfifoat(int fd, const char* path, mode_t mode) {
25 + return mknodat(fd, path, (mode & ~S_IFMT) | S_IFIFO, 0);
26 +}
27 +
28 /* Return true if an error number ERR means the system call is
29 supported in this case. */
30 static bool