Do not declare asctime_r and ctime_r for C2X

Message ID alpine.DEB.2.22.394.2105132238480.2102509@digraph.polyomino.org.uk
State Committed
Commit 8382f4c3e5daf28af1aba0743aa3d62c7490bbf3
Headers
Series Do not declare asctime_r and ctime_r for C2X |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Joseph Myers May 13, 2021, 10:39 p.m. UTC
  ISO C2X added the asctime_r, ctime_r, gmtime_r and localtime_r
functions from POSIX.  It's now removed asctime_r and ctime_r again,
reflecting that they are marked obsolescent in POSIX; update glibc's
time.h accordingly.

The same change that removed those two functions from C2X also marked
asctime and ctime as deprecated (reflecting how POSIX shows them as
obsolescent), i.e. using the [[deprecated]] attribute in the
prototypes shown in C2X.  It's less clear if we should explicitly
deprecate those functions like that in the glibc headers; this patch
does nothing regarding such a deprecation (there's no normative
requirement from C2X showing the functions as deprecated).

Tested for x86_64 and x86.
  

Comments

Paul Eggert May 14, 2021, 6:42 a.m. UTC | #1
On 5/13/21 5:39 PM, Joseph Myers wrote:
> The same change that removed those two functions from C2X also marked
> asctime and ctime as deprecated (reflecting how POSIX shows them as
> obsolescent), i.e. using the [[deprecated]] attribute in the
> prototypes shown in C2X.  It's less clear if we should explicitly
> deprecate those functions like that in the glibc headers

Sounds like that's just a quality-of-implementation issue. My vote would 
be to deprecate them in the glibc headers, as they're asking for trouble 
(buffer overrun etc.) with 64-bit time_t.
  
Adhemerval Zanella May 18, 2021, 6:38 p.m. UTC | #2
On 13/05/2021 19:39, Joseph Myers wrote:
> ISO C2X added the asctime_r, ctime_r, gmtime_r and localtime_r
> functions from POSIX.  It's now removed asctime_r and ctime_r again,
> reflecting that they are marked obsolescent in POSIX; update glibc's
> time.h accordingly.
> 
> The same change that removed those two functions from C2X also marked
> asctime and ctime as deprecated (reflecting how POSIX shows them as
> obsolescent), i.e. using the [[deprecated]] attribute in the
> prototypes shown in C2X.  It's less clear if we should explicitly
> deprecate those functions like that in the glibc headers; this patch
> does nothing regarding such a deprecation (there's no normative
> requirement from C2X showing the functions as deprecated).
> 
> Tested for x86_64 and x86.

LGTM, I think we can make the function deprecated on a subsequent patch.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> 
> diff --git a/time/time.h b/time/time.h
> index 3bf206be0b..dcc2d595e8 100644
> --- a/time/time.h
> +++ b/time/time.h
> @@ -141,7 +141,7 @@ extern char *asctime (const struct tm *__tp) __THROW;
>  /* Equivalent to `asctime (localtime (timer))'.  */
>  extern char *ctime (const time_t *__timer) __THROW;
>  
> -#if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
> +#ifdef __USE_POSIX
>  /* Reentrant versions of the above functions.  */
>  
>  /* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n"
> @@ -152,7 +152,7 @@ extern char *asctime_r (const struct tm *__restrict __tp,
>  /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
>  extern char *ctime_r (const time_t *__restrict __timer,
>  		      char *__restrict __buf) __THROW;
> -#endif	/* POSIX || C2X */
> +#endif	/* POSIX */
>  
>  
>  /* Defined in localtime.c.  */
>
  

Patch

diff --git a/time/time.h b/time/time.h
index 3bf206be0b..dcc2d595e8 100644
--- a/time/time.h
+++ b/time/time.h
@@ -141,7 +141,7 @@  extern char *asctime (const struct tm *__tp) __THROW;
 /* Equivalent to `asctime (localtime (timer))'.  */
 extern char *ctime (const time_t *__timer) __THROW;
 
-#if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
+#ifdef __USE_POSIX
 /* Reentrant versions of the above functions.  */
 
 /* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n"
@@ -152,7 +152,7 @@  extern char *asctime_r (const struct tm *__restrict __tp,
 /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
 extern char *ctime_r (const time_t *__restrict __timer,
 		      char *__restrict __buf) __THROW;
-#endif	/* POSIX || C2X */
+#endif	/* POSIX */
 
 
 /* Defined in localtime.c.  */