Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Aug 1998 09:50:13 -0700
From:      John Polstra <jdp@polstra.com>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        dmm125@bellatlantic.net, bugs@FreeBSD.ORG
Subject:   Re: error in libcompat (2.2.7) 
Message-ID:  <199808271650.JAA12805@austin.polstra.com>
In-Reply-To: Your message of "Thu, 27 Aug 1998 17:57:23 %2B1000." <199808270757.RAA07536@godzilla.zeta.org.au> 

next in thread | previous in thread | raw e-mail | index | archive | help
> >True, that's a bug.  I don't think it has any actual effect, since
> >the function definition has the old pre-ANSI form:
> >
> >    key_t
> >    ftok(path, id)
> >	    const char *path;
> >	    char id;
> >
> >which means that "id" is assumed to be passed as an int, even though
> >only the low-order byte of it is used.  But it should be fixed.
> 
> Not a bug.  The prototype must declare the arg as an int to match the
> old-style-but-still-ANSI definition.  The definition uses char for
> historical reasons.  Changing it would be incompatible.  See rev.1.4
> of ftok.3 for some notes about this.

I don't agree.  If the prototype says it's an int, then it should be
declared as int in the definition too.  The definition should look
like this:

key_t
ftok(path, id)
	const char *path;
	int id;
{
	struct stat st;

	if (stat(path, &st) < 0)
		return (key_t)-1;

	return (key_t) ((char)id << 24 | (st.st_dev & 0xff) << 16 | (st.st_ino & 0xffff));
}

Here, I changed the type of "id" to int, and added a (char) cast in
front of its only use.

John

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199808271650.JAA12805>