Do not declare asctime_r and ctime_r for C2X

Message ID alpine.DEB.2.22.394.2105132238480.2102509@digraph.polyomino.org.uk
State New
Headers show
Series
  • Do not declare asctime_r and ctime_r for C2X
Related show

Commit Message

Joseph Myers May 13, 2021, 10:39 p.m.
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.


-- 
Joseph S. Myers
joseph@codesourcery.com

Comments

Paul Eggert May 14, 2021, 6:42 a.m. | #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.
H.J. Lu via Libc-alpha May 18, 2021, 6:38 p.m. | #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.  */