[comp.sys.isis] Manual

ken@gvax.cs.cornell.edu (Ken Birman) (10/05/89)

On the subject of documentation, Micah Beck observes that:

>> In section 2.5 of the ISIS manual, the handling of group and process
>> addresses as arguments is quite inconsistent.  pg_delete() is shown
>> as taking an arg of type *address, whereas pg_leave is shown as taking
>> an arg of type address.  Should ALL address args be pointers in this
>> section, or there something more subtle going on?

>> /micah
>> PS. pg_leave and pg_client have descriptions of an argument named gname
>> although they in fact take group addresses (pointers to?) as arguments.
>> pp61-62

In ISIS V1.0 and V1.1, we sometimes passed address arguments by value.
At present, all addresses, including group addresses, are passed as
pointers, and returned as pointers by routines such as pg_lookup().
The manual section to which Micah refers seems not to have been completely
updated, and will be cleaned up for ISIS V2.0.  

The rule is that NOTHING takes addresses by value anymore.  

The execeptions to the rule are that broadcast routines are passed an array
of addresses (an array of ``address values'') when the "l" option
is specified.  Notice, however, that since C passes arrays by pointer,
the argument seen by ISIS is of type address* in this case.  Also, the
routine ADDRESS(site,inc,pid,entry) returns an address by value.

The reason for this change is that C compilers pass structures by value
in inconsistent ways, and that "varargs(3)" is broken on most UNIX systems
when applied to structures passed by value.

Ken

Ken