2424 */
2525
2626#include <Python.h>
27+ #include "include/py3c/compat.h"
2728#include <bytesobject.h>
2829#include "structmember.h"
2930
@@ -87,7 +88,7 @@ static PyNetlinkIPaddress * get_last_ipv4_address(PyObject *addrlist)
8788PyObject * _ethtool_etherinfo_str (PyEtherInfo * self )
8889{
8990 PyObject * ret = NULL ;
90- PyObject * ipv4addrs = NULL , * ipv6addrs = NULL ;
91+ PyObject * ipv4addrs = NULL , * ipv6addrs = NULL ;
9192
9293 if ( !self ) {
9394 PyErr_SetString (PyExc_AttributeError , "No data available" );
@@ -96,56 +97,46 @@ PyObject *_ethtool_etherinfo_str(PyEtherInfo *self)
9697
9798 get_etherinfo_link (self );
9899
99- ret = PyBytes_FromFormat ("Device " );
100- PyBytes_Concat (& ret , self -> device );
101- PyBytes_ConcatAndDel (& ret , PyBytes_FromString (":\n" ));
100+ ret = PyStr_FromFormat ("Device %s:\n" , PyStr_AsString (self -> device ));
102101
103102 if ( self -> hwaddress ) {
104- PyBytes_ConcatAndDel ( & ret , PyBytes_FromString ( "\tMAC address: " ));
105- PyBytes_Concat ( & ret , self -> hwaddress );
106- PyBytes_ConcatAndDel ( & ret , PyBytes_FromString ( "\n" ));
103+ ret = PyStr_Concat ( ret ,
104+ PyStr_FromFormat ( "\tMAC address: %s\n" ,
105+ PyStr_AsString ( self -> hwaddress ) ));
107106 }
108107
109108 ipv4addrs = get_etherinfo_address (self , NLQRY_ADDR4 );
110109 if ( ipv4addrs ) {
111- Py_ssize_t i ;
112- for (i = 0 ; i < PyList_Size (ipv4addrs ); i ++ ) {
113- PyNetlinkIPaddress * py_addr = (PyNetlinkIPaddress * )PyList_GetItem (ipv4addrs , i );
114- PyObject * tmp = PyBytes_FromFormat ("\tIPv4 address: " );
115- PyBytes_Concat (& tmp , py_addr -> local );
116- PyBytes_ConcatAndDel (& tmp , PyBytes_FromFormat ("/%d" , py_addr -> prefixlen ));
117- if (py_addr -> ipv4_broadcast ) {
118- PyBytes_ConcatAndDel (& tmp ,
119- PyBytes_FromString (" Broadcast: " ));
120- PyBytes_Concat (& tmp , py_addr -> ipv4_broadcast );
121- }
122- PyBytes_ConcatAndDel (& tmp , PyBytes_FromString ("\n" ));
123- PyBytes_ConcatAndDel (& ret , tmp );
124- }
110+ Py_ssize_t i ;
111+ for (i = 0 ; i < PyList_Size (ipv4addrs ); i ++ ) {
112+ PyNetlinkIPaddress * py_addr = (PyNetlinkIPaddress * )PyList_GetItem (ipv4addrs , i );
113+ PyObject * tmp = PyStr_FromFormat ("\tIPv4 address: " );
114+ tmp = PyStr_Concat (tmp , py_addr -> local );
115+ tmp = PyStr_Concat (tmp , PyStr_FromFormat ("/%d" , py_addr -> prefixlen ));
116+ if (py_addr -> ipv4_broadcast ) {
117+ tmp = PyStr_Concat (tmp ,
118+ PyStr_FromFormat ("\tBroadcast: %s\n" ,
119+ PyStr_AsString (py_addr -> ipv4_broadcast )));
120+ } else {
121+ tmp = PyStr_Concat (tmp , PyStr_FromFormat ("\n" ));
122+ }
123+
124+ ret = PyStr_Concat (ret , tmp );
125+ }
125126 }
126127
127128 ipv6addrs = get_etherinfo_address (self , NLQRY_ADDR6 );
128129 if ( ipv6addrs ) {
129- Py_ssize_t i ;
130- for (i = 0 ; i < PyList_Size (ipv6addrs ); i ++ ) {
131- PyNetlinkIPaddress * py_addr = (PyNetlinkIPaddress * )PyList_GetItem (ipv6addrs , i );
132- PyObject * tmp = PyBytes_FromFormat ("\tIPv6 address: [" );
133- PyBytes_Concat (& tmp , py_addr -> scope );
134- PyBytes_ConcatAndDel (& tmp , PyBytes_FromString ("] " ));
135- PyBytes_Concat (& tmp , py_addr -> local );
136- PyBytes_ConcatAndDel (& tmp , PyBytes_FromFormat ("/%d" , py_addr -> prefixlen ));
137- PyBytes_ConcatAndDel (& tmp , PyBytes_FromString ("\n" ));
138- PyBytes_ConcatAndDel (& ret , tmp );
139- }
140- }
141-
142- #if PY_MAJOR_VERSION >= 3
143- {
144- PyObject * bytestr = ret ;
145- ret = PyUnicode_FromString (PyBytes_AsString (bytestr ));
146- Py_DECREF (bytestr );
130+ Py_ssize_t i ;
131+ for (i = 0 ; i < PyList_Size (ipv6addrs ); i ++ ) {
132+ PyNetlinkIPaddress * py_addr = (PyNetlinkIPaddress * )PyList_GetItem (ipv6addrs , i );
133+ PyObject * tmp = PyStr_FromFormat ("\tIPv6 address: [%s] %s/%d\n" ,
134+ PyStr_AsString (py_addr -> scope ),
135+ PyStr_AsString (py_addr -> local ),
136+ py_addr -> prefixlen );
137+ ret = PyStr_Concat (ret , tmp );
138+ }
147139 }
148- #endif
149140
150141 return ret ;
151142}
@@ -235,7 +226,12 @@ static PyObject *get_ipv4_addr(PyObject *obj, void *info)
235226 return py_addr -> local ;
236227 }
237228 }
238- Py_RETURN_NONE ;
229+
230+ if (PyErr_Occurred ()) {
231+ return NULL ;
232+ } else {
233+ Py_RETURN_NONE ;
234+ }
239235}
240236
241237static PyObject * get_ipv4_mask (PyObject * obj , void * info )
@@ -247,9 +243,14 @@ static PyObject *get_ipv4_mask(PyObject *obj, void *info)
247243 addrlist = get_etherinfo_address (self , NLQRY_ADDR4 );
248244 py_addr = get_last_ipv4_address (addrlist );
249245 if (py_addr ) {
250- return PyLong_FromLong (py_addr -> prefixlen );
246+ return PyInt_FromLong (py_addr -> prefixlen );
247+ }
248+
249+ if (PyErr_Occurred ()) {
250+ return NULL ;
251+ } else {
252+ return PyInt_FromLong (0 );
251253 }
252- return PyLong_FromLong (0 );
253254}
254255
255256static PyObject * get_ipv4_bcast (PyObject * obj , void * info )
@@ -266,7 +267,12 @@ static PyObject *get_ipv4_bcast(PyObject *obj, void *info)
266267 return py_addr -> ipv4_broadcast ;
267268 }
268269 }
269- Py_RETURN_NONE ;
270+
271+ if (PyErr_Occurred ()) {
272+ return NULL ;
273+ } else {
274+ return PyStr_FromString ("0.0.0.0" );
275+ }
270276}
271277
272278
0 commit comments