diff options
| author | 2014-01-09 11:31:49 +0100 | |
|---|---|---|
| committer | 2014-01-09 11:31:49 +0100 | |
| commit | 678149cde792d30beca94ba6fc9ea20996f2febc (patch) | |
| tree | d4427b08b3a900bb0e2e82921f98dae44f1f3017 /src/device.c | |
| parent | d04ce1b524f68dda6b75cfff69f70f4b4ad8e1d5 (diff) | |
| download | usbmuxd-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.c | 7 |
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 | ||
| 749 | int device_get_list(int include_hidden, struct device_info *p) | 749 | int 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; |
