12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- From: Rafal Luzynski <digitalfreak@lingonborough.com>
- Date: Sat, 10 Feb 2018 14:07:56 +0100
- Subject: calendar: Use the new "%OB" format if supported
- Due to the recent changes introduced in glibc 2.27 "%OB" is the
- correct format to obtain a month name as used in the calendar
- header. The same rule has been working in BSD family (including
- OS X) since 1990s. This simple hack checks whether "%OB" is supported
- at runtime and uses it if it is, falls back to the old "%B" otherwise.
- Bug: #9
- Origin: upstream, 2.24.33, commit:2ea743ab466703091a44a74e1a4ac7db983c0bca
- ---
- gtk/gtkcalendar.c | 19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
- diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
- index 2dd68d6..28baba1 100644
- --- a/gtk/gtkcalendar.c
- +++ b/gtk/gtkcalendar.c
- @@ -689,6 +689,7 @@ gtk_calendar_init (GtkCalendar *calendar)
- #ifdef G_OS_WIN32
- wchar_t wbuffer[100];
- #else
- + static const char *month_format = NULL;
- char buffer[255];
- time_t tmp_time;
- #endif
- @@ -714,7 +715,7 @@ gtk_calendar_init (GtkCalendar *calendar)
- {
- #ifndef G_OS_WIN32
- tmp_time= (i+3)*86400;
- - strftime ( buffer, sizeof (buffer), "%a", gmtime (&tmp_time));
- + strftime (buffer, sizeof (buffer), "%a", gmtime (&tmp_time));
- default_abbreviated_dayname[i] = g_locale_to_utf8 (buffer, -1, NULL, NULL, NULL);
- #else
- if (!GetLocaleInfoW (GetThreadLocale (), LOCALE_SABBREVDAYNAME1 + (i+6)%7,
- @@ -730,7 +731,21 @@ gtk_calendar_init (GtkCalendar *calendar)
- {
- #ifndef G_OS_WIN32
- tmp_time=i*2764800;
- - strftime ( buffer, sizeof (buffer), "%B", gmtime (&tmp_time));
- + if (G_UNLIKELY (month_format == NULL))
- + {
- + buffer[0] = '\0';
- + month_format = "%OB";
- + strftime (buffer, sizeof (buffer), month_format, gmtime (&tmp_time));
- + /* "%OB" is not supported in Linux with glibc < 2.27 */
- + if (!strcmp (buffer, "%OB") || !strcmp (buffer, "OB") || !strcmp (buffer, ""))
- + {
- + month_format = "%B";
- + strftime (buffer, sizeof (buffer), month_format, gmtime (&tmp_time));
- + }
- + }
- + else
- + strftime (buffer, sizeof (buffer), month_format, gmtime (&tmp_time));
- +
- default_monthname[i] = g_locale_to_utf8 (buffer, -1, NULL, NULL, NULL);
- #else
- if (!GetLocaleInfoW (GetThreadLocale (), LOCALE_SMONTHNAME1 + i,
|