X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-packagehash.c;h=6ca53af3c57274fda0b22c2d8ee272ad70387bc4;hb=d92a98237b9bccf4e7017dce7a294ece618cf1fc;hp=534f6ad7de7b4eb4d958f48a6436ccb0a25d2587;hpb=30aa9bfe1e9a0e682f7c942b8e68054551f14857;p=zpackage diff --git a/zpm-packagehash.c b/zpm-packagehash.c index 534f6ad..6ca53af 100644 --- a/zpm-packagehash.c +++ b/zpm-packagehash.c @@ -8,8 +8,6 @@ #include "zpm.h" -static int found = 0; - void usage(void) { fprintf(stderr, "zpm-findpkg [-I] [-s ...] [-S ] [package]\n"); } @@ -19,7 +17,7 @@ int main(int ac, char **av){ struct zpm pkg; char *dbfile; - int set = 0; + int set = 0, clear = 0, showcurrent = 0; int check = 0; int quiet = 0; @@ -28,12 +26,19 @@ int main(int ac, char **av){ dbfile = "/var/lib/zpm/local.db"; } - while ((opt = getopt(ac, av, "f:scq")) != -1) { + /* set -s + * clear -S + * show current -e + * check -c + */ + while ((opt = getopt(ac, av, "f:sScqe")) != -1) { switch (opt) { case 'f': dbfile = optarg; break; case 's': set = 1; break; + case 'S': clear = 1; break; case 'c': check = 1; break; case 'q': quiet = 1; break; + case 'e': showcurrent = 1; break; default: usage(); exit(EXIT_FAILURE); @@ -49,25 +54,39 @@ int main(int ac, char **av){ char *pkgid = av[argn]; char hash[ZPM_HASH_STRLEN+1]; + char *current = 0, *display = hash; + int checkfail = 0; if (zpm_open(&pkg, dbfile)) { + if (check || showcurrent) { + current = zpm_db_string(&pkg, "select hash from packages_pkgid where pkgid = %Q", pkgid); + } + if (check) { - found = zpm_package_hash(&pkg, pkgid, hash); - char *ehash = zpm_db_string(&pkg, "select hash from packages_pkgid where pkgid = %Q", pkgid); - if (ehash && found && !strcmp(ehash, hash)) { - found = 1; - } else { - found = 0; + checkfail = 1; + if (current) { + zpm_package_hash(&pkg, pkgid, hash); + checkfail = strcmp(current, hash); } } else if (set) { - found = zpm_package_sethash(&pkg, pkgid, hash); + zpm_package_sethash(&pkg, pkgid, hash); + } else if (clear) { + zpm_package_sethash(&pkg, pkgid, NULL); + display = NULL; + } else if (showcurrent) { + display = current; } else { - found = zpm_package_hash(&pkg, pkgid, hash); + zpm_package_hash(&pkg, pkgid, hash); + } + + zpm_close(&pkg); + if (current) { + free(current); + } + if (display && !quiet) { + printf("%s\n", display); } } - zpm_close(&pkg); - if (found && !quiet) { - printf("%s\n", hash); - } - return found ? 0 : 1; + + return checkfail ? EXIT_FAILURE : 0; }