Questions about iter check in profile_iterator()

Will Fiveash will.fiveash at oracle.com
Wed Jan 14 17:37:18 EST 2015


On Wed, Jan 14, 2015 at 03:45:01PM -0600, Will Fiveash wrote:
> On Mon, Jan 12, 2015 at 10:40:39PM -0500, Greg Hudson wrote:
> > 
> > On 01/12/2015 08:13 PM, Will Fiveash wrote:
> > > So in the profile_iterator call to profile_node_iterator() the
> > > &iter->idata arg is iter_p for profile_node_iterator?  Seems odd to me.
> > 
> > I don't see what is odd about that.  iter->idata holds the node iterator
> > state.
> 
> Eh, looking at the code more I see what's going on so nevermind.

And looking more I think that in the public header there should be:

struct prof_iter;
typedef struct prof_iter *prof_iter;

and the profile_iterator declaration:

profile_iterator(void **iter_p,...

should instead be:

profile_iterator(prof_iter *iter_p,...
{

  struct profile_iterator *iter = (struct profile_iterator *) *iter_p;

etc...  This would allow the compiler type checking to catch caller
errors like:

void*      iterator = NULL;
...
profile_iterator (iterator, &realm_name, &dummy_value);

which should be:

profile_iterator (&iterator, &realm_name, &dummy_value);
                  ^

Those type of calling errors can currently slip by the compiler.

-- 
Will Fiveash
Oracle Solaris Software Engineer


More information about the krbdev mailing list