From: Aurelien Jacobs Date: Tue, 25 Nov 2014 21:44:30 +0000 (+0100) Subject: session_file: Enable only the probes that are actually listed in metadata. X-Git-Tag: libsigrok-0.4.0~701 X-Git-Url: https://sigrok.org/gitweb/?a=commitdiff_plain;ds=sidebyside;h=a160a0c344f5bcb24eeb01c5698f3a50eaee7d79;p=libsigrok.git session_file: Enable only the probes that are actually listed in metadata. This is a better fix for #410 and #495. --- diff --git a/src/session_file.c b/src/session_file.c index 8b4f60b5..26c0df7a 100644 --- a/src/session_file.c +++ b/src/session_file.c @@ -124,7 +124,7 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session) struct sr_dev_inst *sdi; struct sr_channel *ch; int ret, i, j; - uint64_t tmp_u64, total_channels, enabled_channels, p; + uint64_t tmp_u64, total_channels, p; char **sections, **keys, *metafile, *val; char channelname[SR_MAX_CHANNELNAME_LEN + 1]; @@ -165,7 +165,6 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session) if (!strncmp(sections[i], "device ", 7)) { /* device section */ sdi = NULL; - enabled_channels = total_channels = 0; keys = g_key_file_get_keys(kf, sections[i], NULL, NULL); for (j = 0; keys[j]; j++) { val = g_key_file_get_string(kf, sections[i], keys[j], NULL); @@ -213,7 +212,7 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session) g_variant_new_uint64(total_channels), sdi, NULL); for (p = 0; p < total_channels; p++) { snprintf(channelname, SR_MAX_CHANNELNAME_LEN, "%" PRIu64, p); - ch = sr_channel_new(p, SR_CHANNEL_LOGIC, TRUE, + ch = sr_channel_new(p, SR_CHANNEL_LOGIC, FALSE, channelname); sdi->channels = g_slist_append(sdi->channels, ch); } @@ -222,17 +221,13 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session) ret = SR_ERR_DATA; break; } - enabled_channels++; tmp_u64 = strtoul(keys[j]+5, NULL, 10); /* sr_session_save() */ sr_dev_channel_name_set(sdi, tmp_u64 - 1, val); + sr_dev_channel_enable(sdi, tmp_u64 - 1, TRUE); } } g_strfreev(keys); - /* Disable channels not specifically listed. */ - if (total_channels) - for (p = enabled_channels; p < total_channels; p++) - sr_dev_channel_enable(sdi, p, FALSE); } } g_strfreev(sections);