diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2022-01-27 10:11:30 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2022-02-02 08:34:16 -0300 |
commit | 6289d28d3c4e56f34830cfb011c31271ef850418 (patch) | |
tree | 32d0c4d7af2c5a6a9d293a1ea05eb0d45313e450 /posix/spawn_faction_addtcsetpgrp_np.c | |
parent | 3f35e7d193b7ff098467996ebf85b19c41d6d86e (diff) | |
download | glibc-6289d28d3c4e56f34830cfb011c31271ef850418.tar.gz glibc-6289d28d3c4e56f34830cfb011c31271ef850418.tar.xz glibc-6289d28d3c4e56f34830cfb011c31271ef850418.zip |
posix: Replace posix_spawnattr_tc{get,set}pgrp_np with posix_spawn_file_actions_addtcsetpgrp_np
The posix_spawnattr_tcsetpgrp_np works on a file descriptor (the controlling terminal), so it would make more sense to actually fit it on the file actions API. Also, POSIX_SPAWN_TCSETPGROUP is not really required since it is implicit by the presence of tcsetpgrp file action. The posix/tst-spawn6.c is also fixed when TTY can is not present. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'posix/spawn_faction_addtcsetpgrp_np.c')
-rw-r--r-- | posix/spawn_faction_addtcsetpgrp_np.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/posix/spawn_faction_addtcsetpgrp_np.c b/posix/spawn_faction_addtcsetpgrp_np.c new file mode 100644 index 0000000000..86f882cd84 --- /dev/null +++ b/posix/spawn_faction_addtcsetpgrp_np.c @@ -0,0 +1,50 @@ +/* Add tcsetpgrp to the file action list for posix_spawn. + Copyright (C) 2022 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <spawn.h> +#include <unistd.h> +#include <spawn_int.h> + +int +__posix_spawn_file_actions_addtcsetpgrp_np (posix_spawn_file_actions_t + *file_actions, int tcfd) +{ + struct __spawn_action *rec; + + if (!__spawn_valid_fd (tcfd)) + return EBADF; + + /* Allocate more memory if needed. */ + if (file_actions->__used == file_actions->__allocated + && __posix_spawn_file_actions_realloc (file_actions) != 0) + /* This can only mean we ran out of memory. */ + return ENOMEM; + + /* Add the new value. */ + rec = &file_actions->__actions[file_actions->__used]; + rec->tag = spawn_do_tcsetpgrp; + rec->action.setpgrp_action.fd = tcfd; + + /* Account for the new entry. */ + ++file_actions->__used; + + return 0; +} +weak_alias (__posix_spawn_file_actions_addtcsetpgrp_np, + posix_spawn_file_actions_addtcsetpgrp_np) |