summaryrefslogtreecommitdiff
path: root/dev-libs/libdnet/files/libdnet-1.18.0-fix-incompatible-function-pointer.patch
blob: 836296f3895fe0175ef6c7f27a91cbd933183215 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
https://github.com/ofalk/libdnet/pull/104

From de57a2349172148496386e284db91abe6406b02a Mon Sep 17 00:00:00 2001
From: "Z. Liu" <zhixu.liu@gmail.com>
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 <zhixu.liu@gmail.com>
---
 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 = <object>arg
     pa, ha = addr(), 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] = (<addr>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 = <object>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 = <object>arg
     dst, gw = addr(), 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 = <object>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" <zhixu.liu@gmail.com>
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 <zhixu.liu@gmail.com>
---
 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, <const void **>&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, <const void **>&p, &n) == 0:
         return __ip_cksum_add(p, n, sum)
     else:
         raise TypeError
-- 
2.45.2