aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/devices/usb.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/modules/devices/usb.c b/modules/devices/usb.c
index 62fe258c..b8d9e305 100644
--- a/modules/devices/usb.c
+++ b/modules/devices/usb.c
@@ -313,7 +313,6 @@ void __scan_usb_lsusb_add_device(char *buffer, FILE *lsusb, int usb_device_numbe
vendor_id, product_id, bus);
moreinfo_add_with_prefix("DEV", tmp, strhash);
-
g_free(vendor);
g_free(product);
g_free(max_power);
@@ -327,6 +326,7 @@ gboolean __scan_usb_lsusb(void)
static gchar *lsusb_path = NULL;
int usb_device_number = 0;
FILE *lsusb;
+ FILE *temp_lsusb;
char buffer[512], *temp;
if (!lsusb_path) {
@@ -345,6 +345,22 @@ gboolean __scan_usb_lsusb(void)
return FALSE;
}
+ temp_lsusb = tmpfile();
+ if (!temp_lsusb) {
+ DEBUG("cannot create temporary file for lsusb");
+
+ return FALSE;
+ }
+
+ while (fgets(buffer, sizeof(buffer), lsusb)) {
+ fputs(buffer, temp_lsusb);
+ }
+
+ pclose(lsusb);
+
+ // rewind file so we can read from it
+ fseek(temp_lsusb, 0, SEEK_SET);
+
g_free(temp);
if (usb_list) {
@@ -353,13 +369,13 @@ gboolean __scan_usb_lsusb(void)
}
usb_list = g_strdup("[USB Devices]\n");
- while (fgets(buffer, sizeof(buffer), lsusb)) {
+ while (fgets(buffer, sizeof(buffer), temp_lsusb)) {
if (g_str_has_prefix(buffer, "Bus ")) {
- __scan_usb_lsusb_add_device(buffer, lsusb, ++usb_device_number);
+ __scan_usb_lsusb_add_device(buffer, temp_lsusb, ++usb_device_number);
}
}
- pclose(lsusb);
+ fclose(temp_lsusb);
return usb_device_number > 0;
}