brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · affd338 Raw
55 lines · cpp
1//===-- Implementation of posix_spawn_file_actions_destroy ----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "posix_spawn_file_actions_destroy.h"10 11#include "file_actions.h"12 13#include "src/__support/CPP/new.h"14#include "src/__support/common.h"15#include "src/__support/libc_errno.h"16#include "src/__support/macros/config.h"17 18#include <spawn.h>19 20namespace LIBC_NAMESPACE_DECL {21 22LLVM_LIBC_FUNCTION(int, posix_spawn_file_actions_destroy,23                   (posix_spawn_file_actions_t * actions)) {24  if (actions == nullptr)25    return EINVAL;26  if (actions->__front == nullptr)27    return 0;28 29  auto *act = reinterpret_cast<BaseSpawnFileAction *>(actions->__front);30  actions->__front = nullptr;31  actions->__back = nullptr;32  if (act == nullptr)33    return 0;34 35  while (act != nullptr) {36    auto *temp = act;37    act = act->next;38    switch (temp->type) {39    case BaseSpawnFileAction::OPEN:40      delete reinterpret_cast<SpawnFileOpenAction *>(temp);41      break;42    case BaseSpawnFileAction::CLOSE:43      delete reinterpret_cast<SpawnFileCloseAction *>(temp);44      break;45    case BaseSpawnFileAction::DUP2:46      delete reinterpret_cast<SpawnFileDup2Action *>(temp);47      break;48    }49  }50 51  return 0;52}53 54} // namespace LIBC_NAMESPACE_DECL55