--- a/lib/archive.c 2024-09-24 16:39:21.000000000 -0400 +++ b/lib/archive.c 2024-11-23 21:12:31.213747869 -0500 @@ -493,6 +493,18 @@ return ret; } +/* 20241123 bkw: work around lack of fcntl() F_GETPATH on Linux */ +static int fd2path(int fd, char *buf) { + char procpath[PATH_MAX]; + + sprintf(procpath, "/proc/self/fd/%d", fd); + + if(realpath(procpath, buf)) + return 0; + + return -1; +} + xar_t xar_fdopen_digest_verify(int fd, int32_t flags, void *expected_toc_digest, size_t expected_toc_digest_len) { // Dup the descriptor vended to us so that we don't take ownership @@ -507,7 +519,7 @@ // If there are hardlinks, the path we pick is the most recently opened by // the filesystem; which is effectively random. char path_buff[PATH_MAX]; - if (fcntl(fd, F_GETPATH, path_buff) < 0) { + if (fd2path(fd, path_buff) < 0) { close(fd); return NULL; }