aboutsummaryrefslogtreecommitdiff
blob: 9ec77303bf4a1f390ecd1172ecd239863a3ef0eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
 * Copyright 2023 Gentoo Authors
 * Distributed under the terms of the GNU General Public License v2
 */

#include "headers.h"
#include "sbutil.h"

/* Wrapper for faccessat to work around buggy behavior on musl */
int sb_exists(int dirfd, const char *pathname, int flags)
{
	struct stat64 buf;

	if (faccessat(dirfd, pathname, F_OK, flags) == 0)
		return 0;

	/* musl's faccessat gives EINVAL when the kernel does not support
	 * faccessat2 and AT_SYMLINK_NOFOLLOW is set.
	 * https://www.openwall.com/lists/musl/2023/06/19/1 */
	if (errno != EINVAL)
		return -1;

	return fstatat64(dirfd, pathname, &buf, flags);
}