Skip to content

Commit 5466675

Browse files
committed
Formatting
1 parent 5522dcc commit 5466675

File tree

3 files changed

+77
-61
lines changed

3 files changed

+77
-61
lines changed

libc/src/unistd/faccessat.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
//===-- Implementation header for faccessat ------------------------*- C++ -*-===//
1+
//===-- Implementation header for faccessat ------------------------*- C++
2+
//-*-===//
23
//
34
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +10,6 @@
910
#ifndef LLVM_LIBC_SRC_UNISTD_FACCESSAT_H
1011
#define LLVM_LIBC_SRC_UNISTD_FACCESSAT_H
1112

12-
1313
#include "src/__support/macros/config.h"
1414

1515
namespace LIBC_NAMESPACE_DECL {

libc/src/unistd/linux/faccessat.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
//===-- Linux implementation of faccessat ------------------------------------===//
1+
//===-- Linux implementation of faccessat
2+
//------------------------------------===//
23
//
34
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45
// See https://llvm.org/LICENSE.txt for license information.
@@ -18,9 +19,11 @@
1819

1920
namespace LIBC_NAMESPACE_DECL {
2021

21-
LLVM_LIBC_FUNCTION(int, faccessat, (int fd, const char *path, int amode, int flag)) {
22+
LLVM_LIBC_FUNCTION(int, faccessat,
23+
(int fd, const char *path, int amode, int flag)) {
2224
#ifdef SYS_faccessat2
23-
int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_faccessat2, fd, path, amode, flag);
25+
int ret =
26+
LIBC_NAMESPACE::syscall_impl<int>(SYS_faccessat2, fd, path, amode, flag);
2427
#else
2528
#error "faccessat2 syscall is not available."
2629
#endif

libc/test/src/unistd/faccessat_test.cpp

Lines changed: 69 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -6,99 +6,102 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "src/fcntl/open.h"
109
#include "src/__support/CPP/string.h"
10+
#include "src/fcntl/open.h"
1111
#include "src/sys/stat/mkdir.h"
12-
#include "src/unistd/faccessat.h"
1312
#include "src/unistd/close.h"
14-
#include "src/unistd/unlink.h"
15-
#include "src/unistd/unlinkat.h"
16-
#include "src/unistd/symlink.h"
13+
#include "src/unistd/faccessat.h"
1714
#include "src/unistd/rmdir.h"
1815
#include "src/unistd/symlink.h"
16+
#include "src/unistd/unlink.h"
17+
#include "src/unistd/unlinkat.h"
1918
#include "test/UnitTest/ErrnoCheckingTest.h"
2019
#include "test/UnitTest/ErrnoSetterMatcher.h"
2120
#include "test/UnitTest/Test.h"
2221

23-
#include <fcntl.h> // For AT_FDCWD, AT_EACCESS, AT_SYMLINK_NOFOLLOW
24-
#include <sys/stat.h> // For S_IRWXU, S_IXUSR, etc.
25-
#include <unistd.h> // For F_OK, R_OK, W_OK, X_OK
26-
22+
#include <fcntl.h>
23+
#include <sys/stat.h>
24+
#include <unistd.h>
2725

2826
namespace {
2927

30-
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
28+
namespace cpp = LIBC_NAMESPACE::cpp;
3129
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
30+
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
3231

32+
using LlvmLibcFaccessatTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
3333

34-
class LlvmLibcFaccessatTest : public LIBC_NAMESPACE::testing::ErrnoCheckingTest {
35-
public:
36-
void create_test_dir(const char* dirname, int& dir_fd) {
37-
auto TEST_DIR = libc_make_test_file_path(dirname);
38-
ASSERT_THAT(LIBC_NAMESPACE::mkdir(TEST_DIR, S_IRWXU), Succeeds(0));
39-
40-
dir_fd = LIBC_NAMESPACE::open(TEST_DIR, O_RDONLY | O_DIRECTORY);
41-
ASSERT_ERRNO_SUCCESS();
42-
ASSERT_GT(dir_fd, 0);
43-
}
44-
45-
void cleanup_test_dir(const char* dirname, int dir_fd) {
46-
auto TEST_DIR = libc_make_test_file_path(dirname);
47-
ASSERT_THAT(LIBC_NAMESPACE::close(dir_fd), Succeeds(0));
48-
ASSERT_THAT(LIBC_NAMESPACE::rmdir(TEST_DIR), Succeeds(0));
49-
}
50-
};
51-
52-
53-
TEST_F(LlvmLibcFaccessatTest, CreateAndTest_AT_FDCWD) {
54-
// Test access checks on a file with AT_FDCWD, equivalent to access().
34+
TEST_F(LlvmLibcFaccessatTest, WithAtFdcwd) {
35+
// Test access checks on a file with AT_FDCWD and no flags, equivalent to
36+
// access().
5537
constexpr const char *FILENAME = "faccessat_basic3.test";
5638
auto TEST_FILE = libc_make_test_file_path(FILENAME);
5739

58-
// Create file with full permissions
40+
// Check permissions on a file with full permissions
5941
int fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IRWXU);
6042
ASSERT_ERRNO_SUCCESS();
6143
ASSERT_GT(fd, 0);
6244
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
6345

64-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, F_OK, 0), Succeeds(0));
65-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, X_OK | W_OK | R_OK, 0),
46+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, F_OK, 0),
6647
Succeeds(0));
48+
ASSERT_THAT(
49+
LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, X_OK | W_OK | R_OK, 0),
50+
Succeeds(0));
6751
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
6852

