1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-27 01:55:22 +03:00

xdg-autostart-service: Use common boolean parser

Technically the desktop entry specification says value should be the
string "true" or "false". Pragmatically every desktop has their own
parsing rules which are typically less strict on how to interpret other
values.

This caused some regressions downstream when we switched to the
xdg-autostart-generator where existing handmade files contained values
with "True" or "False".
This commit is contained in:
David Edmundson 2022-09-13 13:06:09 +01:00 committed by Yu Watanabe
parent d01d9197f5
commit 38429cb1e3
2 changed files with 11 additions and 9 deletions

View File

@ -48,6 +48,8 @@ static const char* const xdg_desktop_file[] = {
("[Desktop Entry]\n"
"Hidden=\t true\n"),
("[Desktop Entry]\n"
"Hidden=\t True\n"),
};
static void test_xdg_desktop_parse_one(unsigned i, const char *s) {
@ -75,6 +77,7 @@ static void test_xdg_desktop_parse_one(unsigned i, const char *s) {
assert_se(streq(service->exec_string, "a"));
break;
case 2:
case 3:
assert_se(service->hidden);
break;
}

View File

@ -8,15 +8,16 @@
#include "conf-parser.h"
#include "escape.h"
#include "unit-name.h"
#include "path-util.h"
#include "fd-util.h"
#include "generator.h"
#include "log.h"
#include "nulstr-util.h"
#include "parse-util.h"
#include "path-util.h"
#include "specifier.h"
#include "string-util.h"
#include "nulstr-util.h"
#include "strv.h"
#include "unit-name.h"
XdgAutostartService* xdg_autostart_service_free(XdgAutostartService *s) {
if (!s)
@ -74,18 +75,16 @@ static int xdg_config_parse_bool(
void *userdata) {
bool *b = ASSERT_PTR(data);
int r;
assert(filename);
assert(lvalue);
assert(rvalue);
if (streq(rvalue, "true"))
*b = true;
else if (streq(rvalue, "false"))
*b = false;
else
r = parse_boolean(rvalue);
if (r < 0)
return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), "Invalid value for boolean: %s", rvalue);
*b = r;
return 0;
}