drivers: modem: cache delimiter string length
Cache the delimiter string length in `parse_params`, instead of calculating it on each character in the match buffer. Signed-off-by: Jordan Yates <jordan.yates@data61.csiro.au>
This commit is contained in:
parent
76c1a2019a
commit
1c2dba2107
|
@ -111,7 +111,7 @@ static int parse_params(struct modem_cmd_handler_data *data, size_t match_len,
|
||||||
uint8_t **argv, size_t argv_len, uint16_t *argc)
|
uint8_t **argv, size_t argv_len, uint16_t *argc)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
size_t begin, end, i;
|
size_t delim_len, begin, end, i;
|
||||||
bool quoted = false;
|
bool quoted = false;
|
||||||
|
|
||||||
if (!data || !data->match_buf || !match_len || !cmd || !argv || !argc) {
|
if (!data || !data->match_buf || !match_len || !cmd || !argv || !argc) {
|
||||||
|
@ -120,6 +120,7 @@ static int parse_params(struct modem_cmd_handler_data *data, size_t match_len,
|
||||||
|
|
||||||
begin = cmd->cmd_len;
|
begin = cmd->cmd_len;
|
||||||
end = cmd->cmd_len;
|
end = cmd->cmd_len;
|
||||||
|
delim_len = strlen(cmd->delim);
|
||||||
while (end < match_len) {
|
while (end < match_len) {
|
||||||
/* Don't look for delimiters in the middle of a quoted parameter */
|
/* Don't look for delimiters in the middle of a quoted parameter */
|
||||||
if (data->match_buf[end] == '"') {
|
if (data->match_buf[end] == '"') {
|
||||||
|
@ -130,7 +131,7 @@ static int parse_params(struct modem_cmd_handler_data *data, size_t match_len,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* Look for delimiter characters */
|
/* Look for delimiter characters */
|
||||||
for (i = 0; i < strlen(cmd->delim); i++) {
|
for (i = 0; i < delim_len; i++) {
|
||||||
if (data->match_buf[end] == cmd->delim[i]) {
|
if (data->match_buf[end] == cmd->delim[i]) {
|
||||||
/* mark a parameter beginning */
|
/* mark a parameter beginning */
|
||||||
argv[*argc] = &data->match_buf[begin];
|
argv[*argc] = &data->match_buf[begin];
|
||||||
|
|
Loading…
Reference in a new issue