Messages in this thread | | | From | Andy Shevchenko <> | Date | Mon, 26 Feb 2018 13:44:43 +0200 | Subject | Re: [PATCH 3/4] auxdisplay: charlcd: fix x/y address commands |
| |
On Mon, Feb 26, 2018 at 1:54 AM, Robert Abel <rabel@robertabel.eu> wrote: > NUL-terminate each individual number to be parsed. > To do this, the next command character and a pointer to its argument > are found and stored. The command character is then overwritten by NUL > before kstr* functions are called on the buffer.
Can we avoid yoda style of programming?
> case 'x': /* gotoxy : LxXXX[yYYY]; */ > + case 'y': { /* gotoxy : LyYYY[xXXX]; */ > + > + char* nxt_esc; > + char nxt_cmd; > + char cmd; > + struct charlcd_priv_addr tmp_addr; > + > if (!strchr(esc, ';')) > break; > > + /* sequence is processed whether legal or illegal */ > + processed = 1; > + > + /* copy current address to temporary buffer */ > + tmp_addr = priv->addr; > + > + nxt_cmd = *esc++; > + nxt_esc = esc; > + > + while ('\0' != *esc) { > + > + cmd = nxt_cmd; > + esc = nxt_esc; > + nxt_esc = strpbrk(esc, "xy;"); > + if (NULL != nxt_esc) { > + nxt_cmd = *nxt_esc; > + /* terminate current sequence with NUL */ > + *nxt_esc++ = '\0'; > + } > + > + if ('x' == cmd) { > + if (kstrtoul(esc, 10, &tmp_addr.x) < 0) > break;
> + } else if ('y' == cmd) { > + if (kstrtoul(esc, 10, &tmp_addr.y) < 0) > break;
Perhaps instead of dancing around kstrtox() better to switch to simple_strtoul() ?
> } else { > + /* break on unknown command or ';' */ > break; > } > + > } > > + /* unknown commands in sequence will be followed by at least ';' */ > + if ('\0' != *esc) > + break; > + > + /* clamp new x/y coordinates */ > + if (tmp_addr.x >= lcd->width) > + tmp_addr.x = lcd->width - 1; > + tmp_addr.y %= lcd->height; > + > + priv->addr = tmp_addr; > charlcd_gotoxy(lcd); > break;
> } > + }
Same indentation level or my mailer hides this from me?
-- With Best Regards, Andy Shevchenko
| |