#define _POSIX_C_SOURCE 2 #include #include #include #include #include #include "zpm.h" void usage(void) { fprintf(stderr, "zpm-findpkg [-I] [-s ...] [-S ] [package]\n"); } int main(int ac, char **av){ int opt, argn; struct zpm pkg; char *dbfile; int fail = 0; int set = 0, clear = 0, showcurrent = 0; int check = 0, quiet = 0, checkfail = 0, verbose = 0; char hash[ZPM_HASH_STRLEN+1] = { 0 }; char *pkgid = 0, *current = 0, *display = hash; dbfile = getenv("ZPMDB"); if (!dbfile) { dbfile = "/var/lib/zpm/local.db"; } /* set -s * clear -S * show current -e * check -c */ while ((opt = getopt(ac, av, "f:sScqev")) != -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; case 'v': verbose = 1; break; default: usage(); exit(EXIT_FAILURE); break; } } argn = optind; if (!dbfile) { fprintf(stderr, "must specify db\n"); return 1; } if (zpm_open(&pkg, dbfile)) { pkgid = zpm_findpkg(&pkg, av[argn], NULL); if (!pkgid) { exit(EXIT_FAILURE); } if (check || showcurrent) { current = zpm_package_gethash(&pkg, pkgid, 0); } if (check) { fail = zpm_package_checkhash(&pkg, pkgid, 0); } else if (set) { fail = zpm_package_sethash(&pkg, pkgid, hash); } else if (clear) { fail = zpm_package_clearhash(&pkg, pkgid); } else if (showcurrent) { display = current; } else { fail = zpm_package_hash(&pkg, pkgid, hash); } zpm_close(&pkg); if (display && !quiet && !fail) { if (verbose) { printf("%s ", pkgid); } printf("%s\n", display); } free(current); } return checkfail ? EXIT_FAILURE : 0; }