Applied Christian Ehrlicher's patch, fixing a couple of memory leaks in the

linux usb device detection code.



git-svn-id: svn+ssh://svn.code.sf.net/p/spacenav/code/trunk/spacenavd@176 ef983eb1-d774-4af8-acfd-baaf7b16a646
pull/1/head
John Tsiombikas 2014-02-01 15:19:38 +00:00
rodzic 135c403f1c
commit ab41eaf551
1 zmienionych plików z 15 dodań i 0 usunięć

Wyświetl plik

@ -162,6 +162,9 @@ static void close_evdev(struct device *dev)
dev->set_led(dev, 0); dev->set_led(dev, 0);
close(dev->fd); close(dev->fd);
dev->fd = -1; dev->fd = -1;
free(dev->minval);
free(dev->maxval);
free(dev->fuzz);
} }
} }
@ -378,6 +381,14 @@ struct usb_device_info *find_usb_devices(int (*match)(const struct usb_device_in
} else { } else {
perror("failed to allocate usb device info node"); perror("failed to allocate usb device info node");
} }
} else {
/* cleanup devinfo before moving to the next line */
int i;
for(i = 0; i < devinfo.num_devfiles; ++i) {
free(devinfo.devfiles[i]);
}
free(devinfo.name);
memset(&devinfo, 0, sizeof devinfo);
} }
section_start = next_section; section_start = next_section;
@ -461,9 +472,13 @@ alt_detect:
node->next = devlist; node->next = devlist;
devlist = node; devlist = node;
} else { } else {
free(devinfo.name);
free(devinfo.devfiles[0]); free(devinfo.devfiles[0]);
perror("failed to allocate usb device info"); perror("failed to allocate usb device info");
} }
} else {
free(devinfo.name);
free(devinfo.devfiles[0]);
} }
close(fd); close(fd);
} }