On Wed, May 07, 2014 at 10:58:03PM +0200, Ingo Schwarze wrote:
> Hi Fritjof,
>
> Fritjof Bornebusch wrote on Wed, May 07, 2014 at 10:32:05PM +0200:
>
> > there are a few void casts in rcs. But I have a question about that.
> > Are these casts really necessary?
>
> No, they are not necessary.
>
> > I've read that the compiler warns, because of unused variables.
> > But no compiler warnings about that on amd64.
>
> Usually, you don't choose your style to please static analysis tools -
> there are too many of them, of too varying quality and signal-to-noise
> ratio, to please them all.
>
> Rather, it makes sense to tune static analysis tools, including
> compilers, to warn about dangerous style, but to not warn about style
> that is merely a matter of taste.
>
> That said, for functions that usually require checking of return
> values, the void cast can be used to indicate "this call was audited,
> and ignoring the return value is considered safe, either because
> this specific call cannot actually fail, or because failure does
> not need explicit handling at this point". Typical functions where
> this makes sense are snprintf(3), strlcpy(3), strlcat(3). So i
> clearly wouldn't remove the cast from strftime() unless you have
> reason to assume that no proper audit was done, or this is broken
> and needs fixing. In this case, the buffer is large enough, so
> the cast should stay.
>
> On the other hand, on functions that hardly ever require checking
> the return code, casting to void is pointless, so i tend to
> remove such casts when editing nearby code. A typical example
> is "(void)close(fd);" which is rarely more helpful than
> just "close(fd);".
>
> In this case, the rcsnum_tostr() return value can't be used for error
> checking in the first place, that function calls errx(3) on failure,
> so when editing nearby code, i'd probably remove that cast. But it
> doesn't warrant a commit on it's own imho.
>
> Yours,
> Ingo
>
I see, thank you for the explanations.
It was just for me to make it clear when (void) is used.
fritjof
>
> > Index: rlog.c
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/rcs/rlog.c,v
> > retrieving revision 1.67
> > diff -u -p -r1.67 rlog.c
> > --- rlog.c 7 Jan 2014 14:08:16 -0000 1.67
> > +++ rlog.c 7 May 2014 20:24:37 -0000
> > @@ -517,7 +517,7 @@ rlog_rev_print(struct rcs_delta *rdp)
> > fmt = "%Y/%m/%d %H:%M:%S";
> > }
> >
> > - (void)strftime(timeb, sizeof(timeb), fmt, &t);
> > + strftime(timeb, sizeof(timeb), fmt, &t);
> >
> > printf("\ndate: %s; author: %s; state: %s;", timeb,
> > rdp->rd_author,
> > rdp->rd_state);
> > @@ -556,7 +556,7 @@ rlog_rev_print(struct rcs_delta *rdp)
> > TAILQ_FOREACH(rb, &(rdp->rd_branches), rb_list) {
> > RCSNUM *branch;
> > branch = rcsnum_revtobr(rb->rb_num);
> > - (void)rcsnum_tostr(branch, numb, sizeof(numb));
> > + rcsnum_tostr(branch, numb, sizeof(numb));
> > printf(" %s;", numb);
> > rcsnum_free(branch);
> > }