udp_send: Silence gcc warning.
authorAndre Noll <maan@systemlinux.org>
Thu, 24 Mar 2011 12:05:49 +0000 (13:05 +0100)
committerAndre Noll <maan@systemlinux.org>
Thu, 24 Mar 2011 12:05:49 +0000 (13:05 +0100)
Ubuntu Lucid's gcc-4.3.3 emits the following warning about not checking
the return value of write() even if the result is casted to void.

udp_send.c: In function ‘udp_close_target’:
udp_send.c:65: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result

The usual approach to store the return value in a dummy variable is
not optimal because the upcoming gcc-4.6 will warn that the variable
is set but otherwise unused.

Likely there are more places in the paraslash code which have the same
problem, so this patch introduce the do_nothing macro in para.h which,
creatively enough, does nothing. The new macro is employed like

if (write(...))
do_nothing;

This gets rid of the warning on Lucid and does not give new warning
on gcc-4.6.

para.h
udp_send.c

diff --git a/para.h b/para.h
index 29c5c2b..08eb0ee 100644 (file)
--- a/para.h
+++ b/para.h
@@ -221,6 +221,9 @@ _static_inline_ long int para_random(unsigned max)
 /** Used to avoid a shortcoming in vim's syntax highlighting. */
 #define EMBRACE(...) { __VA_ARGS__}
 
+/** A nice cup of STFU for Mr gcc. */
+#define do_nothing do {/* nothing */} while (0)
+
 /**
  * The sample formats supported by paraslash.
  *
index 4fb10b4..b4494eb 100644 (file)
@@ -57,8 +57,13 @@ static void udp_close_target(struct sender_client *sc)
        const char *buf;
        size_t len = vss_get_fec_eof_packet(&buf);
 
-       /* ignore return value, closing the target anyway. */
-       (void)write(sc->fd, buf, len);
+       /*
+        * Ignore the return value of wirte() since we are closing the target
+        * anyway. The sole purpose of the "do_nothing" statement is to silence
+        * gcc.
+        */
+       if (write(sc->fd, buf, len))
+               do_nothing;
 }
 
 static void udp_delete_target(struct sender_client *sc, const char *msg)