mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-16 12:28:48 +02:00
gtimezone: support POSIX 1003.1-2001 quoted TZ abbreviations
TZ strings like '<-03>3' were introduced in POSIX 1003.1-2001 and are currently specified in: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03
This commit is contained in:
parent
21b000356e
commit
bc78f0ad27
@ -1366,14 +1366,24 @@ parse_identifier_boundary (gchar **pos, TimeZoneDate *target)
|
|||||||
static gboolean
|
static gboolean
|
||||||
set_tz_name (gchar **pos, gchar *buffer, guint size)
|
set_tz_name (gchar **pos, gchar *buffer, guint size)
|
||||||
{
|
{
|
||||||
|
gboolean quoted = **pos == '<';
|
||||||
gchar *name_pos = *pos;
|
gchar *name_pos = *pos;
|
||||||
guint len;
|
guint len;
|
||||||
|
|
||||||
/* Name is ASCII alpha (Is this necessarily true?) */
|
if (quoted)
|
||||||
|
{
|
||||||
|
name_pos++;
|
||||||
|
do
|
||||||
|
++(*pos);
|
||||||
|
while (g_ascii_isalnum (**pos) || **pos == '-' || **pos == '+');
|
||||||
|
if (**pos != '>')
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
while (g_ascii_isalpha (**pos))
|
while (g_ascii_isalpha (**pos))
|
||||||
++(*pos);
|
++(*pos);
|
||||||
|
|
||||||
/* Name should be three or more alphabetic characters */
|
/* Name should be three or more characters */
|
||||||
if (*pos - name_pos < 3)
|
if (*pos - name_pos < 3)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -1381,6 +1391,7 @@ set_tz_name (gchar **pos, gchar *buffer, guint size)
|
|||||||
/* name_pos isn't 0-terminated, so we have to limit the length expressly */
|
/* name_pos isn't 0-terminated, so we have to limit the length expressly */
|
||||||
len = *pos - name_pos > size - 1 ? size - 1 : *pos - name_pos;
|
len = *pos - name_pos > size - 1 ? size - 1 : *pos - name_pos;
|
||||||
strncpy (buffer, name_pos, len);
|
strncpy (buffer, name_pos, len);
|
||||||
|
*pos += quoted;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user