1b8385162SSiva Chandra Reddy //===-- Linux implementation of mkdirat -----------------------------------===// 2b8385162SSiva Chandra Reddy // 3b8385162SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4b8385162SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information. 5b8385162SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6b8385162SSiva Chandra Reddy // 7b8385162SSiva Chandra Reddy //===----------------------------------------------------------------------===// 8b8385162SSiva Chandra Reddy 9b8385162SSiva Chandra Reddy #include "src/sys/stat/mkdirat.h" 10b8385162SSiva Chandra Reddy 11b8385162SSiva Chandra Reddy #include "src/__support/OSUtil/syscall.h" // For internal syscall function. 12b8385162SSiva Chandra Reddy #include "src/__support/common.h" 13b8385162SSiva Chandra Reddy 14*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 15204587a3SSiva Chandra Reddy #include "src/errno/libc_errno.h" 16b8385162SSiva Chandra Reddy #include <sys/stat.h> 17b8385162SSiva Chandra Reddy #include <sys/syscall.h> // For syscall numbers. 18b8385162SSiva Chandra Reddy 19*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 20b8385162SSiva Chandra Reddy 21b8385162SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, mkdirat, (int dfd, const char *path, mode_t mode)) { 22545331abSSiva Chandra Reddy #ifdef SYS_mkdirat 23b6bc9d72SGuillaume Chatelet int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_mkdirat, dfd, path, mode); 24b8385162SSiva Chandra Reddy #else 255b22df99SMikhail R. Gadelha #error "mkdirat syscall not available." 26b8385162SSiva Chandra Reddy #endif 27b8385162SSiva Chandra Reddy 28b8385162SSiva Chandra Reddy if (ret < 0) { 29204587a3SSiva Chandra Reddy libc_errno = -ret; 30b8385162SSiva Chandra Reddy return -1; 31b8385162SSiva Chandra Reddy } 32b8385162SSiva Chandra Reddy return 0; 33b8385162SSiva Chandra Reddy } 34b8385162SSiva Chandra Reddy 35*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 36