calendar: Avoid warnings for new "%OB" format

Use the same code we have in gtk-3-22 to deal with strftime()
not supporting %OB, and avoid compiler warnings for non-literal
format strings.
This commit is contained in:
Matthias Clasen 2018-02-17 17:03:49 -05:00
parent cfcd0f888d
commit f42ebef9d1

View File

@ -634,6 +634,9 @@ gtk_calendar_class_init (GtkCalendarClass *class)
gtk_widget_class_set_css_name (widget_class, I_("calendar")); gtk_widget_class_set_css_name (widget_class, I_("calendar"));
} }
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
static void static void
gtk_calendar_init (GtkCalendar *calendar) gtk_calendar_init (GtkCalendar *calendar)
{ {
@ -644,6 +647,7 @@ gtk_calendar_init (GtkCalendar *calendar)
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
wchar_t wbuffer[100]; wchar_t wbuffer[100];
#else #else
static const char *month_format = NULL;
char buffer[255]; char buffer[255];
time_t tmp_time; time_t tmp_time;
#endif #endif
@ -703,8 +707,21 @@ gtk_calendar_init (GtkCalendar *calendar)
{ {
#ifndef G_OS_WIN32 #ifndef G_OS_WIN32
tmp_time=i*2764800; tmp_time=i*2764800;
/* Note: "%OB" works only in glibc >= 2.27 and in BSD and OS X. */ if (G_UNLIKELY (month_format == NULL))
strftime (buffer, sizeof (buffer), "%OB", gmtime (&tmp_time)); {
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); default_monthname[i] = g_locale_to_utf8 (buffer, -1, NULL, NULL, NULL);
#else #else
if (!GetLocaleInfoW (GetThreadLocale (), LOCALE_SMONTHNAME1 + i, if (!GetLocaleInfoW (GetThreadLocale (), LOCALE_SMONTHNAME1 + i,
@ -823,7 +840,8 @@ gtk_calendar_init (GtkCalendar *calendar)
calendar_compute_days (calendar); calendar_compute_days (calendar);
} }
#pragma GCC diagnostic pop
/**************************************** /****************************************
* Utility Functions * * Utility Functions *
****************************************/ ****************************************/