Browse Source

Use strtok to parse lines in bflsc driver.

nfactor-troky
Con Kolivas 11 years ago
parent
commit
b0fe14d4b3
  1. 30
      driver-bflsc.c

30
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 // 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) static bool tolines(struct cgpu_info *bflsc, int dev, char *buf, int *lines, char ***items, enum usb_cmds cmd)
{ {
bool ok = true; bool ok = false;
char *ptr; char *tok;
#define p_lines (*lines) #define p_lines (*lines)
#define p_items (*items) #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)) { if (!buf || !(*buf)) {
applog(LOG_DEBUG, "USB: %s%i: (%d) empty %s", applog(LOG_DEBUG, "USB: %s%i: (%d) empty %s",
bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd)); bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd));
return false; return ok;
} }
ptr = strdup(buf); tok = strtok(buf, "\n");
while (ptr && *ptr) { if (!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", applog(LOG_DEBUG, "USB: %s%i: (%d) missing lf(s) in %s",
bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd)); bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd));
return ok;
} }
ok = false;
} 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] = strdup(tok);
tok = strtok(NULL, "\n");
} }
return ok; return ok;

Loading…
Cancel
Save