@@ -121,33 +121,20 @@ void UPNP::parse_igd(Ref<UPNPDevice> dev, UPNPDev *devlist) {
121121 return ;
122122 }
123123
124- struct UPNPUrls *urls = (UPNPUrls *)malloc (sizeof (struct UPNPUrls ));
125-
126- if (!urls) {
127- dev->set_igd_status (UPNPDevice::IGD_STATUS_MALLOC_ERROR);
128- return ;
129- }
130-
124+ struct UPNPUrls urls = {};
131125 struct IGDdatas data;
132126
133- memset (urls, 0 , sizeof (struct UPNPUrls ));
134-
135127 parserootdesc (xml, size, &data);
136128 free (xml);
137129 xml = nullptr ;
138130
139- GetUPNPUrls (urls, &data, dev->get_description_url ().utf8 ().get_data (), 0 );
140-
141- if (!urls) {
142- dev->set_igd_status (UPNPDevice::IGD_STATUS_NO_URLS);
143- return ;
144- }
131+ GetUPNPUrls (&urls, &data, dev->get_description_url ().utf8 ().get_data (), 0 );
145132
146133 char addr[16 ];
147- int i = UPNP_GetValidIGD (devlist, urls, &data, (char *)&addr, 16 );
134+ int i = UPNP_GetValidIGD (devlist, & urls, &data, (char *)&addr, 16 );
148135
149136 if (i != 1 ) {
150- FreeUPNPUrls (urls);
137+ FreeUPNPUrls (& urls);
151138
152139 switch (i) {
153140 case 0 :
@@ -165,18 +152,18 @@ void UPNP::parse_igd(Ref<UPNPDevice> dev, UPNPDev *devlist) {
165152 }
166153 }
167154
168- if (urls-> controlURL [0 ] == ' \0 ' ) {
169- FreeUPNPUrls (urls);
155+ if (urls. controlURL [0 ] == ' \0 ' ) {
156+ FreeUPNPUrls (& urls);
170157 dev->set_igd_status (UPNPDevice::IGD_STATUS_INVALID_CONTROL);
171158 return ;
172159 }
173160
174- dev->set_igd_control_url (urls-> controlURL );
161+ dev->set_igd_control_url (urls. controlURL );
175162 dev->set_igd_service_type (data.first .servicetype );
176163 dev->set_igd_our_addr (addr);
177164 dev->set_igd_status (UPNPDevice::IGD_STATUS_OK);
178165
179- FreeUPNPUrls (urls);
166+ FreeUPNPUrls (& urls);
180167}
181168
182169int UPNP::upnp_result (int in) {
0 commit comments