[LTP] [PATCH] pathconf01: Allow EINVAL where POSIX leaves support unspecified

Wake Liu wakel@google.com
Tue Oct 13 15:45:25 CEST 2026


Hi Andrea,

> > + /* POSIX leaves support for a directory unspecified */
> > + int einval_ok;
>
> Usually, in these cases, it's better to define an array of errno we might
> have when we trigger the syscall in a certain way. And then we use
> TST_EXP_ARR_FAIL() on it.

Thanks for the review!

pathconf01 is a positive test, and the einval_ok names actually succeed
on glibc, musl and Bionic since Android 15: they return >= 0, or -1
without changing errno.

TST_EXP_FAIL_ARR() and TST_EXP_FAIL2_ARR() expect the call to fail, so
they report TFAIL wherever these names are supported for directories.
I tried TST_EXP_FAIL2_ARR() and all 10 einval_ok names fail on glibc
("succeeded" or "expected EINVAL: SUCCESS (0)").

Here we still expect pathconf() to succeed, and only want to treat
EINVAL as TCONF for the names where POSIX leaves directory support
unspecified (POSIX only defines EINVAL for this case).

Does keeping the einval_ok check make sense to you, or would you still
prefer storing an exp_errs array in struct tcase and checking it with
tst_errno_in_set(), the helper behind TST_EXP_FAIL_ARR()?

Best regards,
Wake


On Tue, Oct 13, 2026 at 12:20 AM Andrea Cervesato
<andrea.cervesato@suse.com> wrote:
>
> Hi Wake,
>
> > POSIX lists two EINVAL cases for pathconf(). It shall fail with EINVAL
> > when the value of name is not valid. It may also fail with EINVAL when
> > "the implementation does not support an association of the variable
> > name with the specified file".
> >
> > The test always calls pathconf() on a directory. For a directory, POSIX
> > leaves it unspecified whether _PC_MAX_CANON, _PC_MAX_INPUT and
> > _PC_VDISABLE (note 2), _PC_ASYNC_IO, _PC_PRIO_IO and _PC_SYNC_IO
> > (note 8) and the _PC_REC_* names (note 10) are supported, so EINVAL is
> > allowed for them.
> >
> > Bionic before Android 15 returns -1 and sets errno to EINVAL for
> > _PC_REC_INCR_XFER_SIZE and _PC_REC_MAX_XFER_SIZE, which makes the test
> > fail.
> >
> > Report EINVAL as TCONF for these names. EINVAL for the other names is
> > still a failure.
> >
> > Also print the name and errno on failure, so it is clear which name
> > failed.
> >
> > Signed-off-by: Wake Liu <wakel@google.com>
> > ---
> >  .../kernel/syscalls/pathconf/pathconf01.c     | 36 ++++++++++++-------
> >  1 file changed, 23 insertions(+), 13 deletions(-)
> >
> > diff --git a/testcases/kernel/syscalls/pathconf/pathconf01.c b/testcases/kernel/syscalls/pathconf/pathconf01.c
> > index 5af45e417..635c356bc 100644
> > --- a/testcases/kernel/syscalls/pathconf/pathconf01.c
> > +++ b/testcases/kernel/syscalls/pathconf/pathconf01.c
> > @@ -19,24 +19,26 @@ static char *path;
> >  static struct tcase {
> >       int value;
> >       char *name;
> > +     /* POSIX leaves support for a directory unspecified */
> > +     int einval_ok;
>
> Usually, in these cases, it's better to define an array of errno we might
> have when we trigger the syscall in a certain way. And then we use
> TST_EXP_ARR_FAIL() on it.
>
> --
> Andrea Cervesato
> SUSE QE Automation Engineer Linux
> andrea.cervesato@suse.com



-- 
Best Regards,
Wake Liu


More information about the ltp mailing list