#include "command.h"
#include "common.h"
-#include <ctype.h>
#include <setjmp.h>
#include "config.h"
#include "env.h"
#include "debug.h"
#include "getopt-min.h"
+#include "strerror.h"
#define DEBUG_CMD 0 /* set to 1 to debug */
#define OPT_USAGE 0x08
#define OPT_LONG 0x10
- /* reset getopt() */
- optind = 0;
-
int opt;
while ((opt = getopt(argc, argv, PSTR("afk"))) != -1) {
switch (opt) {
* @param argv Arguments
* @return 0 if command succeeded, else non-zero (CMD_RET_...)
*/
-command_ret_t cmd_call(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
+static command_ret_t cmd_call(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
{
command_ret_t result;
/* If OK so far, then do the command */
if (!rc) {
+ optind = 0; /* reset getopt() */
cmd_invocation_ptr = cmdtp;
rc = cmd_call(cmdtp, flag, argc, argv);
*repeatable &= (cmdtp->flags & CTBL_RPT) != 0;
return 0;
}
-
-void cmd_error(const char *fmt, ...)
+void cmd_error(int status, int errnum, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
print_prefixed_name(cmd_invocation_ptr);
- my_puts_P(PSTR(": "));
- vfprintf_P(stdout, fmt, ap);
+ if (fmt != NULL) {
+ my_puts_P(PSTR(": "));
+ vfprintf_P(stdout, fmt, ap);
+ }
va_end(ap);
+
+ if (errnum != 0)
+ printf_P(PSTR(": %S"), my_strerror_P(errnum));
+
putchar('\n');
_delay_ms(20);
- //command_ret = CMD_RET_FAILURE;
+
+ if (status != 0) {
+ longjmp(cmd_jbuf, 1);
+ }
}