[ https://issues.apache.org/jira/browse/DISPATCH-2270?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jiri Daněk resolved DISPATCH-2270. ---------------------------------- Resolution: Fixed > Do not rely on long type being large enough to transfer C pointer values from > C to Python > ----------------------------------------------------------------------------------------- > > Key: DISPATCH-2270 > URL: https://issues.apache.org/jira/browse/DISPATCH-2270 > Project: Qpid Dispatch > Issue Type: Sub-task > Affects Versions: 1.17.0 > Reporter: Jiri Daněk > Assignee: Jiri Daněk > Priority: Major > Fix For: 1.19.0 > > > {code} > // We pass pointers as longs via the python interface, make sure this is safe. > STATIC_ASSERT(sizeof(long) >= sizeof(void*), pointer_is_bigger_than_long); > {code} > This is wrong on Win64, where long is 4 bytes. There is multiple possible > solutions: > # use {{long long}}, trivial workaround > ** https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue > # construct the python value explicitly, probably the nicest solution, and > should not even add extra overhead > ** https://docs.python.org/3/c-api/long.html#c.PyLong_FromVoidPtr > # use PyCapsules, not a good fit for existing code, requires changing > signature in C on the callee side > ** https://docs.python.org/3/c-api/capsule.html > ** > https://docs.python.org/3/extending/extending.html?highlight=capsule#providing-a-c-api-for-an-extension-module > and maybe even more possibilities. I am inclined to go with the > PyLong_FromVoidPtr value constructor. -- This message was sent by Atlassian Jira (v8.20.1#820001) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org