summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Edmundson <kde@davidedmundson.co.uk>2022-09-13 13:06:09 +0100
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-09-14 03:54:28 +0900
commit38429cb1e3f37c298aa20ab25d644c87a23dd2e2 (patch)
treef4e5cf42334039b1ded824ab313ab6fc250aed4c /src
parentd01d9197f50667491eab287d1f0f1e62c85e1e50 (diff)
downloadsystemd-38429cb1e3f37c298aa20ab25d644c87a23dd2e2.tar.gz
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".
Diffstat (limited to 'src')
-rw-r--r--src/xdg-autostart-generator/test-xdg-autostart.c3
-rw-r--r--src/xdg-autostart-generator/xdg-autostart-service.c17
2 files changed, 11 insertions, 9 deletions
diff --git a/src/xdg-autostart-generator/test-xdg-autostart.c b/src/xdg-autostart-generator/test-xdg-autostart.c
index e18c918daa..7866d3a7b4 100644
--- a/src/xdg-autostart-generator/test-xdg-autostart.c
+++ b/src/xdg-autostart-generator/test-xdg-autostart.c
@@ -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;
}
diff --git a/src/xdg-autostart-generator/xdg-autostart-service.c b/src/xdg-autostart-generator/xdg-autostart-service.c
index 75b6a62a97..56cc4ceeb9 100644
--- a/src/xdg-autostart-generator/xdg-autostart-service.c
+++ b/src/xdg-autostart-generator/xdg-autostart-service.c
@@ -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;
}