Subject: Re: Bluetooth protocol code
To: None <email@example.com>
From: Valeriy E. Ushakov <firstname.lastname@example.org>
Date: 12/20/2005 09:38:58
On Mon, Dec 19, 2005 at 11:52:22 -0800, Bill Studenmund wrote:
> > > 1) please use ANSI function declarations;
> > on all functions? (grumble grumble..)
> The problem is that K&R prototypes won't work right if we pass in a
> parameter that's larger than an int. Like a long or a pointer on an LP64
> In such a case, the caller will turn the parameter into an int, truncating
> it. Worse yet, the caller will then pack other parameters in, not leaving
> enough space for what the caller will expect the parameter to be. Thus the
> callee will see two parameters mixed together in what it thinks is one
> parameter (by our style guide, it will get the parameters right), and a
> parameter at the end will be totally uninitialized.
> This behavior is why we're moving away from K&R parameters & prototypes.
Disclaimer: I haven't had my coffee yet.
I think you are confusing it with a different issue.
What you describe would happen if there's no prototype in scope, which
is impossible in our code, as we compile with a set of options that
The issue can arise with short integral types that are passed "as-is"
for ANSI, and that are subject to widening conversion for K&R. To hit
this bug, you also need to be on a platform, that passes e.g. shorts
and ints diffrently, i.e. it should pass them via stack, and should
not perform the widening *always* (as e.g. i386 does).
email@example.com | Zu Grunde kommen
http://snark.ptc.spbu.ru/~uwe/ | Ist zu Grunde gehen