#define NAME(n, d)
#undef ENTRY
-#define ENTRY(n, h, f) \
+#define ENTRY(n, h, f, ...) \
static int f(int argc, char **argv, struct command *command, struct plugin *plugin);
#undef COMMAND_LIST
#undef NAME
#define NAME(n, d)
-#undef ENTRY
-#define ENTRY(n, h, f) \
+#undef ENTRY_W_ALIAS
+#define ENTRY_W_ALIAS(n, h, f, a) \
static struct command f ## _cmd = { \
.name = n, \
.help = h, \
.fn = f, \
+ .alias = a, \
};
+#undef ENTRY_WO_ALIAS
+#define ENTRY_WO_ALIAS(n, h, f) \
+ ENTRY_W_ALIAS(n, h, f, NULL)
+
+#undef ENTRY_SEL
+#define ENTRY_SEL(n, h, f, a, CMD, ...) CMD
+
+#undef ENTRY
+#define ENTRY(...) \
+ ENTRY_SEL(__VA_ARGS__, ENTRY_W_ALIAS, ENTRY_WO_ALIAS)(__VA_ARGS__)
+
#undef COMMAND_LIST
#define COMMAND_LIST(args...) args
#define NAME(n, d)
#undef ENTRY
-#define ENTRY(n, h, f) &f ## _cmd,
+#define ENTRY(n, h, f, ...) &f ## _cmd,
#undef COMMAND_LIST
#define COMMAND_LIST(args...) \
ENTRY("set-feature", "Set a feature and show the resulting value", set_feature)
ENTRY("set-property", "Set a property and show the resulting value", set_property)
ENTRY("format", "Format namespace with new block format", format)
- ENTRY("fw-activate", "Activate new firmware slot", fw_activate)
+ ENTRY("fw-commit", "Verify and commit firmware to a specific slot (fw-activate in old version < 1.2)", fw_commit, "fw-activate")
ENTRY("fw-download", "Download new firmware", fw_download)
ENTRY("admin-passthru", "Submit an arbitrary admin command, return results", admin_passthru)
ENTRY("io-passthru", "Submit an arbitrary IO command, return results", io_passthru)
}
}
-static int fw_activate(int argc, char **argv, struct command *cmd, struct plugin *plugin)
+static int fw_commit(int argc, char **argv, struct command *cmd, struct plugin *plugin)
{
const char *desc = "Verify downloaded firmware image and "\
"commit to specific firmware slot. Device is not automatically "\
if (!strcmp(str, "version"))
return version(plugin);
if (strcmp(str, cmd->name))
- continue;
+ if (!cmd->alias || (cmd->alias && strcmp(str, cmd->alias)))
+ continue;
return (cmd->fn(argc, argv, cmd, plugin));
}
char *name;
char *help;
int (*fn)(int argc, char **argv, struct command *command, struct plugin *plugin);
+ char *alias;
};
void usage(struct plugin *plugin);