From 09ae8b5590fdc7bdccec8b2d43a9c2ec11fafff4 Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Thu, 17 Mar 2016 16:31:49 +0300 Subject: [PATCH 1/2] Add a bus_configuration_file_load helper function The configuration file format isn't as strict as a desktop file. Specifically, the key can have an underscore character, which is what the consolekit database needs. --- bus/desktop-file.c | 22 ++++++++++++++++------ bus/desktop-file.h | 3 +++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/bus/desktop-file.c b/bus/desktop-file.c index bfeb72e..cb8bb4a 100644 --- a/bus/desktop-file.c +++ b/bus/desktop-file.c @@ -450,12 +450,13 @@ parse_section_start (BusDesktopFileParser *parser, DBusError *error) } static dbus_bool_t -parse_key_value (BusDesktopFileParser *parser, DBusError *error) +parse_key_value (BusDesktopFileParser *parser, dbus_bool_t strict, DBusError *error) { int line_end, eol_len; int key_start, key_end; int value_start; int p; + int valid_key; char *value, *tmp; DBusString key; BusDesktopFileLine *line; @@ -464,11 +465,12 @@ parse_key_value (BusDesktopFileParser *parser, DBusError *error) if (!_dbus_string_find_eol (&parser->data, parser->pos, &line_end, &eol_len)) line_end = parser->len; - + + valid_key = strict ? VALID_KEY_CHAR : VALID_LOCALE_CHAR; p = parser->pos; key_start = p; while (p < line_end && - (valid[_dbus_string_get_byte (&parser->data, p)] & VALID_KEY_CHAR)) + (valid[_dbus_string_get_byte (&parser->data, p)] & valid_key)) p++; key_end = p; @@ -620,8 +622,9 @@ dump_desktop_file (BusDesktopFile *file) #endif BusDesktopFile* -bus_desktop_file_load (DBusString *filename, - DBusError *error) +bus_configuration_file_load (DBusString *filename, + dbus_bool_t strict, + DBusError *error) { DBusString str; BusDesktopFileParser parser; @@ -696,7 +699,7 @@ bus_desktop_file_load (DBusString *filename, } else { - if (!parse_key_value (&parser, error)) + if (!parse_key_value (&parser, strict, error)) { return NULL; } @@ -708,6 +711,13 @@ bus_desktop_file_load (DBusString *filename, return parser.desktop_file; } +BusDesktopFile* +bus_desktop_file_load (DBusString *filename, + DBusError *error) +{ + return bus_configuration_file_load (filename, TRUE, error); +} + static BusDesktopFileSection * lookup_section (BusDesktopFile *desktop_file, const char *section_name) diff --git a/bus/desktop-file.h b/bus/desktop-file.h index e405625..d964873 100644 --- a/bus/desktop-file.h +++ b/bus/desktop-file.h @@ -40,6 +40,9 @@ typedef struct BusDesktopFile BusDesktopFile; BusDesktopFile *bus_desktop_file_load (DBusString *filename, DBusError *error); +BusDesktopFile *bus_configuration_file_load (DBusString *filename, + dbus_bool_t strict, + DBusError *error); void bus_desktop_file_free (BusDesktopFile *file); dbus_bool_t bus_desktop_file_get_raw (BusDesktopFile *desktop_file, -- 2.7.3