Files
sablink-distro/sys-apps/systemd/files/233-format-warnings.patch
T
Ettore Di Giacinto 8729be45cb sys-apps/systemd: Bump to 234-r4
* Drop old

Package-Manager: Portage-2.3.5, Repoman-2.3.2
2017-09-10 14:24:58 +02:00

85 lines
3.7 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From 3e7d14d78c4d15ec7789299216cbf5c58e61547b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 3 Jun 2017 05:41:17 -0400
Subject: [PATCH] sd-bus: silence format warnings in kdbus code (#6072)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The code is mostly correct, but gcc is trying to outsmart us, and emits a
warning for a "llu vs lu" mismatch, even though they are the same size (on alpha):
src/libsystemd/sd-bus/bus-control.c: In function kernel_get_list:
src/libsystemd/sd-bus/bus-control.c:267:42: error: format %llu expects argument of type long long unsigned int, but argument 3 has type __u64 {aka long unsigned int} [-Werror=format=]
if (asprintf(&n, ":1.%llu", name->id) < 0) {
^
src/libsystemd/sd-bus/bus-control.c: In function bus_get_name_creds_kdbus:
src/libsystemd/sd-bus/bus-control.c:714:47: error: format %llu expects argument of type long long unsigned int, but argument 3 has type __u64 {aka long unsigned int} [-Werror=format=]
if (asprintf(&c->unique_name, ":1.%llu", conn_info->id) < 0) {
^
This is hard to work around properly, because kdbus.h uses __u64 which is
defined-differently-despite-being-the-same-size then uint64_t. Thus the simple
solution of using %PRIu64 fails on amd64:
src/libsystemd/sd-bus/bus-control.c:714:47: error: format %lu expects argument of type long unsigned int, but argument 3 has type __u64 {aka long long unsigned int} [-Werror=format=]
if (asprintf(&c->unique_name, ":1.%"PRIu64, conn_info->id) < 0) {
^~~~~~
Let's just avoid the whole issue for now by silencing the warning.
After the next release, we should just get rid of the kdbus code.
Fixes #5561.
---
src/libsystemd/sd-bus/bus-control.c | 6 ++++++
src/libsystemd/sd-bus/bus-kernel.c | 2 ++
2 files changed, 8 insertions(+)
diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c
index 9e58ffbd8..303ae0f23 100644
--- a/src/libsystemd/sd-bus/bus-control.c
+++ b/src/libsystemd/sd-bus/bus-control.c
@@ -264,10 +264,13 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
if ((flags & KDBUS_LIST_UNIQUE) && name->id != previous_id && !(name->flags & KDBUS_HELLO_ACTIVATOR)) {
char *n;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat"
if (asprintf(&n, ":1.%llu", name->id) < 0) {
r = -ENOMEM;
goto fail;
}
+#pragma GCC diagnostic pop
r = strv_consume(x, n);
if (r < 0)
@@ -711,10 +714,13 @@ int bus_get_name_creds_kdbus(
}
if (mask & SD_BUS_CREDS_UNIQUE_NAME) {
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat"
if (asprintf(&c->unique_name, ":1.%llu", conn_info->id) < 0) {
r = -ENOMEM;
goto fail;
}
+#pragma GCC diagnostic pop
c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
}
diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c
index c82caeb3f..ca6aee7c0 100644
--- a/src/libsystemd/sd-bus/bus-kernel.c
+++ b/src/libsystemd/sd-bus/bus-kernel.c
@@ -51,6 +51,8 @@
#include "user-util.h"
#include "util.h"
+#pragma GCC diagnostic ignored "-Wformat"
+
#define UNIQUE_NAME_MAX (3+DECIMAL_STR_MAX(uint64_t))
int bus_kernel_parse_unique_name(const char *s, uint64_t *id) {
--
2.13.2