Neels Hofmeyr has posted comments on this change. ( 
https://gerrit.osmocom.org/11786 )

Change subject: add contrib/struct_endianess.py
......................................................................


Patch Set 2:

(6 comments)

more replies in the form of comments in the next patch set... in general, let's 
cut the time spent here (at least sysmocom time) since we don't really have a 
need to support big endian. Free time is a different matter.

https://gerrit.osmocom.org/#/c/11786/2/contrib/struct_endianess.py
File contrib/struct_endianess.py:

https://gerrit.osmocom.org/#/c/11786/2/contrib/struct_endianess.py@80
PS2, Line 80:     # now the interesting part, go over the defs, and reverse the 
sub-byte ints
> You can probably split into a different function starting from here.
you're right style wise, but it doesn't really have a practical benefit


https://gerrit.osmocom.org/#/c/11786/2/contrib/struct_endianess.py@118
PS2, Line 118:                     raise Exception('sub-byte int breaks clean 
byte bounds: %s -- %d + %d = %d bits'
> what about eg. […]
Even if you use uint16_t, it must still reverse at byte boundaries.

Technically we parse any integer types, including uint16_t, but this is 
identical:

  uint8_t a:3, b:5;

and

  uint16_t a:3, b:5;

and in practice *all* of our sub-byte integers today are defined by uint8_t.


https://gerrit.osmocom.org/#/c/11786/2/contrib/struct_endianess.py@189
PS2, Line 189:         if not 'packed' in struct[-1]:
> probably better/easier to look for __atribute((packed)) or whatever is 
> called, and check  all lines  […]
the regex for top-level structs only matches the end-of-struct being at the 
line start

  };

or

  } __attribute....;

This condition only exists because in some places we have weird booleans in the 
form of

  integer flag:1;

and these don't add up to bytes, and cause errors. So I thought let's skip all 
non-packed structs, then all of those are out of the picture.

For the current code base that holds true...


https://gerrit.osmocom.org/#/c/11786/2/contrib/struct_endianess.py@248
PS2, Line 248:                         j += 1
> Not sure if this j += 1 in here applied for all cases is correct. Have a look.
it is correct, all ifs break, this is the iteration case


https://gerrit.osmocom.org/#/c/11786/2/contrib/struct_endianess.py@276
PS2, Line 276:             end_def()
> afaiu this end_def() should be one lne above and indented one more level 
> (inside while).
nope. it flushes what is left at the end


https://gerrit.osmocom.org/#/c/11786/2/contrib/struct_endianess.py@308
PS2, Line 308:             raise Exception('do not know where to include 
osmocom/core/endian.h in %r' % f)
> Just add it around first empty line (to avoid adding if before guard IFDEF or 
> pragma once).
there are currently no cases where this would be needed... am reluctant to add 
dead code



--
To view, visit https://gerrit.osmocom.org/11786
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I8e75b17d8071c7b3a2a171ba776fb76854b28a53
Gerrit-Change-Number: 11786
Gerrit-PatchSet: 2
Gerrit-Owner: Neels Hofmeyr <[email protected]>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Neels Hofmeyr <[email protected]>
Gerrit-Reviewer: Pau Espin Pedrol <[email protected]>
Gerrit-Comment-Date: Mon, 19 Nov 2018 15:31:00 +0000
Gerrit-HasComments: Yes
Gerrit-HasLabels: No

Reply via email to