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 14b8385162SSiva Chandra Reddy #include <errno.h> 15b8385162SSiva Chandra Reddy #include <sys/stat.h> 16b8385162SSiva Chandra Reddy #include <sys/syscall.h> // For syscall numbers. 17b8385162SSiva Chandra Reddy 18b8385162SSiva Chandra Reddy namespace __llvm_libc { 19b8385162SSiva Chandra Reddy 20b8385162SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, mkdirat, (int dfd, const char *path, mode_t mode)) { 21*545331abSSiva Chandra Reddy #ifdef SYS_mkdirat 22b8385162SSiva Chandra Reddy long ret = __llvm_libc::syscall(SYS_mkdirat, dfd, path, mode); 23b8385162SSiva Chandra Reddy #else 24b8385162SSiva Chandra Reddy #error "mkdirat syscalls not available." 25b8385162SSiva Chandra Reddy #endif 26b8385162SSiva Chandra Reddy 27b8385162SSiva Chandra Reddy if (ret < 0) { 28b8385162SSiva Chandra Reddy errno = -ret; 29b8385162SSiva Chandra Reddy return -1; 30b8385162SSiva Chandra Reddy } 31b8385162SSiva Chandra Reddy return 0; 32b8385162SSiva Chandra Reddy } 33b8385162SSiva Chandra Reddy 34b8385162SSiva Chandra Reddy } // namespace __llvm_libc 35