69-
// Create file with execute-only permission
53+
// Check permissions on a file with execute-only permission
7054
fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IXUSR);
7155
ASSERT_ERRNO_SUCCESS();
7256
ASSERT_GT(fd, 0);
7357
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
7458

75-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, F_OK, 0), Succeeds(0));
76-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, X_OK, 0), Succeeds(0));
77-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, R_OK, 0), Fails(EACCES));
78-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, W_OK, 0), Fails(EACCES));
59+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, F_OK, 0),
60+
Succeeds(0));
61+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, X_OK, 0),
62+
Succeeds(0));
63+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, R_OK, 0),
64+
Fails(EACCES));
65+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, W_OK, 0),
66+
Fails(EACCES));
7967
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
68+
69+
// Check permissions on a non existent file
70+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, F_OK, 0),
71+
Fails(ENOENT));
8072
}
8173

8274
TEST_F(LlvmLibcFaccessatTest, RelativePathWithDirFD) {
83-
LIBC_NAMESPACE::cpp::string DIRNAME ="faccessat_dir3";
84-
LIBC_NAMESPACE::cpp::string FILENAME = "relative_file3.txt";
75+
// Check permissions on a file releative to dir_fd
76+
const cpp::string DIRNAME = "faccessat_dir3";
77+
const cpp::string FILENAME = "relative_file3.txt";
78+
79+
auto TEST_DIR = libc_make_test_file_path(DIRNAME.data());
80+
ASSERT_THAT(LIBC_NAMESPACE::mkdir(TEST_DIR, S_IRWXU), Succeeds(0));
8581

86-
int dir_fd;
87-
create_test_dir(DIRNAME.data(), dir_fd);
82+
int dir_fd = LIBC_NAMESPACE::open(TEST_DIR, O_RDONLY | O_DIRECTORY);
83+
ASSERT_ERRNO_SUCCESS();
84+
ASSERT_GT(dir_fd, 0);
8885

89-
auto FULL_FILE_PATH = libc_make_test_file_path((DIRNAME + "/" + FILENAME).data());
86+
auto FULL_FILE_PATH =
87+
libc_make_test_file_path((DIRNAME + "/" + FILENAME).data());
9088
int fd = LIBC_NAMESPACE::open(FULL_FILE_PATH, O_WRONLY | O_CREAT, S_IRWXU);
9189
ASSERT_ERRNO_SUCCESS();
9290
ASSERT_GT(fd, 0);
9391
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
9492

95-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(dir_fd, FILENAME.data(), R_OK | W_OK, 0), Succeeds(0));
93+
ASSERT_THAT(
94+
LIBC_NAMESPACE::faccessat(dir_fd, FILENAME.data(), R_OK | W_OK, 0),
95+
Succeeds(0));
9696

