xref: /llvm-project/libc/src/sys/stat/linux/fchmodat.cpp (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
185dff764SSiva Chandra Reddy //===-- Linux implementation of fchmodat ----------------------------------===//
285dff764SSiva Chandra Reddy //
385dff764SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
485dff764SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
585dff764SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
685dff764SSiva Chandra Reddy //
785dff764SSiva Chandra Reddy //===----------------------------------------------------------------------===//
885dff764SSiva Chandra Reddy 
985dff764SSiva Chandra Reddy #include "src/sys/stat/fchmodat.h"
1085dff764SSiva Chandra Reddy 
1185dff764SSiva Chandra Reddy #include "src/__support/OSUtil/syscall.h" // For internal syscall function.
1285dff764SSiva Chandra Reddy #include "src/__support/common.h"
1385dff764SSiva Chandra Reddy 
14*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
15204587a3SSiva Chandra Reddy #include "src/errno/libc_errno.h"
1685dff764SSiva Chandra Reddy #include <sys/stat.h>
1785dff764SSiva Chandra Reddy #include <sys/syscall.h> // For syscall numbers.
1885dff764SSiva Chandra Reddy 
19*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
2085dff764SSiva Chandra Reddy 
2185dff764SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, fchmodat,
2285dff764SSiva Chandra Reddy                    (int dirfd, const char *path, mode_t mode, int flags)) {
23f0a3954eSMichael Jones   int ret =
24b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::syscall_impl<int>(SYS_fchmodat, dirfd, path, mode, flags);
2585dff764SSiva Chandra Reddy   if (ret < 0) {
26204587a3SSiva Chandra Reddy     libc_errno = -ret;
2785dff764SSiva Chandra Reddy     return -1;
2885dff764SSiva Chandra Reddy   }
2985dff764SSiva Chandra Reddy   return 0;
3085dff764SSiva Chandra Reddy }
3185dff764SSiva Chandra Reddy 
32*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
33