/* opkglib.c - the opkg package management system
- Florina Boor
+ Florian Boor
Copyright (C) 2003 kernel concepts
*/
#include "includes.h"
-#include "libopkg.h"
-#include "args.h"
#include "opkg_conf.h"
#include "opkg_cmd.h"
#include "file_util.h"
+#include "args.h"
+#include "opkg_download.h"
#include "opkg_message.h"
-#include "opkg_error.h"
-/* This is used for backward compatibility */
+/* This is used for backwards compatibility */
int
opkg_op (int argc, char *argv[])
{
- int err, optind;
- args_t args;
+ int opts;
char *cmd_name;
opkg_cmd_t *cmd;
- opkg_conf_t opkg_conf;
+ int nocheckfordirorfile = 0;
+ int noreadfeedsfile = 0;
- args_init (&args);
+ conf->verbosity = NOTICE;
- optind = args_parse (&args, argc, argv);
- if (optind == argc || optind < 0)
+ opts = args_parse (argc, argv);
+ if (opts == argc || opts < 0)
{
args_usage ("opkg must have one sub-command argument");
}
- cmd_name = argv[optind++];
-/* Pigi: added a flag to disable the checking of structures if the command does not need to
- read anything from there.
-*/
+ cmd_name = argv[opts++];
+
if ( !strcmp(cmd_name,"print-architecture") ||
!strcmp(cmd_name,"print_architecture") ||
!strcmp(cmd_name,"print-installation-architecture") ||
!strcmp(cmd_name,"print_installation_architecture") )
- args.nocheckfordirorfile = 1;
+ nocheckfordirorfile = 1;
-/* Pigi: added a flag to disable the reading of feed files if the command does not need to
- read anything from there.
-*/
if ( !strcmp(cmd_name,"flag") ||
!strcmp(cmd_name,"configure") ||
!strcmp(cmd_name,"remove") ||
!strcmp(cmd_name,"list_installed") ||
!strcmp(cmd_name,"list-installed") ||
!strcmp(cmd_name,"status") )
- args.noreadfeedsfile = 1;
-
-
- err = opkg_conf_init (&opkg_conf, &args);
- args_deinit (&args);
- if (err)
- {
- print_error_list();
- free_error_list();
- return err;
- }
+ noreadfeedsfile = 1;
cmd = opkg_cmd_find (cmd_name);
if (cmd == NULL)
args_usage (NULL);
}
- if (cmd->requires_args && optind == argc)
+ conf->pfm = cmd->pfm;
+
+ if (opkg_conf_init())
+ goto err0;
+
+ if (!nocheckfordirorfile) {
+ if (!noreadfeedsfile) {
+ if (pkg_hash_load_feeds())
+ goto err1;
+ }
+
+ if (pkg_hash_load_status_files())
+ goto err1;
+ }
+
+ if (cmd->requires_args && opts == argc)
{
fprintf (stderr,
"%s: the ``%s'' command requires at least one argument\n",
- __FUNCTION__, cmd_name);
+ argv[0], cmd_name);
args_usage (NULL);
}
- err = opkg_cmd_exec (cmd, &opkg_conf, argc - optind, (const char **) (argv + optind), NULL);
+ if (opkg_cmd_exec (cmd, argc - opts, (const char **) (argv + opts)))
+ goto err2;
+
+ print_error_list();
+ free_error_list();
+ return 0;
+
+err2:
#ifdef HAVE_CURL
opkg_curl_cleanup();
#endif
- opkg_conf_deinit (&opkg_conf);
+err1:
+ opkg_conf_deinit ();
+
+err0:
+ print_error_list();
+ free_error_list();
- return err;
+ return -1;
}