97-
ASSERT_THAT(LIBC_NAMESPACE::unlinkat(dir_fd, FILENAME.data(), 0), Succeeds(0));
98-
cleanup_test_dir(DIRNAME.data(), dir_fd);
97+
ASSERT_THAT(LIBC_NAMESPACE::unlinkat(dir_fd, FILENAME.data(), 0),
98+
Succeeds(0));
99+
ASSERT_THAT(LIBC_NAMESPACE::close(dir_fd), Succeeds(0));
100+
ASSERT_THAT(LIBC_NAMESPACE::rmdir(TEST_DIR), Succeeds(0));
99101
}
100102

101103
TEST_F(LlvmLibcFaccessatTest, SymlinkNoFollow) {
104+
// Check permissions on a symlink itself, not what it links to
102105
constexpr const char *TARGET = "faccessat_target2";
103106
constexpr const char *SYMLINK = "faccessat_link2";
104107
auto TEST_TARGET = libc_make_test_file_path(TARGET);
@@ -111,17 +114,20 @@ TEST_F(LlvmLibcFaccessatTest, SymlinkNoFollow) {
111114

112115
ASSERT_THAT(LIBC_NAMESPACE::symlink(TARGET, TEST_SYMLINK), Succeeds(0));
113116

114-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_SYMLINK, R_OK, 0), Fails(EACCES));
115-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_SYMLINK, F_OK, AT_SYMLINK_NOFOLLOW), Succeeds(0));
117+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_SYMLINK, R_OK, 0),
118+
Fails(EACCES));
119+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_SYMLINK, F_OK,
120+
AT_SYMLINK_NOFOLLOW),
121+
Succeeds(0));
116122

117123
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_SYMLINK), Succeeds(0));
118124
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_TARGET), Succeeds(0));
119125
}
120126

121127
TEST_F(LlvmLibcFaccessatTest, AtEaccess) {
122128
// With AT_EACCESS, faccessat checks permissions using the effective user ID,
123-
// but the effective and real user ID will be the same here and changing that is not feasible in a test,
124-
// so this is just a basic sanity check.
129+
// but the effective and real user ID will be the same here and changing that
130+
// is not feasible in a test, so this is just a basic sanity check.
125131
constexpr const char *FILENAME = "faccessat_eaccess.test";
126132
auto TEST_FILE = libc_make_test_file_path(FILENAME);
127133

@@ -130,7 +136,8 @@ TEST_F(LlvmLibcFaccessatTest, AtEaccess) {
130136
ASSERT_GT(fd, 0);
131137
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
132138

133-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, X_OK | W_OK | R_OK, AT_EACCESS),
139+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, TEST_FILE, X_OK | W_OK | R_OK,
140+
AT_EACCESS),
134141
Succeeds(0));
135142

136143
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
@@ -144,15 +151,21 @@ TEST_F(LlvmLibcFaccessatTest, AtEmptyPath) {
144151
ASSERT_ERRNO_SUCCESS();
145152
ASSERT_GT(fd, 0);
146153

147-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(fd, "", F_OK, AT_EMPTY_PATH), Succeeds(0));
148-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(fd, "", X_OK | W_OK | R_OK, AT_EMPTY_PATH),
154+
// Check permissions on the file referred to by fd
155+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(fd, "", F_OK, AT_EMPTY_PATH),
149156
Succeeds(0));
157+
ASSERT_THAT(
158+
LIBC_NAMESPACE::faccessat(fd, "", X_OK | W_OK | R_OK, AT_EMPTY_PATH),
159+
Succeeds(0));
150160

151161
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
152162
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
153163

154-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, "", F_OK, AT_EMPTY_PATH), Succeeds(0));
155-
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, "", X_OK | W_OK | R_OK, AT_EMPTY_PATH),
164+
// Check permissions on the current working directory
165+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, "", F_OK, AT_EMPTY_PATH),
166+
Succeeds(0));
167+
ASSERT_THAT(LIBC_NAMESPACE::faccessat(AT_FDCWD, "", X_OK | W_OK | R_OK,
168+
AT_EMPTY_PATH),
156169
Succeeds(0));
157170
}
158171

0 commit comments

Comments
 (0)