128943d61SSiva Chandra Reddy //===-- Implementation of posix_spawn_file_actions_addopen ----------------===// 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_addopen.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_addopen, 2228943d61SSiva Chandra Reddy (posix_spawn_file_actions_t *__restrict actions, int fd, 2328943d61SSiva Chandra Reddy const char *__restrict path, int oflag, mode_t mode)) { 2428943d61SSiva Chandra Reddy if (actions == nullptr) 2528943d61SSiva Chandra Reddy return EINVAL; 2628943d61SSiva Chandra Reddy if (fd < 0) 2728943d61SSiva Chandra Reddy return EBADF; 2828943d61SSiva Chandra Reddy 29f1129601SSiva Chandra Reddy AllocChecker ac; 30f1129601SSiva Chandra Reddy auto *act = new (ac) SpawnFileOpenAction(path, fd, oflag, mode); 3128943d61SSiva Chandra Reddy if (act == nullptr) 3228943d61SSiva Chandra Reddy return ENOMEM; 33f1129601SSiva Chandra Reddy BaseSpawnFileAction::add_action(actions, act); 3428943d61SSiva Chandra Reddy 3528943d61SSiva Chandra Reddy return 0; 3628943d61SSiva Chandra Reddy } 3728943d61SSiva Chandra Reddy 385ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 39