(root)/
glibc-2.38/
posix/
spawn_faction_destroy.c
       1  /* Copyright (C) 2000-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <spawn.h>
      19  #include <stdlib.h>
      20  
      21  #include "spawn_int.h"
      22  
      23  /* Deallocate the file actions.  */
      24  int
      25  __posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
      26  {
      27    /* Free the paths in the open actions.  */
      28    for (int i = 0; i < file_actions->__used; ++i)
      29      {
      30        struct __spawn_action *sa = &file_actions->__actions[i];
      31        switch (sa->tag)
      32  	{
      33  	case spawn_do_open:
      34  	  free (sa->action.open_action.path);
      35  	  break;
      36  	case spawn_do_chdir:
      37  	  free (sa->action.chdir_action.path);
      38  	  break;
      39  	case spawn_do_close:
      40  	case spawn_do_dup2:
      41  	case spawn_do_fchdir:
      42  	case spawn_do_closefrom:
      43  	case spawn_do_tcsetpgrp:
      44  	  /* No cleanup required.  */
      45  	  break;
      46  	}
      47      }
      48  
      49    /* Free the array of actions.  */
      50    free (file_actions->__actions);
      51    return 0;
      52  }
      53  weak_alias (__posix_spawn_file_actions_destroy,
      54  	    posix_spawn_file_actions_destroy)