/* 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"
-
-opkg_status_callback opkg_cb_status = NULL;
-opkg_list_callback opkg_cb_list = NULL;
-
-int default_opkg_message_callback(opkg_conf_t *conf, message_level_t level,
- char *msg)
-{
- if (conf && (conf->verbosity < level)) {
- return 0;
- } else {
- if ( level == OPKG_ERROR ){
- push_error_list(msg);
- } else
- printf("%s",msg);
- }
- return 0;
-}
-
-int default_opkg_list_callback(char *name, char *desc, char *version,
- pkg_state_status_t status, void *userdata)
-{
- if (desc)
- printf("%s - %s - %s\n", name, version, desc);
- else
- printf("%s - %s\n", name, version);
- return 0;
-}
-
-int default_opkg_files_callback(char *name, char *desc, char *version,
- pkg_state_status_t status, void *userdata)
-{
- if (desc)
- printf("%s\n", desc);
- return 0;
-}
-
-int default_opkg_status_callback(char *name, int istatus, char *desc,
- void *userdata)
-{
- printf("%s\n", desc);
- return 0;
-}
-
-char* default_opkg_response_callback(char *question)
-{
- char *response = NULL;
- printf("%s",question);
- fflush(stdout);
- do {
- response = (char *)file_read_line_alloc(stdin);
- } while (response == NULL);
- return response;
-}
-/* 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;
-
- opkg_cb_message = default_opkg_message_callback;
- opkg_cb_response = default_opkg_response_callback;
- opkg_cb_status = default_opkg_status_callback;
-
-
- err = opkg_conf_init (&opkg_conf, &args);
- args_deinit (&args);
- if (err)
- {
- print_error_list();
- free_error_list();
- return err;
- }
-
- if ( strcmp(cmd_name, "files")==0)
- opkg_cb_list = default_opkg_files_callback;
- else
- opkg_cb_list = default_opkg_list_callback;
+ 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
+err1:
+ opkg_conf_deinit ();
- opkg_conf_deinit (&opkg_conf);
+err0:
+ print_error_list();
+ free_error_list();
- return err;
+ return -1;
}