Subject: Re: CVS commit: src/lib/libkvm
To: Elad Efrat <elad@NetBSD.org>
From: Simon Burge <simonb@NetBSD.org>
List: source-changes
Date: 02/07/2007 14:19:05
Elad Efrat wrote:

> Andrew Doran wrote:
> 
> > Thanks for fixing this. Redefining kauth_cred_t in userland isn't the right
> > way to go about it though. Please change it so that kauth_cred_t is defined
> > in a non-installed header file under sys/sys.
> 
> I'd rather not. Having it exposed in sys/sys is just asking for people
> to access its members directly. Since libkvm must always be synchronized
> with the kernel when data-structures it cares about are modified, having
> a private copy in libkvm with the relevant members (note the lack of the
> specificdata reference) seems saner to me.

What about using a #define that makes it obvious that it shouldn't be
used as well?  For example, sys/sys/kauth_private.h that has:

	...

	/*
	 * This file contains a private definition for 'struct kauth_cred'
	 * that must only be used by kern/kern_auth.c and kmem grovellers
	 * like ps(1).
	 */

	#ifdef _KAUTH_CRED_PRIVATE
	struct kauth_cred {
		...
	}
	#endif /* _KAUTH_CRED_PRIVATE */

Anyone who obviously jumped through hoops to access it then deserves the
pain that everyone else would infliction upon them.

I agree with Andrew that have a duplicated definition in multiple C files
isn't a good thing - that way can only lead to confusion in the long term.

Cheers,
Simon.