Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: using "(void)" casts to purposefully ignore return values
On Fri, Aug 26, 2011 at 10:27:23AM +0930, Brett Lymn wrote:
> > And again, if you pass the same strings to strcat, demons fly out of
> > your nose. None of the string functions are meant to accept invalid
> > input;
>
> No arugment there - but there is some belief that strl* magically make
> it ok and that you cannot, ever, screw up.
Uh... not that I've seen/heard. There are plenty of quite obvious
counterexamples:
e.g.
strlcpy(NULL, str, len);
or
void foo(char *s) {
strlcat(s, "qwerty", sizeof(s));
}
or
strlcat(buf1, buf2, sizeof(buf2));
> What I am saying is that attitude is wrong.
Obviously.
> At least strlcat will tell you that you have
> something wrong if the return value is checked, and that is the crux of
> my objection, why I spoke up in the first place - it is not always ok to
> ignore the returns from strl* because this may rise up and bit you by
> producing a string that is not nul terminated.
No, it cannot, unless you pass it an invalid string in the first place.
> > I don't see why the man page even bothers to define what
> > happens in this case. Arguably, it shouldn't.
>
> No, it is properly documenting the interface. Plenty of our man pages
> have something along the lines of "passing this function crap will lead
> to undefined results".
Yes, precisely: it should say "if dst is not null-terminated, the
behavior is undefined." And not attempt to define it.
--
David A. Holland
dholland%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index