Re: [PATCH 3/3] libc: Replace one letter member names in __tzrule_struct

Jeff Johnston via Newlib <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CAOox84vVzPbBGf3hU+JFRjsNm-RkmicLgBodVHOQM3ZYTnEVkw@mail.gmail.com>
Hello, while I fully agree there is an issue (the struct was due to my
initial check-in in 2005 based on glibc), the change will break API and
thus technically requires a major release bump of newlib.  I would prefer
to wait for something else
to require a major bump before making such a change.  In such a case, I
also believe that the patch should either use double-underscores for the
field names (e.g. __month) or hide the struct from regular users of time.h.

-- Jeff J.

On Thu, Oct 1, 2020 at 10:19 AM Torbjörn SVENSSON via Newlib <
[email protected]> wrote:

> As discussed in GCC bug 97088
> (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97088), parameters in
> prototypes of library functions should use reserved names, or no name
> at all.
>
> This patch replaces 'm', 'n', 'd' and 's' members in
> 'struct __tzrule_struct' to avoid possible clashes with user code in
> case someone uses before including Newlib's time.h (or uses some
> other conflicting definition)
>
> Signed-off-by: Torbjörn SVENSSON <[email protected]>
> ---
>  newlib/libc/include/time.h       |  8 ++++----
>  newlib/libc/time/tzcalc_limits.c | 14 +++++++-------
>  newlib/libc/time/tzset_r.c       | 22 +++++++++++-----------
>  3 files changed, 22 insertions(+), 22 deletions(-)
>
> diff --git a/newlib/libc/include/time.h b/newlib/libc/include/time.h
> index 3031590b4..6a540537f 100644
> --- a/newlib/libc/include/time.h
> +++ b/newlib/libc/include/time.h
> @@ -105,10 +105,10 @@ void      _tzset_r        (struct _reent *);
>  typedef struct __tzrule_struct
>  {
>    char ch;
> -  int m;
> -  int n;
> -  int d;
> -  int s;
> +  int month; /* Month of year if ch=M */
> +  int week; /* Week of month if ch=M */
> +  int day; /* Day of week if ch=M, day of year if ch=J or ch=D */
> +  int secs; /* Time of day in seconds */
>    time_t change;
>    long offset; /* Match type of _timezone. */
>  } __tzrule_type;
> diff --git a/newlib/libc/time/tzcalc_limits.c
> b/newlib/libc/time/tzcalc_limits.c
> index e0ea6549c..b2163ed3d 100644
> --- a/newlib/libc/time/tzcalc_limits.c
> +++ b/newlib/libc/time/tzcalc_limits.c
> @@ -34,13 +34,13 @@ __tzcalc_limits (int year)
>        if (tz->__tzrule[i].ch == 'J')
>         {
>           /* The Julian day n (1 <= n <= 365). */
> -         days = year_days + tz->__tzrule[i].d +
> -           (isleap(year) && tz->__tzrule[i].d >= 60);
> +         days = year_days + tz->__tzrule[i].day +
> +           (isleap(year) && tz->__tzrule[i].day >= 60);
>           /* Convert to yday */
>           --days;
>         }
>        else if (tz->__tzrule[i].ch == 'D')
> -       days = year_days + tz->__tzrule[i].d;
> +       days = year_days + tz->__tzrule[i].day;
>        else
>         {
>           const int yleap = isleap(year);
> @@ -49,15 +49,15 @@ __tzcalc_limits (int year)
>
>           days = year_days;
>
> -         for (j = 1; j < tz->__tzrule[i].m; ++j)
> +         for (j = 1; j < tz->__tzrule[i].month; ++j)
>             days += ip[j-1];
>
>           m_wday = (EPOCH_WDAY + days) % DAYSPERWEEK;
>
> -         wday_diff = tz->__tzrule[i].d - m_wday;
> +         wday_diff = tz->__tzrule[i].day - m_wday;
>           if (wday_diff < 0)
>             wday_diff += DAYSPERWEEK;
> -         m_day = (tz->__tzrule[i].n - 1) * DAYSPERWEEK + wday_diff;
> +         m_day = (tz->__tzrule[i].week - 1) * DAYSPERWEEK + wday_diff;
>
>           while (m_day >= ip[j-1])
>             m_day -= DAYSPERWEEK;
> @@ -67,7 +67,7 @@ __tzcalc_limits (int year)
>
>        /* store the change-over time in GMT form by adding offset */
>        tz->__tzrule[i].change = days * SECSPERDAY +
> -      tz->__tzrule[i].s + tz->__tzrule[i].offset;
> +      tz->__tzrule[i].secs + tz->__tzrule[i].offset;
>      }
>
>    tz->__tznorth = (tz->__tzrule[0].change < tz->__tzrule[1].change);
> diff --git a/newlib/libc/time/tzset_r.c b/newlib/libc/time/tzset_r.c
> index 9e0cf834b..7117b51e6 100644
> --- a/newlib/libc/time/tzset_r.c
> +++ b/newlib/libc/time/tzset_r.c
> @@ -115,9 +115,9 @@ _tzset_unlocked_r (struct _reent *reent_ptr)
>             return;
>
>           tz->__tzrule[i].ch = 'M';
> -         tz->__tzrule[i].m = m;
> -         tz->__tzrule[i].n = w;
> -         tz->__tzrule[i].d = d;
> +         tz->__tzrule[i].month = m;
> +         tz->__tzrule[i].week = w;
> +         tz->__tzrule[i].day = d;
>
>           tzenv += n;
>         }
> @@ -142,22 +142,22 @@ _tzset_unlocked_r (struct _reent *reent_ptr)
>               if (i == 0)
>                 {
>                   tz->__tzrule[0].ch = 'M';
> -                 tz->__tzrule[0].m = 3;
> -                 tz->__tzrule[0].n = 2;
> -                 tz->__tzrule[0].d = 0;
> +                 tz->__tzrule[0].month = 3;
> +                 tz->__tzrule[0].week = 2;
> +                 tz->__tzrule[0].day = 0;
>                 }
>               else
>                 {
>                   tz->__tzrule[1].ch = 'M';
> -                 tz->__tzrule[1].m = 11;
> -                 tz->__tzrule[1].n = 1;
> -                 tz->__tzrule[1].d = 0;
> +                 tz->__tzrule[1].month = 11;
> +                 tz->__tzrule[1].week = 1;
> +                 tz->__tzrule[1].day = 0;
>                 }
>             }
>           else
>             {
>               tz->__tzrule[i].ch = ch;
> -             tz->__tzrule[i].d = d;
> +             tz->__tzrule[i].day = d;
>             }
>
>           tzenv = end;
> @@ -172,7 +172,7 @@ _tzset_unlocked_r (struct _reent *reent_ptr)
>        if (*tzenv == '/')
>         sscanf (tzenv, "/%hu%n:%hu%n:%hu%n", &hh, &n, &mm, &n, &ss, &n);
>
> -      tz->__tzrule[i].s = ss + SECSPERMIN * mm + SECSPERHOUR  * hh;
> +      tz->__tzrule[i].secs = ss + SECSPERMIN * mm + SECSPERHOUR  * hh;
>
>        tzenv += n;
>      }
> --
> 2.18.0
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.