On Sep 22, 2003, at 1:31 AM, Motonori Shindo wrote:
Since you changed the signature of dissect_vendor_specific_ie(), you'd
also have to change packet-eapol.c which makes use of this
function.
Sigh.
That's why this is not a good idea:
% egrep dissect_vendor_specific_ie packet-eapol.c
extern void dissect_vendor_specific_ie(proto_tree * tree, tvbuff_t *
tvb,
Because that was separately declared in "packet-eapol.c", rather than
declared in a header file included both by "packet-eapol.c" and
"packet-ieee80211.c", the function prototype didn't actually provide
all the type checking it could - the compiler couldn't check whether
the definition in "packet-ieee80211.c" matched the use in
"packet-eapol.c".
Declarations of external functions shouldn't be put in ".c" files, they
should be put in a ".h" file included by the module that declares the
function and the modules that use it. (If there's only one module that
uses it, and that module also declares it, and it's not being exported
to plugins, it shouldn't *be* an external function, it should be
static.)
Will you take care of it?
I've checked in a change to make "dissect_vendor_specific_ie()" private
to "packet-ieee80211.c", and to have "packet-ieee80211.c" export -
complete with a declaration in "packet-ieee80211.h" - a routine to
dissect a set of tagged parameters, and made the EAPOL dissector call
that routine (which means that if the 802.11 dissector handles the RSN
Information Element from 802.11i draft 3.0, the EAPOL dissector will do
so as well, without having to be changed).