105532289SSiva Chandra Reddy //===-- Linux implementation of chdir -------------------------------------===// 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/unistd/chdir.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*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 15803437dbSMichael Jones #include "src/errno/libc_errno.h" 1605532289SSiva Chandra Reddy #include <sys/syscall.h> // For syscall numbers. 1705532289SSiva Chandra Reddy 18*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 1905532289SSiva Chandra Reddy 2005532289SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, chdir, (const char *path)) { 21b6bc9d72SGuillaume Chatelet int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_chdir, path); 2205532289SSiva Chandra Reddy if (ret < 0) { 23204587a3SSiva Chandra Reddy libc_errno = -ret; 2405532289SSiva Chandra Reddy return -1; 2505532289SSiva Chandra Reddy } 2605532289SSiva Chandra Reddy return 0; 2705532289SSiva Chandra Reddy } 2805532289SSiva Chandra Reddy 29*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 30