g_date_time_new_from_iso8601 was introduced in glib 2.56, which is quite
recent. To support build with older glibs, change the code to use
g_time_val_from_iso8601 instead, introduced in glib 2.12.
The code in question only uses this function to validate that the passed
string is ISO8601-compliant, it doesn't use the resulting time value.
The problem of g_time_val_from_iso8601 is that its result is not year
2038-safe on 32-bit systems. We can expect that by then, that function
will have been removed from glib, forcing us to update our code.
Change-Id: I2f4fdfce9020ecefcfb5d653a3885d343e49bd76
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1245
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
static
int lttng_validate_datetime(const char *datetime)
{
static
int lttng_validate_datetime(const char *datetime)
{
- GTimeZone *default_tz;
- GDateTime *gdatetime = NULL;
- default_tz = g_time_zone_new_utc();
- if (!default_tz) {
- BT_LOGD("Failed to allocate timezone");
- goto end;
- }
-
- gdatetime = g_date_time_new_from_iso8601(datetime, default_tz);
- if (!gdatetime) {
+ /*
+ * We are using g_time_val_from_iso8601, as the safer/more modern
+ * alternative, g_date_time_new_from_iso8601, is only available in
+ * glib >= 2.56, and this is sufficient for our use case of validating
+ * the format.
+ */
+ if (!g_time_val_from_iso8601(datetime, &tv)) {
BT_LOGD("Couldn't parse datetime as iso8601: date=\"%s\"", datetime);
goto end;
}
BT_LOGD("Couldn't parse datetime as iso8601: date=\"%s\"", datetime);
goto end;
}
- if (default_tz) {
- g_time_zone_unref(default_tz);
- default_tz = NULL;
- }
-
- if (gdatetime) {
- g_date_time_unref(gdatetime);
- gdatetime = NULL;
- }
-