Reject invalid definitions of _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE

Message ID 87o9ld3lxz.fsf@linux-m68k.org
State New
Headers show
Series
  • Reject invalid definitions of _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE
Related show

Commit Message

Andreas Schwab Jan. 28, 2018, 5:58 p.m.
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(-)

-- 
2.16.1


-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

Comments

Dmitry V. Levin Jan. 28, 2018, 10:50 p.m. | #1
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?


-- 
ldv
Samuel Thibault Jan. 28, 2018, 11:02 p.m. | #2
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
Dmitry V. Levin Jan. 28, 2018, 11:27 p.m. | #3
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.


-- 
ldv

Patch

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