diff options
Diffstat (limited to 'posix/spawn_faction_destroy.c')
-rw-r--r-- | posix/spawn_faction_destroy.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/posix/spawn_faction_destroy.c b/posix/spawn_faction_destroy.c index 4d165aab01..1b87010717 100644 --- a/posix/spawn_faction_destroy.c +++ b/posix/spawn_faction_destroy.c @@ -18,11 +18,29 @@ #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) { - /* 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_close: + case spawn_do_dup2: + /* No cleanup required. */ + break; + } + } + + /* Free the array of actions. */ free (file_actions->__actions); return 0; } |