Is it considered to be ok to not check the return code of close(2) in base?
Rodney W. Grimes
freebsd-rwg at pdx.rh.CN85.dnsmgr.net
Mon Jan 1 03:05:52 UTC 2018
> Poul-Henning Kamp phk at phk.freebsd.dk wrote on
> Sat Dec 30 20:35:35 UTC 2017 :
>
> > But if you just close a file, and you're 100% sure that will work,
> > you should write it as:
> >
> > assert(close(fd) == 0);
> >
> > To tell the rest of us about your assumption and your confidence in it.
>
> Quoting the FreeBSD assert man page:
>
> QUOTE
> The assert() macro may be removed at compile time by defining NDEBUG as a
> macro (e.g., by using the cc(1) option -DNDEBUG).
> ENDQUOTE
>
> This makes required-actions inside asserts dangerous,
> at least without guarantees that NDEBUG will be
> undefined. Trying to guarantee that NDEBUG will be
> undefined would generally be a bad idea.
>
> So,
>
> assert(close(fd) == 0);
>
> is a bad coding practice in my view.
Less bad than either of
(void)close(fd));
close(fd);
--
Rod Grimes rgrimes at freebsd.org
More information about the freebsd-hackers
mailing list