X-Git-Url: https://pd.if.org/git/?p=zpackage;a=blobdiff_plain;f=zpm-search.c;h=9b6ec887cd015f45b88f72e0de32df74d31303a2;hp=a98aa002cd3abe8b570bb6454d4c5de3d2a419ac;hb=f95bbd4578ad67bd09e925bd91da2b0ab159ef9c;hpb=219c3e5d0c097282ac2546ebc0f1c31c9e60fa43 diff --git a/zpm-search.c b/zpm-search.c index a98aa00..9b6ec88 100644 --- a/zpm-search.c +++ b/zpm-search.c @@ -271,6 +271,10 @@ with pkglibs as (\ where PL.pkgid = %Q\ "; +static int afind_strcmp(const void *a, const void *b) { + return strcmp(a, b); +} + void checklibs(struct search_ctl *opts, jsw_hash_t *check, jsw_hash_t *forlibs, jsw_hash_t *nfound) { char *pkgid = 0, *pkgfile = 0; @@ -286,8 +290,8 @@ void checklibs(struct search_ctl *opts, jsw_atrav_t *i; char *soname; - checked = jsw_anew((cmp_f)strcmp, (dup_f)strdup, (rel_f)free); - checked_libs = jsw_anew((cmp_f)strcmp, (dup_f)strdup, (rel_f)free); + checked = jsw_anew(afind_strcmp, (dup_f)strdup, (rel_f)free); + checked_libs = jsw_anew(afind_strcmp, (dup_f)strdup, (rel_f)free); while (jsw_hsize(check) > 0) { free(pkgid); @@ -306,11 +310,22 @@ void checklibs(struct search_ctl *opts, if (jsw_afind(checked, pkgid)) { /* already checked this one */ + /* fprintf(stderr, "already checked %s\n", pkgid); */ continue; } + fprintf(stderr, "checking libs for %s\n", pkgid); /* we do this now so we catch self deps */ - jsw_ainsert(checked, pkgid); + if (!jsw_ainsert(checked, pkgid)) { + fprintf(stderr, "checked insert failed\n"); + exit(EXIT_FAILURE); + } + + if (!jsw_afind(checked, pkgid)) { + /* already checked this one */ + fprintf(stderr, "checked find failed\n"); + exit(EXIT_FAILURE); + } /* get the libraries needed by this package */ if (!zpm_open(&src, pkgfile)) { @@ -319,7 +334,7 @@ void checklibs(struct search_ctl *opts, } if (needed) jsw_adelete(needed); - needed = jsw_anew((cmp_f)strcmp, (dup_f)strdup, (rel_f)free); + needed = jsw_anew(afind_strcmp, (dup_f)strdup, (rel_f)free); libs = zpm_libraries_needed(&src, pkgid, needed); zpm_close(&src); @@ -333,16 +348,18 @@ void checklibs(struct search_ctl *opts, int found; struct pkgloc pkginfo; - if (opts->verbose > 1) { - fprintf(stderr, "checking for %s\n", soname); - } /* if it's in checked_libs, we've already looked at this one */ if (jsw_afind(checked_libs, soname)) { if (opts->verbose > 1) { - fprintf(stderr, "already checked for %s\n", soname); + fprintf(stderr, "already checked %s\n", soname); } continue; } +#if 0 + if (opts->verbose > 1) { + fprintf(stderr, "checking for %s\n", soname); + } +#endif /* haven't found this soname */ jsw_ainsert(checked_libs, soname); @@ -497,15 +514,24 @@ int main(int ac, char *av[]) { fprintf(stderr, "\n"); } - packages = jsw_hnew(ac,NULL,(cmp_f)strcmp,(keydup_f)strdup, + /* direct packages asked for */ + packages = jsw_hnew(ac,NULL,afind_strcmp,(keydup_f)strdup, (itemdup_f)strdup,free,free); - check = jsw_hnew(ac,NULL,(cmp_f)strcmp,(keydup_f)strdup, + + /* packages we need to check for libs */ + check = jsw_hnew(ac,NULL,afind_strcmp,(keydup_f)strdup, (itemdup_f)strdup,free,free); - forlibs = jsw_hnew(ac,NULL,(cmp_f)strcmp,(keydup_f)strdup, + + /* packages we will also need for library dependences */ + forlibs = jsw_hnew(ac,NULL,afind_strcmp,(keydup_f)strdup, (itemdup_f)strdup,free,free); - nolib = jsw_hnew(ac,NULL,(cmp_f)strcmp,(keydup_f)strdup, + + /* libraries we didn't find */ + nolib = jsw_hnew(ac,NULL,afind_strcmp,(keydup_f)strdup, (itemdup_f)strdup,free,free); - nfound = jsw_anew((cmp_f)strcmp, (dup_f)strdup, (rel_f)free); + + /* packages asked for that we can't find */ + nfound = jsw_anew(afind_strcmp, (dup_f)strdup, (rel_f)free); int arg; for (arg = argn; arg < ac; arg++) { @@ -522,7 +548,6 @@ int main(int ac, char *av[]) { } else { jsw_ainsert(nfound, av[arg]); } - } if (findlibs) {