Subject: Re: FROMBCD coding style flaw
To: Martin Husemann <martin@duskware.de>
From: Reinoud Zandijk <reinoud@netbsd.org>
List: tech-kern
Date: 12/27/2005 21:15:54
--qDbXVdCdHGoSgWSk
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Sun, Nov 20, 2005 at 05:44:31PM +0100, Martin Husemann wrote:
> On Sun, Nov 20, 2005 at 04:16:41PM +0100, Anders Gavare wrote:
> > Basically, the FROMBCD macro is misused if it is given a function call
> > as an argument, instead of a plain variable.
>
> Maybe we could define a different version for DIAGNOSTIC or DEBUG kernels
> that takes the address of the arg, so it fails compilation for the broken
> usage - something like this (untested):
>
> #if defined(__GNUC__) && defined(DIAGNOSTIC)
> #define FROMBCD(x) ({ \
> __typeof(x) *v = &x; \
> (((*v) >> 4) * 10 + ((*v) & 0xf)); \
> }
> #else
> #define FROMBCD(x) (((x) >> 4) * 10 + ((x) & 0xf))
> #endif
Or maybe just create a small inline function?
Reinoud
--qDbXVdCdHGoSgWSk
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (NetBSD)
iQEVAwUBQ7Gg8oKcNwBDyKpoAQKNuAf/XxPYysqnTow/97vayxPAulMxfjmvs/0y
ll8nlVSqzBdefZKHiuWlhI8gXKCK9uuj/vsnVM/PeuXVyda8uB1c7GoUlh/5rob+
kD4Kkva8IjemLEpPxNkIThJcwf6VGv6jq+o666nEKYPclIb9VqJlU+Q//ONJDtD9
MiFvf9JvTn6F47N6WxjFeyDkRadhVA1Nkc0kwpbePtLEMi1qObwtpByPCYhXkxmg
nD4qExEl0WQu10vKGTFsks5TVNy/KTFuxEDksK64cmpIPg8kgtYjypKsnObrkL8O
Em5Um9HUu/6U6O4n98PkzFHIs7TnfUVR4MEyyuXb5k0lqwYEtc/NlQ==
=3xl8
-----END PGP SIGNATURE-----
--qDbXVdCdHGoSgWSk--