#include "zpm.h"
-static int found = 0;
-
void usage(void) {
fprintf(stderr, "zpm-findpkg [-I] [-s <status> ...] [-S <status>] [package]\n");
}
struct zpm pkg;
char *dbfile;
- int set = 0;
+ int set = 0, clear = 0, showcurrent = 0;
int check = 0;
int quiet = 0;
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);
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;
}