On Tue, Sep 12, 2023 at 10:02 PM Jerry James <loganje...@gmail.com> wrote:
> I looked at blueprint-compiler tonight, and found 2 bugs with the
> handling of bitfields.  Sadly, fixing those still doesn't make the
> test suite pass, so there is at least one more bug lurking somewhere.
> Still, I think the package is probably fixable.  If you can wait just
> a little longer, I will try to find the next bug tomorrow.

Bug 3 was on the line right next to bug 2. :-)  I have opened
https://gitlab.gnome.org/jwestman/blueprint-compiler/-/merge_requests/143.
That patch does not apply cleanly to version 0.6.0, but the attached
version does.
-- 
Jerry James
http://www.jamezone.org/
--- blueprint-compiler-v0.6.0/blueprintcompiler/gir.py.orig	2022-11-26 16:14:49.000000000 -0700
+++ blueprint-compiler-v0.6.0/blueprintcompiler/gir.py	2023-09-13 08:32:20.150427956 -0600
@@ -603,8 +603,8 @@ class Repository(GirNode):
             return self.lookup_namespace(ns).get_type(dir_entry.DIR_ENTRY_NAME)
 
     def _resolve_type_id(self, type_id: int):
-        if type_id & 0xFFFFFF == 0:
-            type_id = (type_id >> 27) & 0x1F
+        if type_id & (0xFFFFFF if sys.byteorder == "little" else 0xFFFFFF00) == 0:
+            type_id = ((type_id >> 27) if sys.byteorder == "little" else type_id) & 0x1F
             # simple type
             if type_id == typelib.TYPE_BOOLEAN:
                 return BoolType()
--- blueprint-compiler-v0.6.0/blueprintcompiler/typelib.py.orig	2022-11-26 16:14:49.000000000 -0700
+++ blueprint-compiler-v0.6.0/blueprintcompiler/typelib.py	2023-09-13 08:47:24.479850483 -0600
@@ -61,7 +61,14 @@ class Field:
     def __init__(self, offset, type, shift=0, mask=None):
         self._offset = offset
         self._type = type
-        self._shift = shift
+        if not mask or sys.byteorder == "little":
+            self._shift = shift
+        elif self._type == "u8" or self._type == "i8":
+            self._shift = 7 - shift
+        elif self._type == "u16" or self._type == "i16":
+            self._shift = 15 - shift
+        else:
+            self._shift = 31 - shift
         self._mask = (1 << mask) - 1 if mask else None
         self._name = f"{offset}__{type}__{shift}__{mask}"
 
@@ -160,7 +167,7 @@ class Typelib:
     OBJ_FINAL = Field(0x02, "u16", 3, 1)
     OBJ_GTYPE_NAME = Field(0x08, "string")
     OBJ_PARENT = Field(0x10, "dir_entry")
-    OBJ_GTYPE_STRUCT = Field(0x14, "string")
+    OBJ_GTYPE_STRUCT = Field(0x12, "string")
     OBJ_N_INTERFACES = Field(0x14, "u16")
     OBJ_N_FIELDS = Field(0x16, "u16")
     OBJ_N_PROPERTIES = Field(0x18, "u16")
@@ -241,7 +248,11 @@ class Typelib:
         return self._typelib_file[loc:end].decode("utf-8")
 
     def _int(self, size, signed):
-        return int.from_bytes(self._typelib_file[self._offset:self._offset + size], sys.byteorder)
+        return int.from_bytes(
+            self._typelib_file[self._offset:self._offset + size],
+            sys.byteorder,
+            signed=signed,
+        )
 
 
 class TypelibHeader(Typelib):
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to