+/* XXX: CLEANUP: The usage strings should be incorporated into this
+ array for easier maintenance */
+static opkg_cmd_t cmds[] = {
+ {"update", 0, (opkg_cmd_fun_t) opkg_update_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"upgrade", 1, (opkg_cmd_fun_t) opkg_upgrade_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"list", 0, (opkg_cmd_fun_t) opkg_list_cmd, PFM_SOURCE},
+ {"list_installed", 0, (opkg_cmd_fun_t) opkg_list_installed_cmd,
+ PFM_SOURCE},
+ {"list-installed", 0, (opkg_cmd_fun_t) opkg_list_installed_cmd,
+ PFM_SOURCE},
+ {"list_upgradable", 0, (opkg_cmd_fun_t) opkg_list_upgradable_cmd,
+ PFM_SOURCE},
+ {"list-upgradable", 0, (opkg_cmd_fun_t) opkg_list_upgradable_cmd,
+ PFM_SOURCE},
+ {"list_changed_conffiles", 0,
+ (opkg_cmd_fun_t) opkg_list_changed_conffiles_cmd, PFM_SOURCE},
+ {"list-changed-conffiles", 0,
+ (opkg_cmd_fun_t) opkg_list_changed_conffiles_cmd, PFM_SOURCE},
+ {"info", 0, (opkg_cmd_fun_t) opkg_info_cmd, 0},
+ {"flag", 1, (opkg_cmd_fun_t) opkg_flag_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"status", 0, (opkg_cmd_fun_t) opkg_status_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"install", 1, (opkg_cmd_fun_t) opkg_install_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"remove", 1, (opkg_cmd_fun_t) opkg_remove_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"configure", 0, (opkg_cmd_fun_t) opkg_configure_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"files", 1, (opkg_cmd_fun_t) opkg_files_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"search", 1, (opkg_cmd_fun_t) opkg_search_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"find", 1, (opkg_cmd_fun_t) opkg_find_cmd, PFM_SOURCE},
+ {"download", 1, (opkg_cmd_fun_t) opkg_download_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"compare_versions", 1, (opkg_cmd_fun_t) opkg_compare_versions_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"compare-versions", 1, (opkg_cmd_fun_t) opkg_compare_versions_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"print-architecture", 0, (opkg_cmd_fun_t) opkg_print_architecture_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"print_architecture", 0, (opkg_cmd_fun_t) opkg_print_architecture_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"print-installation-architecture", 0,
+ (opkg_cmd_fun_t) opkg_print_architecture_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"print_installation_architecture", 0,
+ (opkg_cmd_fun_t) opkg_print_architecture_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"depends", 1, (opkg_cmd_fun_t) opkg_depends_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"whatdepends", 1, (opkg_cmd_fun_t) opkg_whatdepends_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"whatdependsrec", 1, (opkg_cmd_fun_t) opkg_whatdepends_recursively_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"whatrecommends", 1, (opkg_cmd_fun_t) opkg_whatrecommends_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"whatsuggests", 1, (opkg_cmd_fun_t) opkg_whatsuggests_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"whatprovides", 1, (opkg_cmd_fun_t) opkg_whatprovides_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"whatreplaces", 1, (opkg_cmd_fun_t) opkg_whatreplaces_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+ {"whatconflicts", 1, (opkg_cmd_fun_t) opkg_whatconflicts_cmd,
+ PFM_DESCRIPTION | PFM_SOURCE},
+};
+
+opkg_cmd_t *opkg_cmd_find(const char *name)
+{
+ int i;
+ opkg_cmd_t *cmd;
+ int num_cmds = sizeof(cmds) / sizeof(opkg_cmd_t);
+
+ for (i = 0; i < num_cmds; i++) {
+ cmd = &cmds[i];
+ if (strcmp(name, cmd->name) == 0)
+ return cmd;
+ }
+
+ return NULL;
+}
+
+int opkg_cmd_exec(opkg_cmd_t * cmd, int argc, const char **argv)
+{
+ return (cmd->fun) (argc, argv);