https://github.com/ofalk/libdnet/pull/104 From de57a2349172148496386e284db91abe6406b02a Mon Sep 17 00:00:00 2001 From: "Z. Liu" Date: Wed, 19 Feb 2025 11:37:37 +0800 Subject: [PATCH 1/2] python/dnet.pyx: fix incompatible-function-pointer-types for modern compiler which is error now, see https://bugs.gentoo.org/933360, clang 19 (maybe earlier) has the same problem too Signed-off-by: Z. Liu --- python/dnet.pyx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/python/dnet.pyx b/python/dnet.pyx index 4e3604f..04db2c6 100644 --- a/python/dnet.pyx +++ b/python/dnet.pyx @@ -661,7 +661,7 @@ cdef extern from *: addr_t arp_ha ctypedef struct arp_t: int __xxx - ctypedef int (*arp_handler)(arp_entry *entry, void *arg) except -1 + ctypedef int (*arp_handler)(const arp_entry *entry, void *arg) except -1 arp_t *arp_open() int arp_add(arp_t *arp, arp_entry *entry) @@ -687,7 +687,7 @@ ARP_OP_REPLY = 2 # /* response giving hardware address */ ARP_OP_REVREQUEST = 3 # /* request to resolve pa given ha */ ARP_OP_REVREPLY = 4 # /* response giving protocol address */ -cdef int __arp_callback(arp_entry *entry, void *arg) except -1: +cdef int __arp_callback(const arp_entry *entry, void *arg) except -1: f, a = arg pa, ha = addr(), addr() (pa)._addr = entry.arp_pa @@ -911,7 +911,7 @@ cdef extern from *: addr_t intf_alias_addrs[8] # XXX ctypedef struct intf_t: int __xxx - ctypedef int (*intf_handler)(intf_entry *entry, void *arg) except -1 + ctypedef int (*intf_handler)(const intf_entry *entry, void *arg) except -1 intf_t *intf_open() int intf_get(intf_t *intf, intf_entry *entry) @@ -933,7 +933,7 @@ INTF_FLAG_NOARP = 0x08 # /* disable ARP */ INTF_FLAG_BROADCAST = 0x10 # /* supports broadcast (r/o) */ INTF_FLAG_MULTICAST = 0x20 # /* supports multicast (r/o) */ -cdef object ifent_to_dict(intf_entry *entry): +cdef object ifent_to_dict(const intf_entry *entry): d = {} d['name'] = entry.intf_name d['type'] = entry.intf_type @@ -970,7 +970,7 @@ cdef dict_to_ifent(object d, intf_entry *entry): for i from 0 <= i < entry.intf_alias_num: entry.intf_alias_addrs[i] = (d['alias_addrs'][i])._addr -cdef int __intf_callback(intf_entry *entry, void *arg) except -1: +cdef int __intf_callback(const intf_entry *entry, void *arg) except -1: f, a = arg ret = f(ifent_to_dict(entry), a) if not ret: @@ -1077,7 +1077,7 @@ cdef extern from *: addr_t route_gw ctypedef struct route_t: int __xxx - ctypedef int (*route_handler)(route_entry *entry, void *arg) except -1 + ctypedef int (*route_handler)(const route_entry *entry, void *arg) except -1 route_t *route_open() int route_add(route_t *route, route_entry *entry) @@ -1086,7 +1086,7 @@ cdef extern from *: int route_loop(route_t *route, route_handler callback, void *arg) route_t *route_close(route_t *route) -cdef int __route_callback(route_entry *entry, void *arg) except -1: +cdef int __route_callback(const route_entry *entry, void *arg) except -1: f, a = arg dst, gw = addr(), addr() (dst)._addr = entry.route_dst @@ -1183,7 +1183,7 @@ cdef extern from *: ctypedef struct fw_t: int __xxx - ctypedef int (*fw_handler)(fw_rule *rule, void *arg) except -1 + ctypedef int (*fw_handler)(const fw_rule *rule, void *arg) except -1 fw_t *fw_open() int fw_add(fw_t *f, fw_rule *rule) @@ -1197,7 +1197,7 @@ FW_OP_BLOCK = 2 FW_DIR_IN = 1 FW_DIR_OUT = 2 -cdef object rule_to_dict(fw_rule *rule): +cdef object rule_to_dict(const fw_rule *rule): d = {} d['device'] = rule.fw_device d['op'] = rule.fw_op @@ -1235,7 +1235,7 @@ cdef dict_to_rule(object d, fw_rule *rule): rule.fw_dport[0] = d['dport'][0] rule.fw_dport[1] = d['dport'][1] -cdef int __fw_callback(fw_rule *rule, void *arg) except -1: +cdef int __fw_callback(const fw_rule *rule, void *arg) except -1: f, a = arg ret = f(rule_to_dict(rule), a) if not ret: -- 2.45.2 From 0a742400b2167f67067e13bfcbecb9f17a7eefe8 Mon Sep 17 00:00:00 2001 From: "Z. Liu" Date: Thu, 3 Apr 2025 08:09:26 +0000 Subject: [PATCH 2/2] python/dnet.pyx: fix -Wincompatible-pointer-types reported by gcc14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ./dnet.c:8451:52: error: passing argument 2 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types] 8451 | __pyx_t_1 = (PyObject_AsReadBuffer(__pyx_v_pkt, (&__pyx_v_p), (&__pyx_v_n)) == 0); | ~^~~~~~~~~~~ | | | char ** /usr/include/python3.12/abstract.h:370:52: note: expected ‘const void **’ but argument is of type ‘char **’ 370 | const void **buffer, | ~~~~~~~~~~~~~^~~~~~ ./dnet.c:8451:66: error: passing argument 3 of ‘PyObject_AsReadBuffer’ from incompatible pointer type [-Wincompatible-pointer-types] 8451 | __pyx_t_1 = (PyObject_AsReadBuffer(__pyx_v_pkt, (&__pyx_v_p), (&__pyx_v_n)) == 0); | ~^~~~~~~~~~~ | | | int * /usr/include/python3.12/abstract.h:371:51: note: expected ‘Py_ssize_t *’ {aka ‘long int *’} but argument is of type ‘int *’ 371 | Py_ssize_t *buffer_len); | ~~~~~~~~~~~~^~~~~~~~~~ Signed-off-by: Z. Liu --- python/dnet.pyx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/python/dnet.pyx b/python/dnet.pyx index 04db2c6..6aefaa2 100644 --- a/python/dnet.pyx +++ b/python/dnet.pyx @@ -25,7 +25,7 @@ cdef extern from "dnet.h": cdef extern from "Python.h": object PyBytes_FromStringAndSize(char *s, int len) int PyBytes_Size(object o) - int PyObject_AsReadBuffer(object o, char **pp, int *lenp) + int PyObject_AsReadBuffer(object o, const void **pp, ssize_t *lenp) int PyLong_Check(object o) int PyLong_Check(object o) long PyLong_AsLong(object o) @@ -294,8 +294,8 @@ def ip_checksum(pkt): """ cdef char buf[2048] cdef char *p - cdef int n - if PyObject_AsReadBuffer(pkt, &p, &n) == 0: + cdef ssize_t n + if PyObject_AsReadBuffer(pkt, &p, &n) == 0: if n < 2048: memcpy(buf, p, n) __ip_checksum(buf, n) @@ -310,8 +310,8 @@ def ip_checksum(pkt): def ip_cksum_add(buf, int sum): cdef char *p - cdef int n - if PyObject_AsReadBuffer(buf, &p, &n) == 0: + cdef ssize_t n + if PyObject_AsReadBuffer(buf, &p, &n) == 0: return __ip_cksum_add(p, n, sum) else: raise TypeError -- 2.45.2