summaryrefslogtreecommitdiffstats
path: root/bus/desktop-file.c
diff options
context:
space:
mode:
authorJohn (J5) Palmieri <johnp@redhat.com>2005-11-30 20:14:30 +0000
committerJohn (J5) Palmieri <johnp@redhat.com>2005-11-30 20:14:30 +0000
commit982592992055de23aa7fee61a72d7c71228c1469 (patch)
treece523ec6b102113f65048db218fc90f33aca6660 /bus/desktop-file.c
parent0ca96ec548a6e4a1e39429f3c0480adfe7e2eab8 (diff)
* bus/desktop-file.c (parse_key_value): Ignore locales allowing
the parser to continue instead of returning error (bus_desktop_file_load): Do not free parser data when parse_section_start or parse_key_value fails because it was already freed by parser_free (patch from Carlos Garcia Campos <carlosgc at gnome.org>)
Diffstat (limited to 'bus/desktop-file.c')
-rw-r--r--bus/desktop-file.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/bus/desktop-file.c b/bus/desktop-file.c
index 5ba99832..fc985122 100644
--- a/bus/desktop-file.c
+++ b/bus/desktop-file.c
@@ -460,7 +460,7 @@ parse_key_value (BusDesktopFileParser *parser, DBusError *error)
if (!_dbus_string_find (&parser->data, parser->pos, "\n", &line_end))
line_end = parser->len;
-
+
p = parser->pos;
key_start = p;
while (p < line_end &&
@@ -476,6 +476,17 @@ parse_key_value (BusDesktopFileParser *parser, DBusError *error)
}
/* We ignore locales for now */
+ if (p < line_end && _dbus_string_get_byte (&parser->data, p) == '[')
+ {
+ if (line_end == parser->len)
+ parser->pos = parser->len;
+ else
+ parser->pos = line_end + 1;
+
+ parser->line_num += 1;
+
+ return TRUE;
+ }
/* Skip space before '=' */
while (p < line_end && _dbus_string_get_byte (&parser->data, p) == ' ')
@@ -647,14 +658,13 @@ bus_desktop_file_load (DBusString *filename,
parser.pos = 0;
parser.len = _dbus_string_get_length (&parser.data);
parser.current_section = -1;
-
+
while (parser.pos < parser.len)
{
if (_dbus_string_get_byte (&parser.data, parser.pos) == '[')
{
if (!parse_section_start (&parser, error))
{
- _dbus_string_free (&parser.data);
return NULL;
}
}
@@ -665,7 +675,6 @@ bus_desktop_file_load (DBusString *filename,
{
if (!parse_key_value (&parser, error))
{
- _dbus_string_free (&parser.data);
return NULL;
}
}