[v2] posix: Fix attribute access mode on getcwd [BZ #27476]

Message ID 20210910183822.1458644-1-aurelien@aurel32.net
State New
Headers show
Series
  • [v2] posix: Fix attribute access mode on getcwd [BZ #27476]
Related show

Commit Message

Aurelien Jarno Sept. 10, 2021, 6:38 p.m.
There is a GNU extension that allows to call getcwd(NULL, >0). It is
described in the documentation, but also directly in the unistd.h
header, just above the declaration.

Therefore the attribute access mode added in commit 06febd8c6705
is not correct. Drop it.
---
 posix/bits/unistd.h | 5 ++---
 posix/unistd.h      | 3 +--
 2 files changed, 3 insertions(+), 5 deletions(-)

Note: I am aware of BZ #26545, however while it is being discussed, the
bug is still there, so I don't think we should block on a decision to
fix it.

-- 
2.30.2

Comments

Aurelien Jarno Sept. 14, 2021, 2:06 p.m. | #1
Any opinion about that patch? Florian maybe given you have reviewed v1?

Thanks
Aurelien

On 2021-09-10 20:38, Aurelien Jarno wrote:
> There is a GNU extension that allows to call getcwd(NULL, >0). It is

> described in the documentation, but also directly in the unistd.h

> header, just above the declaration.

> 

> Therefore the attribute access mode added in commit 06febd8c6705

> is not correct. Drop it.

> ---

>  posix/bits/unistd.h | 5 ++---

>  posix/unistd.h      | 3 +--

>  2 files changed, 3 insertions(+), 5 deletions(-)

> 

> Note: I am aware of BZ #26545, however while it is being discussed, the

> bug is still there, so I don't think we should block on a decision to

> fix it.

> 

> diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h

> index f0831386c7..622adeb2b2 100644

> --- a/posix/bits/unistd.h

> +++ b/posix/bits/unistd.h

> @@ -199,10 +199,9 @@ __NTH (readlinkat (int __fd, const char *__restrict __path,

>  #endif

>  

>  extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)

> -     __THROW __wur __attr_access ((__write_only__, 1, 2));

> +     __THROW __wur;

>  extern char *__REDIRECT_NTH (__getcwd_alias,

> -			     (char *__buf, size_t __size), getcwd)

> -  __wur __attr_access ((__write_only__, 1, 2));

> +			     (char *__buf, size_t __size), getcwd) __wur;

>  extern char *__REDIRECT_NTH (__getcwd_chk_warn,

>  			     (char *__buf, size_t __size, size_t __buflen),

>  			     __getcwd_chk)

> diff --git a/posix/unistd.h b/posix/unistd.h

> index 3dca65732f..8224c5fbc9 100644

> --- a/posix/unistd.h

> +++ b/posix/unistd.h

> @@ -528,8 +528,7 @@ extern int fchdir (int __fd) __THROW __wur;

>     an array is allocated with `malloc'; the array is SIZE

>     bytes long, unless SIZE == 0, in which case it is as

>     big as necessary.  */

> -extern char *getcwd (char *__buf, size_t __size) __THROW __wur

> -    __attr_access ((__write_only__, 1, 2));

> +extern char *getcwd (char *__buf, size_t __size) __THROW __wur;

>  

>  #ifdef	__USE_GNU

>  /* Return a malloc'd string containing the current directory name.

> -- 

> 2.30.2

> 

> 


-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net
Szabolcs Nagy via Libc-alpha Sept. 16, 2021, 8:28 a.m. | #2
* Aurelien Jarno:

> There is a GNU extension that allows to call getcwd(NULL, >0). It is

> described in the documentation, but also directly in the unistd.h

> header, just above the declaration.

>

> Therefore the attribute access mode added in commit 06febd8c6705

> is not correct. Drop it.

> ---

>  posix/bits/unistd.h | 5 ++---

>  posix/unistd.h      | 3 +--

>  2 files changed, 3 insertions(+), 5 deletions(-)

>

> Note: I am aware of BZ #26545, however while it is being discussed, the

> bug is still there, so I don't think we should block on a decision to

> fix it.

>

> diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h

> index f0831386c7..622adeb2b2 100644

> --- a/posix/bits/unistd.h

> +++ b/posix/bits/unistd.h

> @@ -199,10 +199,9 @@ __NTH (readlinkat (int __fd, const char *__restrict __path,

>  #endif

>  

>  extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)

> -     __THROW __wur __attr_access ((__write_only__, 1, 2));

> +     __THROW __wur;

>  extern char *__REDIRECT_NTH (__getcwd_alias,

> -			     (char *__buf, size_t __size), getcwd)

> -  __wur __attr_access ((__write_only__, 1, 2));

> +			     (char *__buf, size_t __size), getcwd) __wur;

>  extern char *__REDIRECT_NTH (__getcwd_chk_warn,

>  			     (char *__buf, size_t __size, size_t __buflen),

>  			     __getcwd_chk)

> diff --git a/posix/unistd.h b/posix/unistd.h

> index 3dca65732f..8224c5fbc9 100644

> --- a/posix/unistd.h

> +++ b/posix/unistd.h

> @@ -528,8 +528,7 @@ extern int fchdir (int __fd) __THROW __wur;

>     an array is allocated with `malloc'; the array is SIZE

>     bytes long, unless SIZE == 0, in which case it is as

>     big as necessary.  */

> -extern char *getcwd (char *__buf, size_t __size) __THROW __wur

> -    __attr_access ((__write_only__, 1, 2));

> +extern char *getcwd (char *__buf, size_t __size) __THROW __wur;

>  

>  #ifdef	__USE_GNU

>  /* Return a malloc'd string containing the current directory name.


This looks okay to me, thanks.

Reviewed-by: Florian Weimer <fweimer@redhat.com>


Florian

Patch

diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h
index f0831386c7..622adeb2b2 100644
--- a/posix/bits/unistd.h
+++ b/posix/bits/unistd.h
@@ -199,10 +199,9 @@  __NTH (readlinkat (int __fd, const char *__restrict __path,
 #endif
 
 extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)
-     __THROW __wur __attr_access ((__write_only__, 1, 2));
+     __THROW __wur;
 extern char *__REDIRECT_NTH (__getcwd_alias,
-			     (char *__buf, size_t __size), getcwd)
-  __wur __attr_access ((__write_only__, 1, 2));
+			     (char *__buf, size_t __size), getcwd) __wur;
 extern char *__REDIRECT_NTH (__getcwd_chk_warn,
 			     (char *__buf, size_t __size, size_t __buflen),
 			     __getcwd_chk)
diff --git a/posix/unistd.h b/posix/unistd.h
index 3dca65732f..8224c5fbc9 100644
--- a/posix/unistd.h
+++ b/posix/unistd.h
@@ -528,8 +528,7 @@  extern int fchdir (int __fd) __THROW __wur;
    an array is allocated with `malloc'; the array is SIZE
    bytes long, unless SIZE == 0, in which case it is as
    big as necessary.  */
-extern char *getcwd (char *__buf, size_t __size) __THROW __wur
-    __attr_access ((__write_only__, 1, 2));
+extern char *getcwd (char *__buf, size_t __size) __THROW __wur;
 
 #ifdef	__USE_GNU
 /* Return a malloc'd string containing the current directory name.