Message ID | 87o9ld3lxz.fsf@linux-m68k.org |
---|---|
State | New |
Headers | show |
Series | Reject invalid definitions of _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE | expand |
On Sun, Jan 28, 2018 at 06:58:00PM +0100, Andreas Schwab wrote: > POSIX requires that the constants _POSIX_CHOWN_RESTRICTED, > _POSIX_NO_TRUNC, and _POSIX_VDISABLE are always defined to a value other > than -1. > > * sysdeps/posix/fpathconf.c (__fpathconf): Verify the values of > _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE. > * sysdeps/posix/pathconf.c (__pathconf): Likewise. > --- > sysdeps/posix/fpathconf.c | 21 +++++++++------------ > sysdeps/posix/pathconf.c | 21 +++++++++------------ > 2 files changed, 18 insertions(+), 24 deletions(-) > > diff --git a/sysdeps/posix/fpathconf.c b/sysdeps/posix/fpathconf.c > index 80af77e148..a9d164564e 100644 > --- a/sysdeps/posix/fpathconf.c > +++ b/sysdeps/posix/fpathconf.c > @@ -103,25 +103,22 @@ __fpathconf (int fd, int name) > #endif > > case _PC_CHOWN_RESTRICTED: > -#ifdef _POSIX_CHOWN_RESTRICTED > - return _POSIX_CHOWN_RESTRICTED; > -#else > - return -1; > +#if _POSIX_CHOWN_RESTRICTED == -1 > +# error "Invalid value for _POSIX_CHOWN_RESTRICTED" > #endif > + return _POSIX_CHOWN_RESTRICTED; > > case _PC_NO_TRUNC: > -#ifdef _POSIX_NO_TRUNC > - return _POSIX_NO_TRUNC; > -#else > - return -1; > +#if _POSIX_NO_TRUNC == -1 > +# error "Invalid value for _POSIX_NO_TRUNC" > #endif > + return _POSIX_NO_TRUNC; > > case _PC_VDISABLE: > -#ifdef _POSIX_VDISABLE > - return _POSIX_VDISABLE; > -#else > - return -1; > +#if _POSIX_VDISABLE == -1 > +# error "Invalid value for _POSIX_VDISABLE" > #endif > + return _POSIX_VDISABLE; sysdeps/mach/hurd/bits/posix_opt.h defines _POSIX_VDISABLE to ((unsigned char) -1), should it be fixed, too?
Dmitry V. Levin, on lun. 29 janv. 2018 01:50:51 +0300, wrote: > > case _PC_VDISABLE: > > -#ifdef _POSIX_VDISABLE > > - return _POSIX_VDISABLE; > > -#else > > - return -1; > > +#if _POSIX_VDISABLE == -1 > > +# error "Invalid value for _POSIX_VDISABLE" > > #endif > > + return _POSIX_VDISABLE; > > sysdeps/mach/hurd/bits/posix_opt.h defines _POSIX_VDISABLE > to ((unsigned char) -1), should it be fixed, too? Posix says that using -1 is invalid, indeed. Samuel
On Mon, Jan 29, 2018 at 12:02:13AM +0100, Samuel Thibault wrote: > Dmitry V. Levin, on lun. 29 janv. 2018 01:50:51 +0300, wrote: > > > case _PC_VDISABLE: > > > -#ifdef _POSIX_VDISABLE > > > - return _POSIX_VDISABLE; > > > -#else > > > - return -1; > > > +#if _POSIX_VDISABLE == -1 > > > +# error "Invalid value for _POSIX_VDISABLE" > > > #endif > > > + return _POSIX_VDISABLE; > > > > sysdeps/mach/hurd/bits/posix_opt.h defines _POSIX_VDISABLE > > to ((unsigned char) -1), should it be fixed, too? > > Posix says that using -1 is invalid, indeed. As it's fixed now, the patch should be safe to commit.
diff --git a/sysdeps/posix/fpathconf.c b/sysdeps/posix/fpathconf.c index 80af77e148..a9d164564e 100644 --- a/sysdeps/posix/fpathconf.c +++ b/sysdeps/posix/fpathconf.c @@ -103,25 +103,22 @@ __fpathconf (int fd, int name) #endif case _PC_CHOWN_RESTRICTED: -#ifdef _POSIX_CHOWN_RESTRICTED - return _POSIX_CHOWN_RESTRICTED; -#else - return -1; +#if _POSIX_CHOWN_RESTRICTED == -1 +# error "Invalid value for _POSIX_CHOWN_RESTRICTED" #endif + return _POSIX_CHOWN_RESTRICTED; case _PC_NO_TRUNC: -#ifdef _POSIX_NO_TRUNC - return _POSIX_NO_TRUNC; -#else - return -1; +#if _POSIX_NO_TRUNC == -1 +# error "Invalid value for _POSIX_NO_TRUNC" #endif + return _POSIX_NO_TRUNC; case _PC_VDISABLE: -#ifdef _POSIX_VDISABLE - return _POSIX_VDISABLE; -#else - return -1; +#if _POSIX_VDISABLE == -1 +# error "Invalid value for _POSIX_VDISABLE" #endif + return _POSIX_VDISABLE; case _PC_SYNC_IO: #ifdef _POSIX_SYNC_IO diff --git a/sysdeps/posix/pathconf.c b/sysdeps/posix/pathconf.c index 2059e55b4f..0f893ec1ba 100644 --- a/sysdeps/posix/pathconf.c +++ b/sysdeps/posix/pathconf.c @@ -101,25 +101,22 @@ __pathconf (const char *path, int name) #endif case _PC_CHOWN_RESTRICTED: -#ifdef _POSIX_CHOWN_RESTRICTED - return _POSIX_CHOWN_RESTRICTED; -#else - return -1; +#if _POSIX_CHOWN_RESTRICTED == -1 +# error "Invalid value for _POSIX_CHOWN_RESTRICTED" #endif + return _POSIX_CHOWN_RESTRICTED; case _PC_NO_TRUNC: -#ifdef _POSIX_NO_TRUNC - return _POSIX_NO_TRUNC; -#else - return -1; +#if _POSIX_NO_TRUNC == -1 +# error "Invalid value for _POSIX_NO_TRUNC" #endif + return _POSIX_NO_TRUNC; case _PC_VDISABLE: -#ifdef _POSIX_VDISABLE - return _POSIX_VDISABLE; -#else - return -1; +#if _POSIX_VDISABLE == -1 +# error "Invalid value for _POSIX_VDISABLE" #endif + return _POSIX_VDISABLE; case _PC_SYNC_IO: #ifdef _POSIX_SYNC_IO