On 16/01/2019 14:31, Heiko Schlittermann via Exim-users wrote:
Mike Tubby via Exim-users <[email protected]> (Mi 16 Jan 2019 14:58:07 CET):
All,

When compiling Exim 4.91 on Ubuntu 16.04.5 LTS I get a gcc warning in the
USR1 signal handler:

gcc exim.c
exim.c: In function ‘usr1_handler’:
exim.c:242:1: warning: ignoring return value of ‘write’, declared with
attribute warn_unused_result [-Wunused-result]
  (void)write(fd, process_info, process_info_len);
  ^
gcc expand.c
On a curent Debian this attribute isn't used for the write(2)
call. Hm. Intentional?

if (fd > 0) {
    ssize_t x;
    int y;

    x = write(fd, process_info, process_info_len);
    y = close(fd);
    }
242,243d252
< (void)write(fd, process_info, process_info_len);
< (void)close(fd);
While (void) write(…) seems to express clearly the intention,
I'm not sure why GCC does not understand it (anymore, not yet?)

Heiko, I completely agree with the intention of:

    (void)function(...)

and have used it many times myself over the years - I can only guess that the makefile with GCC 5.4.0 options turns back on something that makes this a warning again.

Here's the GCC version:

root@relay1:~/exim-4.91# gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Beside from your proposal using a dummy variable, I found another
way

     if (write(…));
     if (close(…));

But it needs a comment or a macro like

     #define IGNORE_RESULT(x) if(x)
     …
     IGNORE_RESULT(write(…))

Agreed but this is getting even more messy ;-)


Regards

Mike


--
Heiko

--
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to