view rvinterf/asyncshell/usercmd.c @ 1011:6d9b10633f10 default tip

etmsync Pirelli IMEI retrieval: fix poor use of printf() Bug reported by Vadim Yanitskiy <fixeria@osmocom.org>: the construct where a static-allocated string was passed to printf() without any format arguments causes newer compilers to report a security problem. Given that formatted output is not needed here, just fixed string output, change printf() to fputs(), and direct the error message to stderr while at it.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 23 May 2024 17:29:57 +0000
parents b55a81ce7497
children
line wrap: on
line source

/*
 * This module implements interactive fc-shell command dispatch.
 */

#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>

extern char usercmd[];

extern void cmd_batt_interactive();
extern void cmd_disable();
extern void cmd_enable();
extern void cmd_help();
extern void cmd_key_interactive();
extern void cmd_keydown_interactive();
extern void cmd_keyup_interactive();
extern void cmd_poweroff();
extern void cmd_sendat();
extern void cmd_send_interactive();
extern void cmd_sp_interactive();
extern void cmd_tch_dispatch();
extern void cmd_tchdl_interactive();
extern void cmd_tgtreset();
extern void cmd_unterm();

void
cmd_exit()
{
	tty_cleanup();
	exit(0);
}

static struct cmdtab {
	char *cmd;
	void (*func)();
} cmdtab[] = {
	{"batt", cmd_batt_interactive},
	{"disable", cmd_disable},
	{"enable", cmd_enable},
	{"exit", cmd_exit},
	{"help", cmd_help},
	{"key", cmd_key_interactive},
	{"keydown", cmd_keydown_interactive},
	{"keyup", cmd_keyup_interactive},
	{"poweroff", cmd_poweroff},
	{"quit", cmd_exit},
	{"send", cmd_send_interactive},
	{"sp", cmd_sp_interactive},
	{"str", cmd_sendat},
	{"tch", cmd_tch_dispatch},
	{"tch-dl", cmd_tchdl_interactive},
	{"tgtreset", cmd_tgtreset},
	{"unterm", cmd_unterm},
	{0, 0}
};

void
dispatch_user_cmd()
{
	char *cp, *np;
	struct cmdtab *tp;

	for (cp = usercmd; isspace(*cp); cp++)
		;
	if (!*cp || *cp == '#')
		return;
	if (!strncmp(cp, "AT", 2) || !strncmp(cp, "at", 2)) {
		cmd_sendat(cp);
		return;
	}
	for (np = cp; *cp && !isspace(*cp); cp++)
		;
	if (*cp)
		*cp++ = '\0';
	for (tp = cmdtab; tp->cmd; tp++)
		if (!strcmp(tp->cmd, np))
			break;
	if (tp->func)
		tp->func(cp);
	else
		printf("error: no such command\n");
}