Paul Cercueil / libiio

Dependencies:   libserialport libxml2

Revision:
3:d147beabba0e
Parent:
2:9eb0a9a1f958
diff -r 9eb0a9a1f958 -r d147beabba0e scan.c
--- a/scan.c	Tue Sep 20 15:34:31 2016 +0000
+++ b/scan.c	Mon Jan 30 13:00:39 2017 +0000
@@ -105,7 +105,10 @@
 
 	info = realloc(scan_result->info, (new_size + 1) * sizeof(*info));
 	if (!info)
-		goto err_free_info_list;
+		return NULL;
+
+	scan_result->info = info;
+	scan_result->size = new_size;
 
 	for (i = old_size; i < new_size; i++) {
 		/* Make sure iio_context_info_list_free won't overflow */
@@ -113,18 +116,10 @@
 
 		info[i] = zalloc(sizeof(**info));
 		if (!info[i])
-			goto err_free_info_list;
+			return NULL;
 	}
 
-	scan_result->info = info;
-	scan_result->size = new_size;
-
 	return &info[old_size];
-
-err_free_info_list:
-	scan_result->size = 0;
-	iio_context_info_list_free(scan_result->info);
-	return NULL;
 }
 
 struct iio_scan_context * iio_create_scan_context(
@@ -163,4 +158,58 @@
 #endif
 	free(ctx);
 }
+
+#ifdef WITH_MATLAB_BINDINGS_API
+
+struct iio_scan_block {
+	struct iio_scan_context *ctx;
+	struct iio_context_info **info;
+	ssize_t ctx_cnt;
+};
+
+ssize_t iio_scan_block_scan(struct iio_scan_block *blk)
+{
+	iio_context_info_list_free(blk->info);
+	blk->info = NULL;
+	blk->ctx_cnt = iio_scan_context_get_info_list(blk->ctx, &blk->info);
+	return blk->ctx_cnt;
+}
+
+struct iio_context_info *iio_scan_block_get_info(
+		struct iio_scan_block *blk, unsigned int index)
+{
+	if (!blk->info || (ssize_t)index >= blk->ctx_cnt) {
+		errno = EINVAL;
+		return NULL;
+	}
+	return blk->info[index];
+}
+
+struct iio_scan_block *iio_create_scan_block(
+		const char *backend, unsigned int flags)
+{
+	struct iio_scan_block *blk;
+
+	blk = calloc(1, sizeof(*blk));
+	if (!blk) {
+		errno = ENOMEM;
+		return NULL;
+	}
+
+	blk->ctx = iio_create_scan_context(backend, flags);
+	if (!blk->ctx) {
+		free(blk);
+		return NULL;
+	}
+
+	return blk;
+}
+
+void iio_scan_block_destroy(struct iio_scan_block *blk)
+{
+	iio_context_info_list_free(blk->info);
+	iio_scan_context_destroy(blk->ctx);
+	free(blk);
+}
+#endif