1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-03 01:17:45 +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".

(cherry picked from commit 38429cb1e3)
(cherry picked from commit c40fa78968)
This commit is contained in:
David Edmundson 2022-09-13 13:06:09 +01:00 committed by Zbigniew Jędrzejewski-Szmek
parent 99a630479b
commit 01ea6ba5f1
2 changed files with 12 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(unsigned i, const char *s) {
@ -75,6 +77,7 @@ static void test_xdg_desktop_parse(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,17 @@
#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 "user-util.h"
#include "unit-name.h"
XdgAutostartService* xdg_autostart_service_free(XdgAutostartService *s) {
if (!s)
@ -74,19 +76,17 @@ static int xdg_config_parse_bool(
void *userdata) {
bool *b = data;
int r;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
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;
}