summaryrefslogtreecommitdiffstats
path: root/src/device.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2014-01-09 11:31:49 +0100
committerGravatar Nikias Bassen2014-01-09 11:31:49 +0100
commit678149cde792d30beca94ba6fc9ea20996f2febc (patch)
treed4427b08b3a900bb0e2e82921f98dae44f1f3017 /src/device.c
parentd04ce1b524f68dda6b75cfff69f70f4b4ad8e1d5 (diff)
downloadusbmuxd-678149cde792d30beca94ba6fc9ea20996f2febc.tar.gz
usbmuxd-678149cde792d30beca94ba6fc9ea20996f2febc.tar.bz2
device/client: make device_get_list() allocate the result buffer itself
Using device_get_count() and device_get_list() separately can return different device counts in case there are devices added to the list inbetween these two function calls. To prevent this, device_get_list() will allocate the buffer by itself.
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/device.c b/src/device.c
index 29be9d1..0844499 100644
--- a/src/device.c
+++ b/src/device.c
@@ -746,10 +746,15 @@ int device_get_count(int include_hidden)
746 return count; 746 return count;
747} 747}
748 748
749int device_get_list(int include_hidden, struct device_info *p) 749int device_get_list(int include_hidden, struct device_info **devices)
750{ 750{
751 int count = 0; 751 int count = 0;
752 pthread_mutex_lock(&device_list_mutex); 752 pthread_mutex_lock(&device_list_mutex);
753
754 int total_count = collection_count(&device_list);
755 *devices = malloc(sizeof(struct device_info) * total_count);
756 struct device_info *p = *devices;
757
753 FOREACH(struct mux_device *dev, &device_list) { 758 FOREACH(struct mux_device *dev, &device_list) {
754 if((dev->state == MUXDEV_ACTIVE) && (include_hidden || dev->visible)) { 759 if((dev->state == MUXDEV_ACTIVE) && (include_hidden || dev->visible)) {
755 p->id = dev->id; 760 p->id = dev->id;