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