From 4990d4b8ffc4fc866d558b7dba727e7fa4e36844 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 31 Mar 2021 12:43:00 +0200 Subject: [PATCH] varlink: use two local flag variables to silence gcc warning MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit [59/655] Compiling C object src/shared/libsystemd-shared-248.a.p/varlink.c.o ../src/shared/varlink.c: In function ‘varlink_write’: ../src/shared/varlink.c:459:12: warning: ‘n’ may be used uninitialized in this function [-Wmaybe-uninitialized] 459 | if (n < 0) { | ^ ../src/shared/varlink.c: In function ‘varlink_process’: ../src/shared/varlink.c:541:12: warning: ‘n’ may be used uninitialized in this function [-Wmaybe-uninitialized] 541 | if (n < 0) { | ^ ../src/shared/varlink.c:486:17: note: ‘n’ was declared here 486 | ssize_t n; | ^ --- src/shared/varlink.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/shared/varlink.c b/src/shared/varlink.c index 6ed72075ba5..a271082ac33 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -448,13 +448,16 @@ static int varlink_write(Varlink *v) { assert(v->fd >= 0); /* We generally prefer recv()/send() (mostly because of MSG_NOSIGNAL) but also want to be compatible - * with non-socket IO, hence fall back automatically */ - if (!v->prefer_read_write) { + * with non-socket IO, hence fall back automatically. + * + * Use a local variable to help gcc figure out that we set 'n' in all cases. */ + bool prefer_write = v->prefer_read_write; + if (!prefer_write) { n = send(v->fd, v->output_buffer + v->output_buffer_index, v->output_buffer_size, MSG_DONTWAIT|MSG_NOSIGNAL); if (n < 0 && errno == ENOTSOCK) - v->prefer_read_write = true; + prefer_write = v->prefer_read_write = true; } - if (v->prefer_read_write) + if (prefer_write) n = write(v->fd, v->output_buffer + v->output_buffer_index, v->output_buffer_size); if (n < 0) { if (errno == EAGAIN) @@ -531,12 +534,13 @@ static int varlink_read(Varlink *v) { rs = v->input_buffer_allocated - (v->input_buffer_index + v->input_buffer_size); - if (!v->prefer_read_write) { + bool prefer_read = v->prefer_read_write; + if (!prefer_read) { n = recv(v->fd, v->input_buffer + v->input_buffer_index + v->input_buffer_size, rs, MSG_DONTWAIT); if (n < 0 && errno == ENOTSOCK) - v->prefer_read_write = true; + prefer_read = v->prefer_read_write = true; } - if (v->prefer_read_write) + if (prefer_read) n = read(v->fd, v->input_buffer + v->input_buffer_index + v->input_buffer_size, rs); if (n < 0) { if (errno == EAGAIN) -- 2.47.3