]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - posix/spawn_faction_destroy.c
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / posix / spawn_faction_destroy.c
index cc1d824bd1f6e76ee609a952111ff0191bc0dc8c..d30804a1e3d1b5c5819b195c3ddd63fe3de91dd7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
+   <https://www.gnu.org/licenses/>.  */
 
 #include <spawn.h>
 #include <stdlib.h>
 
-/* Initialize data structure for file attribute for `spawn' call.  */
+#include "spawn_int.h"
+
+/* Deallocate the file actions.  */
 int
-posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
+__posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
 {
-  /* Free the memory allocated.  */
+  /* Free the paths in the open actions.  */
+  for (int i = 0; i < file_actions->__used; ++i)
+    {
+      struct __spawn_action *sa = &file_actions->__actions[i];
+      switch (sa->tag)
+       {
+       case spawn_do_open:
+         free (sa->action.open_action.path);
+         break;
+       case spawn_do_chdir:
+         free (sa->action.chdir_action.path);
+         break;
+       case spawn_do_close:
+       case spawn_do_dup2:
+       case spawn_do_fchdir:
+         /* No cleanup required.  */
+         break;
+       }
+    }
+
+  /* Free the array of actions.  */
   free (file_actions->__actions);
   return 0;
 }
+weak_alias (__posix_spawn_file_actions_destroy,
+           posix_spawn_file_actions_destroy)