[PATCH] Refactor mktime and add the POSIX function timegm

Brian Inglis Brian.Inglis@SystematicSw.ab.ca
Mon May 3 16:04:23 GMT 2021

On 2021-05-03 02:37, R. Diez via Newlib wrote:
> I have manually reconstructed the patch from Andrew Russell posted here:
> https://sourceware.org/legacy-ml/newlib/2018/msg00824.html
> Is the new implementation of __is_leap_year() right? I would rather keep the old ISLEAP implementation.
> R. Diez (1):
>    Refactor mktime and add the POSIX function timegm
>   newlib/libc/include/time.h   |  3 ++
>   newlib/libc/saber            |  1 +
>   newlib/libc/time/Makefile.am |  2 +
>   newlib/libc/time/Makefile.in |  9 +++++
>   newlib/libc/time/local.h     |  2 +
>   newlib/libc/time/mktime.c    | 78 +++++++++++++++++++++++++-----------
>   newlib/libc/time/timegm.c    | 63 +++++++++++++++++++++++++++++
>   7 files changed, 135 insertions(+), 23 deletions(-)
>   create mode 100644 newlib/libc/time/timegm.c

 >+<<timegm>> is a nonstandard GNU extension to POSIX also present on BSD.

Don't see where *non-inline* static functions and trivial renames are 
improvements over macros.
You removed a cast that may have been added to avoid overflow, probably in 32 
bit implementations, which is a continuing problem in these functions.
It may be unnecessary to add a new file for a small new function.

For patches of this sort, you normally want to avoid trivial changes so the 
substance of the patch stands out.

It may have been better to compare against the upstream BSD (or tzcode) sources 
and include one of those implementations of timegm, with any required changes, 
rather than refactor including trivial changes, making it difficult to rebase 
against the upstream and merge changes in future.

Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]

More information about the Newlib mailing list