strcmp_l1 is basically str_has_prefix with inverted arguments and a NULL check. We don't need the NULL check as cmdbuf and cmd->cmd should always be non-NULL: The former is the address of an array populated by fastboot network or USB code and the latter is a pointer to a string literal. So let's codify the assumption that cmdbuf is not NULL into the prototype and replace strcmp_l1 with str_has_prefix. This has the added benefit that str_has_prefix returns the length of the prefix, which saves us a repeated call to strlen(cmd->cmd); Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- v1 -> v2: - new patch --- common/fastboot.c | 14 +++++--------- include/fastboot.h | 3 ++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/common/fastboot.c b/common/fastboot.c index e85cc6d8aaf8..dc66d7123b02 100644 --- a/common/fastboot.c +++ b/common/fastboot.c @@ -287,13 +287,6 @@ static void cb_reboot(struct fastboot *fb, const char *cmd) restart_machine(); } -static int strcmp_l1(const char *s1, const char *s2) -{ - if (!s1 || !s2) - return -1; - return strncmp(s1, s2, strlen(s1)); -} - static void cb_getvar(struct fastboot *fb, const char *cmd) { struct fb_variable *var; @@ -815,10 +808,13 @@ static void fb_run_command(struct fastboot *fb, const char *cmdbuf, console_countdown_abort("fastboot"); for (i = 0; i < num_commands; i++) { + size_t cmdlen; + cmd = &cmds[i]; - if (!strcmp_l1(cmd->cmd, cmdbuf)) { - cmd->cb(fb, cmdbuf + strlen(cmd->cmd)); + cmdlen = str_has_prefix(cmdbuf, cmd->cmd); + if (cmdlen) { + cmd->cb(fb, cmdbuf + cmdlen); return; } diff --git a/include/fastboot.h b/include/fastboot.h index cd415847e348..4b2fdf3190b2 100644 --- a/include/fastboot.h +++ b/include/fastboot.h @@ -87,7 +87,8 @@ int fastboot_tx_print(struct fastboot *fb, enum fastboot_msg_type type, const char *fmt, ...); void fastboot_start_download_generic(struct fastboot *fb); void fastboot_download_finished(struct fastboot *fb); -void fastboot_exec_cmd(struct fastboot *fb, const char *cmdbuf); +void fastboot_exec_cmd(struct fastboot *fb, const char *cmdbuf) + __attribute__((nonnull)); void fastboot_abort(struct fastboot *fb); #endif -- 2.39.2