xref: /llvm-project/libc/src/sys/stat/linux/fchmod.cpp (revision abc49cc19463970d5523d7d3332e4c1f83bc2ef7)
105532289SSiva Chandra Reddy //===-- Linux implementation of fchmod ------------------------------------===//
205532289SSiva Chandra Reddy //
305532289SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
405532289SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
505532289SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
605532289SSiva Chandra Reddy //
705532289SSiva Chandra Reddy //===----------------------------------------------------------------------===//
805532289SSiva Chandra Reddy 
905532289SSiva Chandra Reddy #include "src/sys/stat/fchmod.h"
1005532289SSiva Chandra Reddy 
1105532289SSiva Chandra Reddy #include "src/__support/OSUtil/syscall.h" // For internal syscall function.
1205532289SSiva Chandra Reddy #include "src/__support/common.h"
1305532289SSiva Chandra Reddy 
14*abc49cc1SJob Henandez Lara #include "hdr/types/mode_t.h"
155ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
16204587a3SSiva Chandra Reddy #include "src/errno/libc_errno.h"
1705532289SSiva Chandra Reddy #include <sys/stat.h>
1805532289SSiva Chandra Reddy #include <sys/syscall.h> // For syscall numbers.
1905532289SSiva Chandra Reddy 
205ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
2105532289SSiva Chandra Reddy 
2205532289SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, fchmod, (int fd, mode_t mode)) {
23b6bc9d72SGuillaume Chatelet   int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_fchmod, fd, mode);
2405532289SSiva Chandra Reddy   if (ret < 0) {
25204587a3SSiva Chandra Reddy     libc_errno = -ret;
2605532289SSiva Chandra Reddy     return -1;
2705532289SSiva Chandra Reddy   }
2805532289SSiva Chandra Reddy   return 0;
2905532289SSiva Chandra Reddy }
3005532289SSiva Chandra Reddy 
315ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
32