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);
> >                 }

Reply via email to