Wireshark mailing list archives

Re: Regenerating packet-parlay.c


From: Jaap Keuter <jaap.keuter () xs4all nl>
Date: Fri, 1 May 2020 07:34:30 +0200


On 1 May 2020, at 04:13, Luke Mewburn <luke () mewburn net> wrote:

On 20-04-30 20:30, Jaap Keuter wrote:
 | On 4/30/20 2:41 AM, Luke Mewburn wrote:
 | > On 20-04-30 10:35, Luke Mewburn wrote:
 | >   | As to the problem; looking at the use of .keys() in wireshark_gen.py,
 | >   | there's a couple of places where the code is either:
 | >   | - get_intlist(), sorted:
 | >   |      ret = list(ex_hash.keys())
 | >   |      ret.sort()
 | >   |      return ret
 | >   | - get_exceptionList(), unsorted:
 | >   |      ret = list(ex_hash.keys())
 | >   |      return ret
 | >   | 
 | >   | Both could be simplified to an ordered result using sorted():
 | >   |      ret = sorted(ex_hash.keys())
 | >   |      return ret
 | > 
 | > I actually meant:
 | >  ret = sorted(ex_hash)
 | >  return ret
 | > 
 | > Because sorted() takes an iterable.
 | > That seems to work in both python2 and python3.
 | > 
 | > 
 | > Luke.
 | 
 | Hi,
 | 
 | tried this, but: in get_exceptionList
 | ret = sorted(ex_hash.keys())
 | TypeError: '<' not supported between instances of 'Exception' and 'Exception'

I've reproduced the problem; the correct invocation is:
      ret = sorted(ex_hash, key=lambda ex: ex.identifier())
      return ret


However, looking at the code some more, it appears that generally
wireshark_gen.py generates code in the order the operations are defined;
the exception (hah!) is the user exceptions.

If I instead add at the top
      import collections
and change get_exceptionList() from
      ex_hash = {}  # holds a hash of unique exceptions.
to
      ex_hash = collections.OrderedDict()  # holds a hash of unique exceptions.

This results in consistent generated code with both python 2.7 (CentOS 7)
and python 3.7 (Fedora 31).

I've also fixed a whitespace issue in the generated code by indenting
the break in template_helper_switch_msgtype_default_end, so that it
matches the epan/dissectors code and other default statements.


Here's a patch with my suggested fixes.
Or would you prefer a commit/pull request (etc)?


regards,
Luke.


Hi Luke,

That’s great, I didn’t have the opportunity yet to dig into this. Nice that you compared Python 2.7 and 3.7 already.
I’ll pick this up and put it in with the other fixes I've lined up, so you won’t have to push a change. I’ll credit you 
in the commit :)

Thanks,
Jaap

___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe

Current thread: