From: Michael Gernoth Date: Wed, 13 Nov 2013 20:38:37 +0000 (+0100) Subject: make sure to close the device and call libusb_exit() on errors in hmcfgusb_init() X-Git-Tag: v0.100~46 X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/commitdiff_plain/211fd7e506bfea5886e3db5bca57fac2851cd5bf?ds=inline;hp=c44f15b8a62ff2828fdcfcfe3f64036bd4051962 make sure to close the device and call libusb_exit() on errors in hmcfgusb_init() Thanks to Ralf (johann @ fhem-forum) for reporting and fixing this --- diff --git a/hmcfgusb.c b/hmcfgusb.c index d77c9d8..01a50b7 100644 --- a/hmcfgusb.c +++ b/hmcfgusb.c @@ -311,6 +311,7 @@ struct hmcfgusb_dev *hmcfgusb_init(hmcfgusb_cb_fn cb, void *data) devh = hmcfgusb_find(ID_VENDOR, ID_PRODUCT_BL); if (!devh) { fprintf(stderr, "Can't find/open hmcfgusb!\n"); + libusb_exit(NULL); return NULL; } bootloader = 1; @@ -319,6 +320,8 @@ struct hmcfgusb_dev *hmcfgusb_init(hmcfgusb_cb_fn cb, void *data) dev = malloc(sizeof(struct hmcfgusb_dev)); if (!dev) { perror("Can't allocate memory for hmcfgusb_dev"); + libusb_close(devh); + libusb_exit(NULL); return NULL; } @@ -331,6 +334,8 @@ struct hmcfgusb_dev *hmcfgusb_init(hmcfgusb_cb_fn cb, void *data) if (!cb_data) { perror("Can't allocate memory for hmcfgusb_cb_data"); free(dev); + libusb_close(devh); + libusb_exit(NULL); return NULL; } @@ -345,6 +350,8 @@ struct hmcfgusb_dev *hmcfgusb_init(hmcfgusb_cb_fn cb, void *data) fprintf(stderr, "Can't prepare async device io!\n"); free(dev); free(cb_data); + libusb_close(devh); + libusb_exit(NULL); return NULL; } @@ -353,6 +360,8 @@ struct hmcfgusb_dev *hmcfgusb_init(hmcfgusb_cb_fn cb, void *data) fprintf(stderr, "Can't get FDset from libusb!\n"); free(dev); free(cb_data); + libusb_close(devh); + libusb_exit(NULL); return NULL; } @@ -365,6 +374,8 @@ struct hmcfgusb_dev *hmcfgusb_init(hmcfgusb_cb_fn cb, void *data) perror("Can't allocate memory for poll-fds"); free(dev); free(cb_data); + libusb_close(devh); + libusb_exit(NULL); return NULL; }