1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
/*
* Copyright (c) 2021 The strace developers.
* All rights reserved.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "tests.h"
#include <dirent.h>
#include <limits.h>
#include <stdlib.h>
#include <unistd.h>
#include "xmalloc.h"
int
get_dir_fd(const char *dir_path)
{
DIR *dir = opendir(dir_path);
if (dir == NULL)
perror_msg_and_fail("opendir: %s", dir_path);
int dfd = dirfd(dir);
if (dfd == -1)
perror_msg_and_fail("dirfd");
return dfd;
}
char *
get_fd_path(int fd)
{
char *proc = xasprintf("/proc/self/fd/%u", fd);
char *buf = xmalloc(PATH_MAX);
ssize_t n = readlink(proc, buf, PATH_MAX);
if (n < 0)
perror_msg_and_skip("readlink: %s", proc);
if (n >= PATH_MAX)
error_msg_and_fail("readlink: %s: %s", proc,
"symlink value is too long");
buf[n] = '\0';
free(proc);
return buf;
}
|