Re: Update timezone to C99

Поиск
Список
Период
Сортировка
Искать
От
Tom Lane
Тема
Re: Update timezone to C99
Дата
Msg-id
3235596.1763154681@sss.pgh.pa.us
Ответ на
Re: Update timezone to C99 (Peter Eisentraut)
Список
Дерево обсуждения
Update timezone to C99 Peter Eisentraut <peter@eisentraut.org>
Re: Update timezone to C99 Tom Lane <tgl@sss.pgh.pa.us>
Re: Update timezone to C99 Peter Eisentraut <peter@eisentraut.org>
Re: Update timezone to C99 Tom Lane <tgl@sss.pgh.pa.us>
Re: Update timezone to C99 Peter Eisentraut <peter@eisentraut.org>
Re: Update timezone to C99 Tom Lane <tgl@sss.pgh.pa.us>
Re: Update timezone to C99 Peter Eisentraut <peter@eisentraut.org>
Peter Eisentraut  writes:
> On 12.11.25 19:02, Tom Lane wrote:
>> Hm, I've had "re-sync TZ code with upstream" on my TODO list for
>> several years now.  I believe there's been quite a bit of churn
>> upstream since tzcode2020d, some of it oriented towards this same
>> issue of code modernization.  Maybe we should try to sync with
>> a newer release while we're at it.

> My idea was to do this C99 adjustment first so that the differences to 
> upstream are reduced, which would hopefully simplify updating to that 
> newer code.

Fair enough.  I looked through the patch briefly and had a couple of
minor quibbles:

@@ -905,7 +906,7 @@ transtime(const int year, const struct rule *const rulep,
 			for (i = 1; i < rulep->r_week; ++i)
 			{
 				if (d + DAYSPERWEEK >=
-					mon_lengths[(int) leapyear][rulep->r_mon - 1])
+					mon_lengths[leapyear][rulep->r_mon - 1])
 					break;
 				d += DAYSPERWEEK;
 			}
@@ -915,7 +916,7 @@ transtime(const int year, const struct rule *const rulep,
 			 */
 			value = d * SECSPERDAY;
 			for (i = 0; i < rulep->r_mon - 1; ++i)
-				value += mon_lengths[(int) leapyear][i] * SECSPERDAY;
+				value += mon_lengths[leapyear][i] * SECSPERDAY;
 			break;
 	}

"leapyear" is bool, and I believe these casts-to-int were put in to
suppress compiler bleats about up-casting that to int.  This probably
dates from when we equated bool to char, and maybe it's moot now,
but I'm not sure.

@@ -47,12 +49,15 @@ typedef int64 zic_t;
 static ptrdiff_t const PTRDIFF_MAX = MAXVAL(ptrdiff_t, TYPE_BIT(ptrdiff_t));
 #endif
 
-/*
- * The type for line numbers.  In Postgres, use %d to format them; upstream
- * uses PRIdMAX but we prefer not to rely on that, not least because it
- * results in platform-dependent strings to be translated.
- */
-typedef int lineno_t;
+/* The minimum alignment of a type, for pre-C11 platforms.  */
+#if __STDC_VERSION__ < 201112
+#define _Alignof(type) offsetof(struct { char a; type b; }, b)
+#endif

Since we've dropped pre-C11 support, I wonder why we'd include this
upstream workaround for that.

			regards, tom lane


В списке pgsql-hackers по дате отправления
От: Bruce Momjian
Дата:
От: jian he
Дата:
FAQ