23 #define _RPMGI_INTERNAL
33 #define QVA_ISSET(_qvaflags, _FLAG) ((_qvaflags) & (VERIFY_##_FLAG))
35 #define VSF_ISSET(_vsflags, _FLAG) ((_vsflags) & (RPMVSF_##_FLAG))
36 #define VSF_SET(_vsflags, _FLAG) \
37 (*((unsigned *)&(_vsflags)) |= (RPMVSF_##_FLAG))
38 #define VSF_CLR(_vsflags, _FLAG) \
39 (*((unsigned *)&(_vsflags)) &= ~(RPMVSF_##_FLAG))
43 #define QVA_ISSET(_qvaflags, _FLAG) ((_qvaflags) & (VERIFY_##_FLAG))
45 #define VSF_ISSET(_vsflags, _FLAG) ((_vsflags) & (RPMVSF_##_FLAG))
46 #define VSF_SET(_vsflags, _FLAG) (_vsflags) |= (RPMVSF_##_FLAG)
47 #define VSF_CLR(_vsflags, _FLAG) (_vsflags) &= ~(RPMVSF_##_FLAG)
100 static int cmpItem(
const void * a,
const void *
b) {
109 for (i = 0; i <
nitems; i++)
111 items =
_free(items);
120 if (fp ==
NULL) fp = stdout;
121 for (i = 0; i <
nitems; i++) {
151 for (i = 0; i <
nitems; i++) {
164 if (!xx || md5 ==
NULL) {
231 struct stat sb, *
st;
244 Item * found, * fneedle = &needle;
248 found = bsearch(fneedle, items,
nitems,
sizeof(*found),
cmpItem);
251 while (found > items &&
cmpItem(found-1, fneedle) == 0)
256 while (found < (items +
nitems) &&
cmpItem(found, fneedle) == 0) {
275 }
else if (ec == 1) {
285 if (st ==
NULL || ((
long)st & 0xffff0000) == 0
L) {
287 memset(st, 0,
sizeof(*st));
292 items[
i]->
size = st->st_size;
293 items[
i]->
mtime = st->st_mtime;
303 fprintf(stderr,
"\t%*s [%d] %s\n",
333 if (!(fts_info >= 1 && fts_info <= 14))
377 while ((pattern = *patterns++) !=
NULL) {
392 while ((pattern = *patterns++) !=
NULL) {
471 if (argv !=
NULL && * argv !=
NULL) {
479 while ((arg = *argv++) !=
NULL) {
483 t[-1] = (char)(single ?
'\0' :
')');
501 macro =
"%{_bhpath}";
504 macro =
"%{_bhcoll}";
507 macro = (buf[0] ==
'\0' ?
"%{_bhN}" :
buf);
523 if (pattern ==
NULL || *pattern ==
'\0') {
524 pattern =
_free(pattern);
529 if (bhglobs[i].patterns[0] !=
NULL)
531 i, bhglobs[i].patterns[0]);
542 bhglobs =
_free(bhglobs);
552 N_(
"don't verify header+payload signature"),
NULL },
554 {
"cache",
'\0', POPT_ARG_VAL, &
noCache, 0,
555 N_(
"update cache database"),
NULL },
556 {
"nocache",
'\0', POPT_ARG_VAL, &
noCache, -1,
557 N_(
"don't update cache database, only print package paths"),
NULL },
560 N_(
"File tree walk options:"),
564 N_(
"Common options for all rpm modes and executables:"),
596 fprintf(stderr,
_(
"%s: %%{_cache_dbpath} macro is mis-configured.\n"),
603 #if defined(SUPPORT_NOSIGNATURES)
624 { uint32_t tid = (uint32_t) time(
NULL);
652 fprintf(stderr,
_(
"%s: cache operation failed: ec %d.\n"),
662 optCon = rpmcliFini(optCon);
qsort(mc->macroTable, mc->firstFree, sizeof(mc->macroTable[0]), compareMacroName)
static rpmRC cacheWalkPathFilter(rpmgi gi)
static Item freeItem(Item item)
rpmlog(RPMLOG_ERR,"%s\n", buf)
static rpmRC cacheStashLatest(rpmgi gi, Header h)
char * xstrdup(const char *str)
#define VSF_SET(_vsflags, _FLAG)
rpmgi rpmgiFree(rpmgi gi)
Destroy a generalized iterator.
static void initGlobs(rpmts ts, const char **argv)
Initialize fts and glob structures.
int Access(const char *path, int amode)
access(2) clone.
struct rpmts_s * rpmts
The RPM Transaction Set.
rpmdb rpmtsGetRdb(rpmts ts)
Get transaction set database handle.
rpmts rpmtsFree(rpmts ts)
Destroy transaction set, closing the database as well.
int main(int argc, const char **argv, char **envp)
rpmuint32_t rpmtsSetTid(rpmts ts, rpmuint32_t tid)
Set transaction id, i.e.
struct poptOption rpmioFtsPoptTable[]
int Stat(const char *path, struct stat *st)
stat(2) clone.
static rpmVSFlags vsflags
struct _ftsent * fts_parent
int rpmdbAdd(rpmdb db, int iid, Header h, rpmts ts)
Add package header to rpm database and indices.
rpmuint32_t rpmtsGetTid(rpmts ts)
Get transaction id, i.e.
static int ftsCacheUpdate(rpmts ts)
enum rpmRC_e rpmRC
RPM return codes.
memset(_r, 0, sizeof(*_r))
rpmts rpmtsCreate(void)
Create an empty transaction set.
void * xcalloc(size_t nmemb, size_t size)
rpmQueryFlags rpmcliQueryFlags
Bit(s) from common command line options.
static struct poptOption optionsTable[]
static const char * ftsInfoStrings[]
rpmgi rpmgiNew(rpmts ts, int tag, const void *keyp, size_t keylen)
Return a generalized iterator.
Structures and prototypes used for an "rpmps" problem set.
rpmmi rpmmiFree(rpmmi mi)
Destroy rpm database iterator.
fprintf(stderr,"--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp)
unsigned int rpmmiCount(rpmmi mi)
Return number of elements in rpm database iterator.
int rpmDefineMacro(MacroContext mc, const char *macro, int level)
Define macro in context.
int rpmtsCloseDB(rpmts ts)
Close the database used by the transaction.
#define VSF_CLR(_vsflags, _FLAG)
int Glob_pattern_p(const char *pattern, int quote)
glob_pattern_p(3) clone.
#define QVA_ISSET(_qvaflags, _FLAG)
static void freeGlobs(void)
rpmRC rpmgiSetArgs(rpmgi gi, ARGV_t argv, int ftsOpts, rpmgiFlags flags)
Load iterator args.
static int ftsCachePrint(rpmts ts, FILE *fp)
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
rpmRC rpmMkdirPath(const char *dpath, const char *dname)
Create directory if it does not exist, and make sure path is writable.
int rpmtsOpenDB(rpmts ts, int dbmode)
Open the database used by the transaction.
pgpVSFlags rpmVSFlags
Bit(s) to control digest and signature verification.
static int cmpItem(const void *a, const void *b)
struct rpmds_s * rpmds
Dependency tag sets from a header, so that a header can be discarded early.
static void freeItems(void)
int Fts_set(FTS *sp, FTSENT *p, int instr)
Modify the traversal for a file set member.
rpmds rpmdsFree(rpmds ds)
Destroy a dependency set.
int fnmatch(char *__pattern, char *__name, int __flags)
static const char * ftsInfoStr(int fts_info)
rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
Set verify signatures flag(s).
struct poptOption rpmcliAllPoptTable[]
Popt option table for options shared by all modes and executables.
return strcmp(ame->name, bme->name)
char * stpcpy(char *dest, const char *src)
int rpmdsCompare(const rpmds A, const rpmds B)
Compare two versioned dependency ranges, looking for overlap.
rpmVSFlags rpmtsVSFlags(rpmts ts)
Get verify signatures flag(s).
static struct ftsglob_s * bhglobs
rpmRC rpmgiNext(rpmgi gi)
Perform next iteration step.
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
char * buf
Parse (and execute) macro undefinition.
const char * rpmdsN(const rpmds ds)
Return current dependency name.
Access RPM indices using Berkeley DB interface(s).
rpmmi rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, const void *keyp, size_t keylen)
Return transaction database iterator.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
rpmds rpmdsThis(Header h, rpmTag tagN, evrFlags Flags)
Create, load and initialize a dependency for this header.
struct rpmgi_s * rpmgi
Generalized iterator.
static Item newItem(void)