mc: multple fixes (#2367)
[termux-packages] / packages / tar / mkfifoat.patch
CommitLineData
0fa355a8
LP
1mkfifoat() is available in Android only after API 23. We can't use tar's
2implementation of mkfifioat() since it will use tar's implementation of
3mknodat(). This will cause infinite recursion in file gnu/at-func.c and
4segfault.
5
6Snippet 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
16diff -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