&diff_state_command,
&diff_images_command,
&dump_command,
+ &dump_images_command,
+ &pickle_command,
+ &sed_command,
+ &repack_command,
+ &retrace_command,
&trace_command,
+ &trim_command,
&help_command
};
+/* Aliases provide a mechanism to allow compatibility with old command
+ * names (such as "retrace") for current commands (such as the replay
+ * command). */
+typedef struct {
+ const char *name;
+ const Command *command;
+} Alias;
+
+static const Alias aliases[] = {
+ { "retrace", &retrace_command }
+};
+
static void
usage(void)
{
const Command *command;
int i;
- if (argc != 1) {
+ if (argc != 2) {
help_usage();
return 0;
}
- char *command_name = argv[0];
+ char *command_name = argv[1];
for (i = 0; i < ARRAY_SIZE(commands); i++) {
command = commands[i];
{
const char *command_name;
const Command *command;
+ const Alias *alias;
int i;
for (i = 1; i < argc; ++i) {
return 1;
}
- command_name = argv[i++];
+ command_name = argv[i];
argc -= i;
argv = &argv[i];
return (command->function) (argc, argv);
}
+ for (i = 0; i < ARRAY_SIZE(aliases); i++) {
+ alias = &aliases[i];
+
+ if (strcmp(command_name, alias->name) == 0)
+ return (alias->command->function) (argc, argv);
+ }
+
std::cerr << "Error: unknown command " << command_name
<< " (see \"apitrace help\").\n";
- return 1;
+ return 1;
}