X-Git-Url: https://pd.if.org/git/?p=zpackage;a=blobdiff_plain;f=src%2Ffindpkg.c;h=775269ff9a24dcf7f64cd1561d40faaac4526464;hp=4ee3f120e9131d84efd401fd5c9b9dd1b8ce6981;hb=b6f9b692cd319ffbe43fbd191b13613532d82e37;hpb=a068919e82f0565035293903b85d58c21d008679 diff --git a/src/findpkg.c b/src/findpkg.c index 4ee3f12..775269f 100644 --- a/src/findpkg.c +++ b/src/findpkg.c @@ -15,6 +15,8 @@ int main(int ac, char **av){ int opt, argn; struct zpm zpm; char *dbfile = 0, *pkgstr = 0, *pkgid = 0; + int range = 0, wantleast = 0, argismax = 0; + char *minpkg = 0, *maxpkg = 0; char *sql; sqlite3_str *include; @@ -29,7 +31,7 @@ int main(int ac, char **av){ include = sqlite3_str_new(NULL); exclude = sqlite3_str_new(NULL); - while ((opt = getopt(ac, av, "f:s:S:I")) != -1) { + while ((opt = getopt(ac, av, "f:s:S:Imrl")) != -1) { switch (opt) { case 'f': dbfile = optarg; break; case 's': sqlite3_str_appendf(include,",%Q", optarg); @@ -38,6 +40,9 @@ int main(int ac, char **av){ break; case 'I': sqlite3_str_appendall(include,",'installed'"); break; + case 'l': wantleast = 1; break; + case 'r': range = 1; break; + case 'm': argismax = 1; range = 1; break; default: usage(); exit(EXIT_FAILURE); @@ -46,6 +51,20 @@ int main(int ac, char **av){ } argn = optind; + if (ac < argn) { + usage(); + exit(EXIT_FAILURE); + } + + pkgstr = minpkg = av[argn]; + if (ac > argn) { + maxpkg = av[argn+1]; + } + + if (maxpkg) { + range = 1; + } + if (!dbfile) { fprintf(stderr, "must specify db\n"); return 1; @@ -68,13 +87,18 @@ int main(int ac, char **av){ excludes+1); } - if (ac >= argn) { - pkgstr = av[argn]; - } - sql = sqlite3_str_value(query); - pkgid = zpm_findpkg(&zpm, pkgstr, sql); + if (range) { + if (argismax) { + /* swap the sense of the arguments */ + minpkg = maxpkg; + maxpkg = pkgstr; + } + pkgid = zpm_findpkg_range(&zpm, minpkg, maxpkg, sql, wantleast); + } else { + pkgid = zpm_findpkg(&zpm, pkgstr, sql); + } sqlite3_free(sql); if (pkgid) {