atexit() isn't really appropriate for a library.
[oweals/opkg-lede.git] / libopkg / libopkg.c
index c57ad0a8810caf37ee008e04c083aa359e39cdaf..37770eb880f3b11757d1dd67ac31174b2f0c2992 100644 (file)
@@ -1,4 +1,4 @@
-/* opkglib.c - the itsy package management system
+/* opkglib.c - the opkg package management system
 
    Florina Boor
 
@@ -15,9 +15,6 @@
    General Public License for more details.
 */
 
-#ifdef OPKG_LIB
-
-#include "opkg.h"
 #include "includes.h"
 #include "libopkg.h"
 
 #include "opkg_cmd.h"
 #include "file_util.h"
 
-
-
-opkg_message_callback opkg_cb_message = NULL;
-opkg_response_callback opkg_cb_response = NULL;
-opkg_status_callback opkg_cb_status = NULL;
-opkg_list_callback opkg_cb_list = NULL;
-
-
-int
-opkg_init (opkg_message_callback mcall, 
-           opkg_response_callback rcall,
-           args_t * args)
-{
-       opkg_cb_message = mcall;
-       opkg_cb_response = rcall;
-
-       args_init (args);
-
-       return 0;
-}
-
-
-int
-opkg_deinit (args_t * args)
-{
-       args_deinit (args);
-       opkg_cb_message = NULL;
-       opkg_cb_response = NULL;
-
-       /* place other cleanup stuff here */
-
-       return 0;
-}
-
-
-int
-opkg_packages_list(args_t *args, 
-                   const char *packages, 
-                   opkg_list_callback cblist,
-                   void *userdata)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       opkg_cb_list = cblist;
-       /* we need to do this because of static declarations, 
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("list");
-       if (packages)
-               err = opkg_cmd_exec (cmd, &opkg_conf, 1, &packages, userdata);
-       else
-               err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, userdata);
-       opkg_cb_list = NULL;
-       opkg_conf_deinit (&opkg_conf);
-       return (err);
-}
-
-
-int
-opkg_packages_status(args_t *args,
-                     const char *packages,
-                     opkg_status_callback cbstatus,
-                     void *userdata)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       opkg_cb_status = cbstatus;
-
-       /* we need to do this because of static declarations,
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("status");
-       if (packages)
-               err = opkg_cmd_exec (cmd, &opkg_conf, 1, &packages, userdata);
-       else
-               err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, userdata);
-
-       opkg_cb_status = NULL;
-       opkg_conf_deinit (&opkg_conf);
-       return (err);
-}
-
-
-int
-opkg_packages_info(args_t *args,
-                   const char *packages,
-                   opkg_status_callback cbstatus,
-                   void *userdata)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       opkg_cb_status = cbstatus;
-
-       /* we need to do this because of static declarations,
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("info");
-       if (packages)
-               err = opkg_cmd_exec (cmd, &opkg_conf, 1, &packages, userdata);
-       else
-               err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, userdata);
-
-       opkg_cb_status = NULL;
-       opkg_conf_deinit (&opkg_conf);
-       return (err);
-}
-
-
-int
-opkg_packages_install (args_t * args, const char *name)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       /* this error should be handled in application */
-       if (!name || !strlen (name))
-               return (-1);
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       /* we need to do this because of static declarations,
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("install");
-       err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, NULL);
-
-       opkg_conf_deinit(&opkg_conf);
-       return (err);
-}
-
-
-int
-opkg_packages_remove(args_t *args, const char *name, int purge)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       /* this error should be handled in application */
-       if (!name || !strlen (name))
-               return (-1);
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       /* we need to do this because of static declarations, 
-        * maybe a good idea to change */
-       if (purge)
-               cmd = opkg_cmd_find ("purge");
-       else
-               cmd = opkg_cmd_find ("remove");
-
-       err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, NULL);
-       
-       opkg_conf_deinit(&opkg_conf);
-       return (err);
-}
-
-
-int 
-opkg_lists_update(args_t *args)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       /* we need to do this because of static declarations, 
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("update");
-
-       err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, NULL);
-       
-       opkg_conf_deinit(&opkg_conf);
-       return (err);
-}
-
-
-int 
-opkg_packages_upgrade(args_t *args)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       /* we need to do this because of static declarations, 
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("upgrade");
-
-       err = opkg_cmd_exec (cmd, &opkg_conf, 0, NULL, NULL);
-       
-       opkg_conf_deinit(&opkg_conf);
-       return (err);
-}
-
-
-int
-opkg_packages_download (args_t * args, const char *name)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       /* this error should be handled in application */
-       if (!name || !strlen (name))
-               return (-1);
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       /* we need to do this because of static declarations,
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("download");
-       err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, NULL);
-
-       opkg_conf_deinit(&opkg_conf);
-       return (err);
-}
-
-
-int
-opkg_package_files(args_t *args, 
-                   const char *name, 
-                   opkg_list_callback cblist,
-                   void *userdata)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-
-       /* this error should be handled in application */
-       if (!name || !strlen (name))
-               return (-1);
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       opkg_cb_list = cblist;
-       
-       /* we need to do this because of static declarations, 
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("files");
-
-       err = opkg_cmd_exec (cmd, &opkg_conf, 1, &name, userdata);
-       
-       opkg_cb_list = NULL;
-       opkg_conf_deinit(&opkg_conf);
-       return (err);
-}
-
-
-int 
-opkg_file_search(args_t *args, 
-                const char *file,
-                               opkg_list_callback cblist,
-                void *userdata)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-       
-       /* this error should be handled in application */
-       if (!file || !strlen (file))
-               return (-1);
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       opkg_cb_list = cblist;
-
-       /* we need to do this because of static declarations, 
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find ("search");
-       err = opkg_cmd_exec (cmd, &opkg_conf, 1, &file, userdata);
-       
-       opkg_cb_list = NULL;
-       opkg_conf_deinit(&opkg_conf);
-       return(err);
-}
-
-
-int 
-opkg_file_what(args_t *args, const char *file, const char* command)
-{
-       opkg_cmd_t *cmd;
-       opkg_conf_t opkg_conf;
-       int err;
-       
-       /* this error should be handled in application */
-       if (!file || !strlen (file))
-               return (-1);
-
-       err = opkg_conf_init (&opkg_conf, args);
-       if (err)
-       {
-               return err;
-       }
-
-       /* we need to do this because of static declarations, 
-        * maybe a good idea to change */
-       cmd = opkg_cmd_find (command);
-       err = opkg_cmd_exec (cmd, &opkg_conf, 1, &file, NULL);
-       
-       opkg_conf_deinit(&opkg_conf);
-       return(err);
-}
-
-#define opkg_package_whatdepends(args,file) opkg_file_what(args,file,"whatdepends")
-#define opkg_package_whatrecommends(args, file) opkg_file_what(args,file,"whatrecommends")
-#define opkg_package_whatprovides(args, file) opkg_file_what(args,file,"whatprovides")
-#define opkg_package_whatconflicts(args, file) opkg_file_what(args,file,"whatconflicts")
-#define opkg_package_whatreplaces(args, file) opkg_file_what(args,file,"whatreplaces")
-
-
-int default_opkg_message_callback(opkg_conf_t *conf, message_level_t level, 
-                                 char *msg)
-{
-     if (conf && (conf->verbosity < level)) {
-         return 0;
-     } else {
-#ifdef OPKG_LIB
-          if ( level == OPKG_ERROR ){
-             push_error_list(&error_list, msg); 
-//          printf(msg);
-          } else
-#endif
-            printf(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(question);
-     fflush(stdout);
-     do {
-         response = (char *)file_read_line_alloc(stdin);
-     } while (response == NULL);
-     return response;
-}
+#include "opkg_message.h"
+#include "opkg_error.h"
 
 /* This is used for backward compatibility */
 int
@@ -480,27 +65,19 @@ opkg_op (int argc, char *argv[])
              !strcmp(cmd_name,"compare_versions") ||
              !strcmp(cmd_name,"compare-versions") ||
              !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;
        }
 
-       args_deinit (&args);
-
-       opkg_cb_message = default_opkg_message_callback;
-       opkg_cb_response = default_opkg_response_callback;
-       opkg_cb_status = default_opkg_status_callback;
-       if ( strcmp(cmd_name, "files")==0)
-            opkg_cb_list = default_opkg_files_callback;
-       else
-            opkg_cb_list = default_opkg_list_callback;
-
        cmd = opkg_cmd_find (cmd_name);
        if (cmd == NULL)
        {
@@ -519,9 +96,10 @@ opkg_op (int argc, char *argv[])
 
        err = opkg_cmd_exec (cmd, &opkg_conf, argc - optind, (const char **) (argv + optind), NULL);
 
+#ifdef HAVE_CURL
+       opkg_curl_cleanup();
+#endif
        opkg_conf_deinit (&opkg_conf);
 
        return err;
 }
-
-#endif /* OPKG_LIB */