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.
/** 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.
*
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)