128943d61SSiva Chandra Reddy //===-- Implementation of posix_spawn_file_actions_adddup2 ----------------===// 228943d61SSiva Chandra Reddy // 328943d61SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 428943d61SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information. 528943d61SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 628943d61SSiva Chandra Reddy // 728943d61SSiva Chandra Reddy //===----------------------------------------------------------------------===// 828943d61SSiva Chandra Reddy 928943d61SSiva Chandra Reddy #include "posix_spawn_file_actions_adddup2.h" 1028943d61SSiva Chandra Reddy 1128943d61SSiva Chandra Reddy #include "file_actions.h" 12f1129601SSiva Chandra Reddy #include "src/__support/CPP/new.h" 1328943d61SSiva Chandra Reddy #include "src/__support/common.h" 145ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 15*46944b0cSJob Henandez Lara #include "src/errno/libc_errno.h" 1628943d61SSiva Chandra Reddy 1728943d61SSiva Chandra Reddy #include <spawn.h> 1828943d61SSiva Chandra Reddy 195ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 2028943d61SSiva Chandra Reddy 2128943d61SSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, posix_spawn_file_actions_adddup2, 2228943d61SSiva Chandra Reddy (posix_spawn_file_actions_t * actions, int fd, int newfd)) { 2328943d61SSiva Chandra Reddy if (actions == nullptr) 2428943d61SSiva Chandra Reddy return EINVAL; 2528943d61SSiva Chandra Reddy if (fd < 0 || newfd < 0) 2628943d61SSiva Chandra Reddy return EBADF; 2728943d61SSiva Chandra Reddy 28f1129601SSiva Chandra Reddy AllocChecker ac; 29f1129601SSiva Chandra Reddy auto *act = new (ac) SpawnFileDup2Action(fd, newfd); 30f1129601SSiva Chandra Reddy if (!ac) 3128943d61SSiva Chandra Reddy return ENOMEM; 32f1129601SSiva Chandra Reddy BaseSpawnFileAction::add_action(actions, act); 3328943d61SSiva Chandra Reddy 3428943d61SSiva Chandra Reddy return 0; 3528943d61SSiva Chandra Reddy } 3628943d61SSiva Chandra Reddy 375ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 38