aboutsummaryrefslogtreecommitdiff
blob: c2171fe0d82343f277369790f4548239fa001741 (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 (sbio_faccessat(dirfd, pathname, F_OK, flags|AT_EACCESS) == 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);
}