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 14*7b663bd9SJob Henandez Lara #include "hdr/fcntl_macros.h" 15abc49cc1SJob Henandez Lara #include "hdr/types/mode_t.h" 165ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 17204587a3SSiva Chandra Reddy #include "src/errno/libc_errno.h" 18b8385162SSiva Chandra Reddy #include <sys/stat.h> 19b8385162SSiva Chandra Reddy #include <sys/syscall.h> // For syscall numbers. 20b8385162SSiva Chandra Reddy 215ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 22b8385162SSiva Chandra Reddy 23b8385162SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, mkdir, (const char *path, mode_t mode)) { 24b8385162SSiva Chandra Reddy #ifdef SYS_mkdir 25b6bc9d72SGuillaume Chatelet int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_mkdir, path, mode); 26545331abSSiva Chandra Reddy #elif defined(SYS_mkdirat) 27b6bc9d72SGuillaume Chatelet int ret = 28b6bc9d72SGuillaume Chatelet LIBC_NAMESPACE::syscall_impl<int>(SYS_mkdirat, AT_FDCWD, path, mode); 29b8385162SSiva Chandra Reddy #else 30b8385162SSiva Chandra Reddy #error "mkdir and mkdirat syscalls not available." 31b8385162SSiva Chandra Reddy #endif 32b8385162SSiva Chandra Reddy 33b8385162SSiva Chandra Reddy if (ret < 0) { 34204587a3SSiva Chandra Reddy libc_errno = -ret; 35b8385162SSiva Chandra Reddy return -1; 36b8385162SSiva Chandra Reddy } 37b8385162SSiva Chandra Reddy return 0; 38b8385162SSiva Chandra Reddy } 39b8385162SSiva Chandra Reddy 405ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 41