#include "opkg.h"
#include "opkg_conf.h"
-#include "args.h"
#include "opkg_install.h"
#include "opkg_configure.h"
#include <libbb/libbb.h>
-args_t *args;
-
#define opkg_assert(expr) if (!(expr)) { \
printf ("opkg: file %s: line %d (%s): Assertation '%s' failed",\
__FILE__, __LINE__, __PRETTY_FUNCTION__, # expr); abort (); }
int
opkg_new()
{
- int err;
+ if (opkg_conf_init())
+ goto err0;
- args = xcalloc(1, sizeof(args_t));
- args_init(args);
+ if (pkg_hash_load_feeds())
+ goto err1;
- err = opkg_conf_init(args);
- if (err) {
- free(args);
- return -1;
- }
+ if (pkg_hash_load_status_files())
+ goto err1;
return 0;
+
+err1:
+ pkg_hash_deinit();
+err0:
+ opkg_conf_deinit();
+ return -1;
}
void
opkg_curl_cleanup();
#endif
opkg_conf_deinit();
- args_deinit(args);
- free(args);
}
int
opkg_re_read_config_files(void)
{
- /* Unfortunately, the easiest way to re-read the config files right now is to
- * throw away conf and start again */
- opkg_free();
- memset(conf, '\0', sizeof(opkg_conf_t));
- return opkg_new();
+ pkg_hash_deinit();
+ pkg_hash_init();
+
+ if (pkg_hash_load_feeds())
+ goto err;
+
+ if (pkg_hash_load_status_files())
+ goto err;
+
return 0;
+
+err:
+ pkg_hash_deinit();
+ return -1;
}
void
return result;
}
+static int
+pkg_compare_names_and_version(const void *a0, const void *b0)
+{
+ const pkg_t *a = *(const pkg_t **)a0;
+ const pkg_t *b = *(const pkg_t **)b0;
+ int ret;
+
+ ret = strcmp(a->name, b->name);
+
+ if (ret == 0)
+ ret = pkg_compare_versions(a, b);
+
+ return ret;
+}
int
opkg_list_packages(opkg_package_callback_t callback, void *user_data)
all = pkg_vec_alloc();
pkg_hash_fetch_available(all);
+
+ pkg_vec_sort(all, pkg_compare_names_and_version);
+
for (i = 0; i < all->len; i++) {
pkg_t *pkg;