[PATCH v3] posix: Add POSIX aliases to some spawn functions

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Thu Apr 2 18:56:49 GMT 2026



On 01/04/26 09:21, Lucas Chollet wrote:
> Both `posix_spawn_file_actions_add{,f}chdir` functions are now fully
> defined by POSIX-2024, this patch adds both functions as aliases of the
> already existing `posix_spawn_file_actions_add{,f}chdir_np` GNU
> extensions.
> 
> This makes glibc more compliant in regards to POSIX-2024.
> 
> Signed-off-by: Lucas Chollet <lucas.chollet@free.fr>

This version looks good to me, thanks for working on this.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
> v3: Don't use preprocessor directives in macro args.
>  conform/data/spawn.h-data     |  4 ++++
>  posix/Makefile                |  1 +
>  posix/spawn.h                 | 20 ++++++++++++++++++++
>  posix/tst-spawn-chdir-posix.c |  2 ++
>  posix/tst-spawn-chdir.c       | 19 ++++++++++++++++---
>  5 files changed, 43 insertions(+), 3 deletions(-)
>  create mode 100644 posix/tst-spawn-chdir-posix.c
> 
> diff --git a/conform/data/spawn.h-data b/conform/data/spawn.h-data
> index 43aa9cb8ae..1f332324c2 100644
> --- a/conform/data/spawn.h-data
> +++ b/conform/data/spawn.h-data
> @@ -29,6 +29,10 @@ function int posix_spawnattr_setpgroup (posix_spawnattr_t*, pid_t)
>  function int posix_spawnattr_setschedparam (posix_spawnattr_t*, const struct sched_param*)
>  function int posix_spawnattr_setschedpolicy (posix_spawnattr_t*, int)
>  function int posix_spawnattr_setsigmask (posix_spawnattr_t*, const sigset_t*)
> +#if defined XOPEN2K24 || defined POSIX2024
> +function int posix_spawn_file_actions_addchdir (posix_spawn_file_actions_t*, const char *)
> +function int posix_spawn_file_actions_addfchdir (posix_spawn_file_actions_t*, int)
> +#endif
>  function int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t*, int)
>  function int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t*, int, int)
>  function int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t*, int, const char *, int, mode_t)
> diff --git a/posix/Makefile b/posix/Makefile
> index ec28b9e1da..a5e5162c61 100644
> --- a/posix/Makefile
> +++ b/posix/Makefile
> @@ -315,6 +315,7 @@ tests := \
>    tst-rxspencer-no-utf8 \
>    tst-sched_getaffinity \
>    tst-spawn-chdir \
> +  tst-spawn-chdir-posix \
>    tst-spawn4 \
>    tst-spawn5 \
>    tst-spawn6 \
> diff --git a/posix/spawn.h b/posix/spawn.h
> index 5e68752a66..0aabf5ebef 100644
> --- a/posix/spawn.h
> +++ b/posix/spawn.h
> @@ -200,6 +200,26 @@ extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *
>  					     int __fd, int __newfd)
>       __THROW __nonnull ((1));
>  
> +#ifdef __USE_XOPEN2K24XSI
> +
> +/* Add an action changing the directory to PATH during spawn.  This
> +   affects the subsequent file actions.
> +   Alias of posix_spawn_file_actions_addchdir_np.  */
> +extern int __REDIRECT_NTH (posix_spawn_file_actions_addchdir,
> +                            (posix_spawn_file_actions_t * __restrict __actions,
> +                             const char *__restrict __path),
> +                            posix_spawn_file_actions_addchdir_np);
> +
> +/* Add an action changing the directory to FD during spawn.  This
> +   affects the subsequent file actions.  FD is not duplicated and must
> +   be open when the file action is executed.
> +   Alias of posix_spawn_file_actions_addfchdir_np.  */
> +extern int __REDIRECT_NTH (posix_spawn_file_actions_addfchdir,
> +                           (posix_spawn_file_actions_t *, int __fd),
> +                           posix_spawn_file_actions_addfchdir_np);
> +
> +#endif /* __USE_XOPEN2K24XSI */
> +
>  #ifdef __USE_MISC
>  /* Add an action changing the directory to PATH during spawn.  This
>     affects the subsequent file actions.  */
> diff --git a/posix/tst-spawn-chdir-posix.c b/posix/tst-spawn-chdir-posix.c
> new file mode 100644
> index 0000000000..3f8d8952bb
> --- /dev/null
> +++ b/posix/tst-spawn-chdir-posix.c
> @@ -0,0 +1,2 @@
> +#define USE_POSIX_ALIASES
> +#include "tst-spawn-chdir.c"
> diff --git a/posix/tst-spawn-chdir.c b/posix/tst-spawn-chdir.c
> index a3478d61f6..166f835492 100644
> --- a/posix/tst-spawn-chdir.c
> +++ b/posix/tst-spawn-chdir.c
> @@ -78,12 +78,25 @@ add_chdir (posix_spawn_file_actions_t *actions, const char *path,
>      {
>        TEST_COMPARE (posix_spawn_file_actions_addopen
>                      (actions, tmpfd, path, O_DIRECTORY | O_RDONLY, 0), 0);
> -      TEST_COMPARE (posix_spawn_file_actions_addfchdir_np
> -                    (actions, tmpfd), 0);
> +
> +#ifdef USE_POSIX_ALIASES
> +      int ret = posix_spawn_file_actions_addfchdir (actions, tmpfd);
> +#else
> +      int ret = posix_spawn_file_actions_addfchdir_np (actions, tmpfd);
> +#endif
> +      TEST_COMPARE (ret, 0);
> +
>        TEST_COMPARE (posix_spawn_file_actions_addclose (actions, tmpfd), 0);
>      }
>    else
> -    TEST_COMPARE (posix_spawn_file_actions_addchdir_np (actions, path), 0);
> +    {
> +#ifdef USE_POSIX_ALIASES
> +      int ret = posix_spawn_file_actions_addchdir (actions, path);
> +#else
> +      int ret = posix_spawn_file_actions_addchdir_np (actions, path);
> +#endif
> +      TEST_COMPARE (ret, 0);
> +    }
>  }
>  
>  static int



More information about the Libc-alpha mailing list