[PATCH] linux-user: Fix incorrect use of feature-test-macros

Michael Forney posted 1 patch 2 years, 11 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/next-importer-push tags/patchew/20210526035531.7871-1-mforney@mforney.org
Maintainers: Laurent Vivier <laurent@vivier.eu>
linux-user/syscall.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
[PATCH] linux-user: Fix incorrect use of feature-test-macros
Posted by Michael Forney 2 years, 11 months ago
The _POSIX_C_SOURCE and _XOPEN_SOURCE macros are used by the
application to indicate to libc which declarations it should expose.
Since qemu does not define them anywhere, it does not make sense
to check their value.

Instead, since the intent is to determine whether the host struct
stat supports the st_*tim fields, use the configure test result
which does exactly that.

Signed-off-by: Michael Forney <mforney@mforney.org>
---
 linux-user/syscall.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index c9f812091c..9a52f235d2 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7470,7 +7470,7 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
         __put_user(host_st->st_atime, &target_st->target_st_atime);
         __put_user(host_st->st_mtime, &target_st->target_st_mtime);
         __put_user(host_st->st_ctime, &target_st->target_st_ctime);
-#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
+#ifdef HAVE_STRUCT_STAT_ST_ATIM
         __put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
         __put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
         __put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
@@ -7505,7 +7505,7 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
         __put_user(host_st->st_atime, &target_st->target_st_atime);
         __put_user(host_st->st_mtime, &target_st->target_st_mtime);
         __put_user(host_st->st_ctime, &target_st->target_st_ctime);
-#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
+#ifdef HAVE_STRUCT_STAT_ST_ATIM
         __put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
         __put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
         __put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
@@ -10056,8 +10056,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
                 __put_user(st.st_atime, &target_st->target_st_atime);
                 __put_user(st.st_mtime, &target_st->target_st_mtime);
                 __put_user(st.st_ctime, &target_st->target_st_ctime);
-#if (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) && \
-    defined(TARGET_STAT_HAVE_NSEC)
+#if defined(HAVE_STRUCT_STAT_ST_ATIM) && defined(TARGET_STAT_HAVE_NSEC)
                 __put_user(st.st_atim.tv_nsec,
                            &target_st->target_st_atime_nsec);
                 __put_user(st.st_mtim.tv_nsec,
-- 
2.31.1


Re: [PATCH] linux-user: Fix incorrect use of feature-test-macros
Posted by Laurent Vivier 2 years, 10 months ago
Le 26/05/2021 à 05:55, Michael Forney a écrit :
> The _POSIX_C_SOURCE and _XOPEN_SOURCE macros are used by the
> application to indicate to libc which declarations it should expose.
> Since qemu does not define them anywhere, it does not make sense
> to check their value.
> 
> Instead, since the intent is to determine whether the host struct
> stat supports the st_*tim fields, use the configure test result
> which does exactly that.
> 
> Signed-off-by: Michael Forney <mforney@mforney.org>
> ---
>  linux-user/syscall.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index c9f812091c..9a52f235d2 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -7470,7 +7470,7 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
>          __put_user(host_st->st_atime, &target_st->target_st_atime);
>          __put_user(host_st->st_mtime, &target_st->target_st_mtime);
>          __put_user(host_st->st_ctime, &target_st->target_st_ctime);
> -#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
> +#ifdef HAVE_STRUCT_STAT_ST_ATIM
>          __put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
>          __put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
>          __put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
> @@ -7505,7 +7505,7 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
>          __put_user(host_st->st_atime, &target_st->target_st_atime);
>          __put_user(host_st->st_mtime, &target_st->target_st_mtime);
>          __put_user(host_st->st_ctime, &target_st->target_st_ctime);
> -#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
> +#ifdef HAVE_STRUCT_STAT_ST_ATIM
>          __put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
>          __put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
>          __put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
> @@ -10056,8 +10056,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
>                  __put_user(st.st_atime, &target_st->target_st_atime);
>                  __put_user(st.st_mtime, &target_st->target_st_mtime);
>                  __put_user(st.st_ctime, &target_st->target_st_ctime);
> -#if (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) && \
> -    defined(TARGET_STAT_HAVE_NSEC)
> +#if defined(HAVE_STRUCT_STAT_ST_ATIM) && defined(TARGET_STAT_HAVE_NSEC)
>                  __put_user(st.st_atim.tv_nsec,
>                             &target_st->target_st_atime_nsec);
>                  __put_user(st.st_mtim.tv_nsec,
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>

Re: [PATCH] linux-user: Fix incorrect use of feature-test-macros
Posted by Laurent Vivier 2 years, 10 months ago
Le 26/05/2021 à 05:55, Michael Forney a écrit :
> The _POSIX_C_SOURCE and _XOPEN_SOURCE macros are used by the
> application to indicate to libc which declarations it should expose.
> Since qemu does not define them anywhere, it does not make sense
> to check their value.
> 
> Instead, since the intent is to determine whether the host struct
> stat supports the st_*tim fields, use the configure test result
> which does exactly that.
> 
> Signed-off-by: Michael Forney <mforney@mforney.org>
> ---
>  linux-user/syscall.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index c9f812091c..9a52f235d2 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -7470,7 +7470,7 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
>          __put_user(host_st->st_atime, &target_st->target_st_atime);
>          __put_user(host_st->st_mtime, &target_st->target_st_mtime);
>          __put_user(host_st->st_ctime, &target_st->target_st_ctime);
> -#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
> +#ifdef HAVE_STRUCT_STAT_ST_ATIM
>          __put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
>          __put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
>          __put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
> @@ -7505,7 +7505,7 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
>          __put_user(host_st->st_atime, &target_st->target_st_atime);
>          __put_user(host_st->st_mtime, &target_st->target_st_mtime);
>          __put_user(host_st->st_ctime, &target_st->target_st_ctime);
> -#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
> +#ifdef HAVE_STRUCT_STAT_ST_ATIM
>          __put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
>          __put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
>          __put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
> @@ -10056,8 +10056,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
>                  __put_user(st.st_atime, &target_st->target_st_atime);
>                  __put_user(st.st_mtime, &target_st->target_st_mtime);
>                  __put_user(st.st_ctime, &target_st->target_st_ctime);
> -#if (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) && \
> -    defined(TARGET_STAT_HAVE_NSEC)
> +#if defined(HAVE_STRUCT_STAT_ST_ATIM) && defined(TARGET_STAT_HAVE_NSEC)
>                  __put_user(st.st_atim.tv_nsec,
>                             &target_st->target_st_atime_nsec);
>                  __put_user(st.st_mtim.tv_nsec,
> 

Applied to my linux-user-for-6.1 branch.

Thanks,
Laurent