Use strtok to parse lines in bflsc driver.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
diff --git a/driver-bflsc.c b/driver-bflsc.c
index da3095a..b5b68fd 100644
--- a/driver-bflsc.c
+++ b/driver-bflsc.c
@@ -84,8 +84,8 @@ static void bflsc_applog(struct cgpu_info *bflsc, int dev, enum usb_cmds cmd, in
// error would be no data or missing LF at the end
static bool tolines(struct cgpu_info *bflsc, int dev, char *buf, int *lines, char ***items, enum usb_cmds cmd)
{
- bool ok = true;
- char *ptr;
+ bool ok = false;
+ char *tok;
#define p_lines (*lines)
#define p_items (*items)
@@ -96,25 +96,23 @@ static bool tolines(struct cgpu_info *bflsc, int dev, char *buf, int *lines, cha
if (!buf || !(*buf)) {
applog(LOG_DEBUG, "USB: %s%i: (%d) empty %s",
bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd));
- return false;
+ return ok;
}
- ptr = strdup(buf);
- while (ptr && *ptr) {
+ tok = strtok(buf, "\n");
+ if (!tok) {
+ applog(LOG_DEBUG, "USB: %s%i: (%d) missing lf(s) in %s",
+ bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd));
+ return ok;
+ }
+
+ ok = true;
+ while (tok) {
p_items = realloc(p_items, ++p_lines * sizeof(*p_items));
if (unlikely(!p_items))
quit(1, "Failed to realloc p_items in tolines");
- p_items[p_lines-1] = ptr;
- ptr = strchr(ptr, '\n');
- if (ptr)
- *(ptr++) = '\0';
- else {
- if (ok) {
- applog(LOG_DEBUG, "USB: %s%i: (%d) missing lf(s) in %s",
- bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd));
- }
- ok = false;
- }
+ p_items[p_lines-1] = strdup(tok);
+ tok = strtok(NULL, "\n");
}
return ok;