diff -Nur pacman-2.7.9/doc/pacman.8.in pacman-2.7.9-ore4/doc/pacman.8.in --- pacman-2.7.9/doc/pacman.8.in 2004-07-13 11:46:09.000000000 +0200 +++ pacman-2.7.9-ore4/doc/pacman.8.in 2004-07-13 15:10:50.000000000 +0200 @@ -151,21 +151,17 @@ names are provided, all groups and members will be listed. .TP .B "\-i, \-\-info" -Display information on a given package. If it is used with the \fB-p\fP -option then the .PKGINFO file will be printed. +Display information on a given package. This can be run against the +local package database or can be used on individual .tar.gz packages.. .TP .B "\-l, \-\-list" List all files owned by . Multiple packages can be specified on -the command line. +the command line. This can be run against the local package database or +can be used on individual .tar.gz packages. .TP .B "\-o, \-\-owns " Search for the package that owns . .TP -.B "\-p, \-\-file" -Tells pacman that the package supplied on the command line is a -file, not an entry in the database. Pacman will decompress the -file and query it. This is useful with \fB--info\fP and \fB--list\fP. -.TP .B "\-s, \-\-search " This will search each locally-installed package for names or descriptions that contains . diff -Nur pacman-2.7.9/src/db.c pacman-2.7.9-ore4/src/db.c --- pacman-2.7.9/src/db.c 2004-07-13 11:46:09.000000000 +0200 +++ pacman-2.7.9-ore4/src/db.c 2004-07-13 14:32:43.000000000 +0200 @@ -162,9 +162,6 @@ return(NULL); } - /* we always load DESC */ - inforeq |= INFRQ_DESC; - snprintf(path, PATH_MAX, "%s/%s", db->path, ent->d_name); if(stat(path, &buf)) { /* directory doesn't exist or can't be opened */ @@ -173,6 +170,12 @@ info = newpkg(); + /* get package name and version directly from the directory name */ + if(split_pkgname(ent->d_name, (char *)&info->name, (char *)&info->version) == -1) { + FREEPKG(info); + return(NULL); + } + /* DESC */ if(inforeq & INFRQ_DESC) { snprintf(path, PATH_MAX, "%s/%s/desc", db->path, ent->d_name); @@ -187,7 +190,7 @@ break; } trim(line); - if(!strcmp(line, "%NAME%")) { + /*if(!strcmp(line, "%NAME%")) { if(fgets(info->name, sizeof(info->name), fp) == NULL) { FREEPKG(info); return(NULL); @@ -199,7 +202,7 @@ return(NULL); } trim(info->version); - } else if(!strcmp(line, "%DESC%")) { + } else */if(!strcmp(line, "%DESC%")) { if(fgets(info->desc, sizeof(info->desc), fp) == NULL) { FREEPKG(info); return(NULL); @@ -339,15 +342,17 @@ } /* INSTALL */ - snprintf(path, PATH_MAX, "%s/%s/install", db->path, ent->d_name); - if(!stat(path, &buf)) { - info->scriptlet = 1; + if(inforeq & INFRQ_ALL) { + snprintf(path, PATH_MAX, "%s/%s/install", db->path, ent->d_name); + if(!stat(path, &buf)) { + info->scriptlet = 1; + } } return(info); } -int db_write(pacdb_t *db, pkginfo_t *info) +int db_write(pacdb_t *db, pkginfo_t *info, unsigned int inforeq) { char topdir[PATH_MAX]; FILE *fp = NULL; @@ -367,87 +372,93 @@ umask(0022); /* DESC */ - snprintf(path, PATH_MAX, "%s/desc", topdir); - fp = fopen(path, "w"); - if(fp == NULL) { - perror("db_write"); - umask(oldmask); - return(1); + if(inforeq & INFRQ_DESC) { + snprintf(path, PATH_MAX, "%s/desc", topdir); + fp = fopen(path, "w"); + if(fp == NULL) { + perror("db_write"); + umask(oldmask); + return(1); + } + fputs("%NAME%\n", fp); + fprintf(fp, "%s\n\n", info->name); + fputs("%VERSION%\n", fp); + fprintf(fp, "%s\n\n", info->version); + fputs("%DESC%\n", fp); + fprintf(fp, "%s\n\n", info->desc); + fputs("%GROUPS%\n", fp); + for(lp = info->groups; lp; lp = lp->next) { + fprintf(fp, "%s\n", (char*)lp->data); + } + fprintf(fp, "\n"); + fputs("%URL%\n", fp); + fprintf(fp, "%s\n\n", info->url); + fputs("%LICENSE%\n", fp); + fprintf(fp, "%s\n\n", info->license); + fputs("%BUILDDATE%\n", fp); + fprintf(fp, "%s\n\n", info->builddate); + fputs("%INSTALLDATE%\n", fp); + fprintf(fp, "%s\n\n", info->installdate); + fputs("%PACKAGER%\n", fp); + fprintf(fp, "%s\n\n", info->packager); + fputs("%SIZE%\n", fp); + fprintf(fp, "%ld\n\n", info->size); + fclose(fp); } - fputs("%NAME%\n", fp); - fprintf(fp, "%s\n\n", info->name); - fputs("%VERSION%\n", fp); - fprintf(fp, "%s\n\n", info->version); - fputs("%DESC%\n", fp); - fprintf(fp, "%s\n\n", info->desc); - fputs("%GROUPS%\n", fp); - for(lp = info->groups; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char*)lp->data); - } - fprintf(fp, "\n"); - fputs("%URL%\n", fp); - fprintf(fp, "%s\n\n", info->url); - fputs("%LICENSE%\n", fp); - fprintf(fp, "%s\n\n", info->license); - fputs("%BUILDDATE%\n", fp); - fprintf(fp, "%s\n\n", info->builddate); - fputs("%INSTALLDATE%\n", fp); - fprintf(fp, "%s\n\n", info->installdate); - fputs("%PACKAGER%\n", fp); - fprintf(fp, "%s\n\n", info->packager); - fputs("%SIZE%\n", fp); - fprintf(fp, "%ld\n\n", info->size); - fclose(fp); /* FILES */ - snprintf(path, PATH_MAX, "%s/files", topdir); - fp = fopen(path, "w"); - if(fp == NULL) { - perror("db_write"); - umask(oldmask); - return(1); - } - fputs("%FILES%\n", fp); - for(lp = info->files; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char*)lp->data); - } - fprintf(fp, "\n"); - fputs("%BACKUP%\n", fp); - for(lp = info->backup; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char*)lp->data); + if(inforeq & INFRQ_FILES) { + snprintf(path, PATH_MAX, "%s/files", topdir); + fp = fopen(path, "w"); + if(fp == NULL) { + perror("db_write"); + umask(oldmask); + return(1); + } + fputs("%FILES%\n", fp); + for(lp = info->files; lp; lp = lp->next) { + fprintf(fp, "%s\n", (char*)lp->data); + } + fprintf(fp, "\n"); + fputs("%BACKUP%\n", fp); + for(lp = info->backup; lp; lp = lp->next) { + fprintf(fp, "%s\n", (char*)lp->data); + } + fprintf(fp, "\n"); + fclose(fp); } - fprintf(fp, "\n"); - fclose(fp); /* DEPENDS */ - snprintf(path, PATH_MAX, "%s/depends", topdir); - fp = fopen(path, "w"); - if(fp == NULL) { - perror("db_write"); - umask(oldmask); - return(1); - } - fputs("%DEPENDS%\n", fp); - for(lp = info->depends; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char*)lp->data); - } - fprintf(fp, "\n"); - fputs("%REQUIREDBY%\n", fp); - for(lp = info->requiredby; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char*)lp->data); - } - fprintf(fp, "\n"); - fputs("%CONFLICTS%\n", fp); - for(lp = info->conflicts; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char*)lp->data); - } - fprintf(fp, "\n"); - fputs("%PROVIDES%\n", fp); - for(lp = info->provides; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char*)lp->data); + if(inforeq & INFRQ_DEPENDS) { + snprintf(path, PATH_MAX, "%s/depends", topdir); + fp = fopen(path, "w"); + if(fp == NULL) { + perror("db_write"); + umask(oldmask); + return(1); + } + fputs("%DEPENDS%\n", fp); + for(lp = info->depends; lp; lp = lp->next) { + fprintf(fp, "%s\n", (char*)lp->data); + } + fprintf(fp, "\n"); + fputs("%REQUIREDBY%\n", fp); + for(lp = info->requiredby; lp; lp = lp->next) { + fprintf(fp, "%s\n", (char*)lp->data); + } + fprintf(fp, "\n"); + fputs("%CONFLICTS%\n", fp); + for(lp = info->conflicts; lp; lp = lp->next) { + fprintf(fp, "%s\n", (char*)lp->data); + } + fprintf(fp, "\n"); + fputs("%PROVIDES%\n", fp); + for(lp = info->provides; lp; lp = lp->next) { + fprintf(fp, "%s\n", (char*)lp->data); + } + fprintf(fp, "\n"); + fclose(fp); } - fprintf(fp, "\n"); - fclose(fp); /* INSTALL */ /* nothing needed here (script is automatically extracted) */ diff -Nur pacman-2.7.9/src/db.h pacman-2.7.9-ore4/src/db.h --- pacman-2.7.9/src/db.h 2004-07-13 11:46:09.000000000 +0200 +++ pacman-2.7.9-ore4/src/db.h 2004-07-13 14:32:43.000000000 +0200 @@ -40,7 +40,7 @@ PMList* db_loadpkgs(pacdb_t *db); pkginfo_t* db_scan(pacdb_t *db, char *target, unsigned int inforeq); pkginfo_t* db_read(pacdb_t *db, struct dirent *ent, unsigned int inforeq); -int db_write(pacdb_t *db, pkginfo_t *info); +int db_write(pacdb_t *db, pkginfo_t *info, unsigned int inforeq); void db_search(pacdb_t *db, PMList *cache, const char *treename, PMList *needles); PMList* db_find_conflicts(pacdb_t *db, PMList* targets, char *root); PMList *whatprovides(pacdb_t *db, char* package); diff -Nur pacman-2.7.9/src/package.c pacman-2.7.9-ore4/src/package.c --- pacman-2.7.9/src/package.c 2004-07-13 11:46:09.000000000 +0200 +++ pacman-2.7.9-ore4/src/package.c 2004-07-13 15:17:46.000000000 +0200 @@ -47,10 +47,16 @@ (writefunc_t)gzwrite }; + if(tar_open(&tar, pkgfile, &gztype, O_RDONLY, 0, TAR_GNU) == -1) { + perror("could not open package"); + return(NULL); + } + info = newpkg(); - if(tar_open(&tar, pkgfile, &gztype, O_RDONLY, 0, TAR_GNU) == -1) { - perror("could not open package"); + if(split_pkgname(pkgfile, (char *)&info->name, (char *)&info->version) == -1) { + fprintf(stderr, "error: %s is not a package.\n", pkgfile); + FREEPKG(info); return(NULL); } for(i = 0; !th_read(tar); i++) { @@ -180,9 +186,9 @@ key = strtoupper(key); trim(ptr); if(!strcmp(key, "PKGNAME")) { - strncpy(info->name, ptr, sizeof(info->name)); + /*strncpy(info->name, ptr, sizeof(info->name));*/ } else if(!strcmp(key, "PKGVER")) { - strncpy(info->version, ptr, sizeof(info->version)); + /*strncpy(info->version, ptr, sizeof(info->version));*/ } else if(!strcmp(key, "PKGDESC")) { strncpy(info->desc, ptr, sizeof(info->desc)); } else if(!strcmp(key, "GROUP")) { @@ -380,18 +386,23 @@ printf("\nMD5 Sum : %s\n", info->md5sum); } -int split_pkgname(char *pkg, char **name, char **version) +int split_pkgname(char *pkgfile, char *name, char *version) { - char tmp[256]; + char tmp[512]; char *p, *q; - strncpy(tmp, pkg, 256); - - p = strstr(tmp, ".pkg.tar.gz"); - if(p == NULL) { - return(-1); + /* trim path name (if any) */ + if((p = strrchr(pkgfile, '/')) == NULL) { + p = pkgfile; + } else { + p++; + } + strncpy(tmp, p, 512); + /* trim file extension (if any) */ + if((p = strstr(tmp, ".pkg.tar.gz"))) { + *p = 0; } - *p = 0; + p = tmp+strlen(tmp); for(q = --p; *q && *q != '-'; q--); if(*q != '-' || q == tmp) { @@ -401,10 +412,10 @@ if(*p != '-' || p == tmp) { return(-1); } - *version = strdup(p+1); + strncpy(version, p+1, 64); *p = 0; - *name = strdup(tmp); + strncpy(name, tmp, 256); return(0); } diff -Nur pacman-2.7.9/src/package.h pacman-2.7.9-ore4/src/package.h --- pacman-2.7.9/src/package.h 2004-07-13 11:46:09.000000000 +0200 +++ pacman-2.7.9-ore4/src/package.h 2004-07-13 14:32:43.000000000 +0200 @@ -84,7 +84,7 @@ int is_pkgin(pkginfo_t *needle, PMList *haystack); void dump_pkg_full(pkginfo_t *info); void dump_pkg_sync(pkginfo_t *info); -int split_pkgname(char *pkg, char **name, char **version); +int split_pkgname(char *pkgfile, char *name, char *version); #endif /* vim: set ts=2 sw=2 noet: */ diff -Nur pacman-2.7.9/src/pacman.c pacman-2.7.9-ore4/src/pacman.c --- pacman-2.7.9/src/pacman.c 2004-07-13 11:46:09.000000000 +0200 +++ pacman-2.7.9-ore4/src/pacman.c 2004-07-13 15:16:57.000000000 +0200 @@ -64,7 +64,6 @@ unsigned short pmo_nosave = 0; unsigned short pmo_d_vertest = 0; unsigned short pmo_d_resolve = 0; -unsigned short pmo_q_isfile = 0; unsigned short pmo_q_info = 0; unsigned short pmo_q_list = 0; unsigned short pmo_q_orphans = 0; @@ -349,23 +348,31 @@ for(i = cache; i; i = i->next) { char *str = (char *)i->data; - char *name, *version; + char name[256], version[64]; - if(split_pkgname(str, &name, &version) != 0) { + if(strstr(str, ".pkg.tar.gz") == NULL) { clean = list_add(clean, strdup(str)); continue; } /* we keep partially downloaded files */ if(strstr(str, ".pkg.tar.gz.part")) { - FREE(name); - FREE(version); + continue; + } + if(split_pkgname(str, (char *)&name, (char *)&version) != 0) { + clean = list_add(clean, strdup(str)); continue; } for(j = i->next; j; j = j->next) { char *s = (char *)j->data; - char *n, *v; + char n[256], v[64]; - if(split_pkgname(s, &n, &v) != 0) { + if(strstr(s, ".pkg.tar.gz") == NULL) { + continue; + } + if(strstr(s, ".pkg.tar.gz.part")) { + continue; + } + if(split_pkgname(s, (char *)&n, (char *)&v) != 0) { continue; } if(!strcmp(name, n)) { @@ -379,11 +386,7 @@ clean = list_add(clean, strdup(ptr)); } } - FREE(n); - FREE(v); } - FREE(name); - FREE(version); } FREELIST(cache); @@ -780,13 +783,13 @@ if(k != NULL) { printf(":: group %s:\n", targ); list_display(" ", k); - if(yesno(" Install whole content? [Y/n] ")) { + if(yesno(" %s whole content? [Y/n] ", (pmo_s_downloadonly) ? "Download" : "Install")) { targets = list_merge(targets, k); FREELIST(k); } else { PMList *l; for(l = k; l; l = l->next) { - if(yesno(":: Install %s from group %s? [Y/n] ", (char*)l->data, targ)) { + if(yesno(":: %s %s from group %s? [Y/n] ", (pmo_s_downloadonly) ? "Download" : "Install", (char*)l->data, targ)) { targets = list_add(targets, strdup((char*)l->data)); } } @@ -1282,7 +1285,7 @@ for(i = final; i; i = i->next) { syncpkg_t *sync = (syncpkg_t*)i->data; if(sync->replaces) { - pkginfo_t *new = db_scan(db, sync->pkg->name, INFRQ_ALL); + pkginfo_t *new = db_scan(db, sync->pkg->name, INFRQ_DEPENDS); for(j = sync->replaces; j; j = j->next) { pkginfo_t *old = (pkginfo_t*)j->data; /* merge lists */ @@ -1290,21 +1293,21 @@ if(!is_in(k->data, new->requiredby)) { /* replace old's name with new's name in the requiredby's dependency list */ PMList *m; - pkginfo_t *depender = db_scan(db, k->data, INFRQ_ALL); + pkginfo_t *depender = db_scan(db, k->data, INFRQ_DEPENDS); for(m = depender->depends; m; m = m->next) { if(!strcmp(m->data, old->name)) { FREE(m->data); m->data = strdup(new->name); } } - db_write(db, depender); + db_write(db, depender, INFRQ_DEPENDS); /* add the new requiredby */ new->requiredby = list_add(new->requiredby, strdup(k->data)); } } } - db_write(db, new); + db_write(db, new, INFRQ_DEPENDS); FREEPKG(new); } } @@ -1821,7 +1824,7 @@ pkginfo_t *tmpp = NULL; PMList *tmppm = NULL; - tmpp = db_scan(db, ((pkginfo_t*)lp->data)->name, INFRQ_DEPENDS); + tmpp = db_scan(db, ((pkginfo_t*)lp->data)->name, INFRQ_DESC | INFRQ_DEPENDS); if(tmpp == NULL) { continue; } @@ -1840,7 +1843,7 @@ vprint("Updating database..."); /* make an install date (in UTC) */ strncpy(info->installdate, asctime(gmtime(&t)), sizeof(info->installdate)); - if(db_write(db, info)) { + if(db_write(db, info, INFRQ_ALL)) { logaction(stderr, "error updating database for %s!", info->name); return(1); } @@ -1860,13 +1863,13 @@ if(splitdep(lp->data, &depend)) { continue; } - depinfo = db_scan(db, depend.name, INFRQ_ALL); + depinfo = db_scan(db, depend.name, INFRQ_DEPENDS); if(depinfo == NULL) { /* look for a provides package */ PMList *provides = whatprovides(db, depend.name); if(provides) { /* use the first one */ - depinfo = db_scan(db, provides->data, INFRQ_ALL); + depinfo = db_scan(db, provides->data, INFRQ_DEPENDS); if(depinfo == NULL) { /* wtf */ continue; @@ -1876,7 +1879,7 @@ } } depinfo->requiredby = list_add(depinfo->requiredby, strdup(info->name)); - db_write(db, depinfo); + db_write(db, depinfo, INFRQ_DEPENDS); freepkg(depinfo); } printf("done.\n"); fflush(stdout); @@ -2119,7 +2122,7 @@ if(splitdep((char*)lp->data, &depend)) { continue; } - depinfo = db_scan(db, depend.name, INFRQ_ALL); + depinfo = db_scan(db, depend.name, INFRQ_DEPENDS); if(depinfo == NULL) { /* look for a provides package */ PMList *provides = whatprovides(db, depend.name); @@ -2128,7 +2131,7 @@ * the first one. */ /* use the first one */ - depinfo = db_scan(db, provides->data, INFRQ_ALL); + depinfo = db_scan(db, provides->data, INFRQ_DEPENDS); list_free(provides); if(depinfo == NULL) { /* wtf */ @@ -2154,7 +2157,7 @@ break; } } - db_write(db, depinfo); + db_write(db, depinfo, INFRQ_DEPENDS); freepkg(depinfo); } if(!pmo_upgrade) { @@ -2231,31 +2234,6 @@ continue; } - /* output info for a .tar.gz package */ - if(pmo_q_isfile) { - if(package == NULL) { - fprintf(stderr, "error: no package file was specified for --file\n"); - return(1); - } - info = load_pkg(package); - if(info == NULL) { - fprintf(stderr, "error: %s is not a package\n", package); - return(1); - } - if(pmo_q_info) { - dump_pkg_full(info); - printf("\n"); - } else if(pmo_q_list) { - for(lp = info->files; lp; lp = lp->next) { - printf("%s %s\n", info->name, (char*)lp->data); - } - } else { - printf("%s %s\n", info->name, info->version); - } - FREEPKG(info); - continue; - } - /* determine the owner of a file */ if(pmo_q_owns) { char rpath[PATH_MAX]; @@ -2266,7 +2244,7 @@ if(realpath(package, rpath)) { int gotcha = 0; rewinddir(db->dir); - while((info = db_scan(db, NULL, INFRQ_DESC | INFRQ_FILES)) != NULL && !gotcha) { + while((info = db_scan(db, NULL, INFRQ_FILES)) != NULL && !gotcha) { for(lp = info->files; lp && !gotcha; lp = lp->next) { sprintf(path, "%s%s", pmo_root, (char*)lp->data); if(!strcmp(path, rpath)) { @@ -2292,7 +2270,7 @@ for(lp = pm_packages; lp; lp = lp->next) { pkginfo_t *tmpp = (pkginfo_t*)lp->data; if(pmo_q_list) { - info = db_scan(db, tmpp->name, INFRQ_DESC | INFRQ_FILES); + info = db_scan(db, tmpp->name, INFRQ_FILES); if(info == NULL) { /* something weird happened */ return(1); @@ -2302,7 +2280,7 @@ } FREEPKG(info); } else if(pmo_q_orphans) { - info = db_scan(db, tmpp->name, INFRQ_DESC | INFRQ_DEPENDS); + info = db_scan(db, tmpp->name, INFRQ_DEPENDS); if(info == NULL) { return(1); } @@ -2319,8 +2297,17 @@ if(pmo_q_info) { info = db_scan(db, package, INFRQ_ALL); if(info == NULL) { - fprintf(stderr, "Package \"%s\" was not found.\n", package); - return(2); + struct stat buf; + + /* package was not found in the db, so check if it's a file */ + if(stat(package, &buf) != -1) { + if((info = load_pkg(package)) == NULL) { + return(1); + } + } else { + fprintf(stderr, "Package \"%s\" was not found.\n", package); + return(2); + } } dump_pkg_full(info); if(pmo_q_info > 1 && info->backup) { @@ -2358,16 +2345,25 @@ } printf("\n"); } else if(pmo_q_list) { - info = db_scan(db, package, INFRQ_DESC | INFRQ_FILES); + info = db_scan(db, package, INFRQ_FILES); if(info == NULL) { - fprintf(stderr, "Package \"%s\" was not found.\n", package); - return(2); + struct stat buf; + + /* package was not found in the db, so check if it's a file */ + if(stat(package, &buf) != -1) { + if((info = load_pkg(package)) == NULL) { + return(1); + } + } else { + fprintf(stderr, "Package \"%s\" was not found.\n", package); + return(2); + } } for(lp = info->files; lp; lp = lp->next) { printf("%s %s%s\n", info->name, pmo_root, (char*)lp->data); } } else if(pmo_q_orphans) { - info = db_scan(db, package, INFRQ_DESC | INFRQ_DEPENDS); + info = db_scan(db, package, INFRQ_DEPENDS); if(info == NULL) { fprintf(stderr, "Package \"%s\" was not found.\n", package); return(2); @@ -2376,7 +2372,7 @@ printf("%s %s\n", info->name, info->version); } } else { - info = db_scan(db, package, INFRQ_DESC); + info = db_scan(db, package, 0); if(info == NULL) { fprintf(stderr, "Package \"%s\" was not found.\n", package); return(2); @@ -3088,7 +3084,6 @@ {"nosave", no_argument, 0, 'n'}, {"owns", no_argument, 0, 'o'}, {"list", no_argument, 0, 'l'}, - {"file", no_argument, 0, 'p'}, {"info", no_argument, 0, 'i'}, {"sysupgrade", no_argument, 0, 'u'}, {"downloadonly", no_argument, 0, 'w'}, @@ -3128,7 +3123,7 @@ case 'k': pmo_r_dbonly = 1; break; case 'l': pmo_q_list = 1; break; case 'n': pmo_nosave = 1; break; - case 'p': pmo_q_isfile = 1; pmo_s_printuris = 1; break; + case 'p': pmo_s_printuris = 1; break; case 'o': pmo_q_owns = 1; break; case 'r': if(realpath(optarg, pmo_root) == NULL) { perror("bad root path"); @@ -3419,8 +3414,6 @@ printf(" -g, --groups view all members of a package group\n"); printf(" -l, --list list the contents of the queried package\n"); printf(" -o, --owns query the package that owns \n"); - printf(" -p, --file pacman will query the package file [package] instead of\n"); - printf(" looking in the database\n"); printf(" -s, --search search locally-installed packages for matching strings\n"); } else if(op == PM_SYNC) { printf("usage: %s {-S --sync} [options] [package]\n", myname);