/*
- * This file is part of the sigrok project.
+ * This file is part of the sigrok-cli project.
*
* Copyright (C) 2011 Bert Vermeulen <bert@biot.com>
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "sigrok-cli.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <glib.h>
-#include <libsigrok/libsigrok.h>
-#include "sigrok-cli.h"
struct sr_probe *find_probe(GSList *probelist, const char *probename)
{
char **tokens, **range, **names, *eptr, str[8];
if (!probestring || !probestring[0])
- /* All probes are enabled by default by the driver. */
- return NULL;
+ /* Use all probes by default. */
+ return g_slist_copy(sdi->probes);
ret = SR_OK;
range = NULL;
+ names = NULL;
probelist = NULL;
tokens = g_strsplit(probestring, ",", 0);
for (i = 0; tokens[i]; i++) {
/* Need exactly two arguments. */
g_critical("Invalid probe syntax '%s'.", tokens[i]);
ret = SR_ERR;
- break;
+ goto range_fail;
}
b = strtol(range[0], &eptr, 10);
if (eptr == range[0] || *eptr != '\0') {
g_critical("Invalid probe '%s'.", range[0]);
ret = SR_ERR;
- break;
+ goto range_fail;
}
e = strtol(range[1], NULL, 10);
if (eptr == range[1] || *eptr != '\0') {
g_critical("Invalid probe '%s'.", range[1]);
ret = SR_ERR;
- break;
+ goto range_fail;
}
if (b < 0 || b >= e) {
g_critical("Invalid probe range '%s'.", tokens[i]);
ret = SR_ERR;
- break;
+ goto range_fail;
}
while (b <= e) {
probelist = g_slist_append(probelist, probe);
b++;
}
+range_fail:
+ if (range)
+ g_strfreev(range);
+
if (ret != SR_OK)
break;
} else {
if (!names[0] || (names[1] && names[2])) {
/* Need one or two arguments. */
g_critical("Invalid probe '%s'.", tokens[i]);
+ g_strfreev(names);
ret = SR_ERR;
break;
}
probe = find_probe(sdi->probes, names[0]);
if (!probe) {
g_critical("unknown probe '%s'.", names[0]);
+ g_strfreev(names);
ret = SR_ERR;
break;
}
probe->name = g_strdup(names[1]);
}
probelist = g_slist_append(probelist, probe);
+
+ g_strfreev(names);
}
}
- if (range)
- g_strfreev(range);
if (ret != SR_OK) {
g_slist_free(probelist);
return hash;
}
-char *strcanon(const char *str)
+static char *strcanon(const char *str)
{
int p0, p1;
char *s;