rpm  5.2.1
Macros | Functions | Variables
rpmgi.c File Reference
#include "system.h"
#include <rpmio.h>
#include <rpmiotypes.h>
#include <rpmcb.h>
#include <rpmmacro.h>
#include <rpmtypes.h>
#include <rpmtag.h>
#include <rpmdb.h>
#include <rpmte.h>
#include <pkgio.h>
#include <rpmgi.h>
#include "manifest.h"
#include <rpmlib.h>
#include "debug.h"
Include dependency graph for rpmgi.c:

Go to the source code of this file.

Macros

#define _RPMGI_INTERNAL
 
#define _RPMTS_INTERNAL   /* XXX ts->probs et al */
 

Functions

static const char * ftsInfoStr (int fts_info)
 
static FD_t rpmgiOpen (const char *path, const char *fmode)
 Open a file after macro expanding path. More...
 
static rpmRC rpmgiLoadManifest (rpmgi gi, const char *path)
 Load manifest into iterator arg list. More...
 
Header rpmgiReadHeader (rpmgi gi, const char *path)
 Return header from package. More...
 
static rpmRC rpmgiLoadNextKey (rpmgi gi)
 Load next key from argv list. More...
 
static rpmRC rpmgiLoadReadHeader (rpmgi gi)
 Read next header from package, lazily expanding manifests as found. More...
 
static rpmRC rpmgiWalkPathFilter (rpmgi gi)
 Filter file tree walk path. More...
 
static rpmRC rpmgiWalkReadHeader (rpmgi gi)
 Read header from next package, lazily walking file tree. More...
 
const char * rpmgiEscapeSpaces (const char *s)
 Escape isspace(3) characters in string. More...
 
static rpmRC rpmgiGlobArgv (rpmgi gi, ARGV_t argv)
 Append globbed arg list to iterator. More...
 
static rpmRC rpmgiInitFilter (rpmgi gi)
 Return rpmdb match iterator with filters (if any) set. More...
 
static void rpmgiFini (void *_gi)
 
static rpmgi rpmgiGetPool (rpmioPool pool)
 
rpmgi rpmgiNew (rpmts ts, int tag, const void *keyp, size_t keylen)
 Return a generalized iterator. More...
 
rpmRC rpmgiNext (rpmgi gi)
 Perform next iteration step. More...
 
rpmgiFlags rpmgiGetFlags (rpmgi gi)
 Return current iteration flags. More...
 
const char * rpmgiHdrPath (rpmgi gi)
 Return current header path. More...
 
Header rpmgiHeader (rpmgi gi)
 Return current iteration header. More...
 
rpmts rpmgiTs (rpmgi gi)
 Return current iteration transaction set. More...
 
rpmRC rpmgiSetArgs (rpmgi gi, ARGV_t argv, int ftsOpts, rpmgiFlags flags)
 Load iterator args. More...
 

Variables

int _rpmgi_debug = 0
 
rpmgiFlags giFlags = RPMGI_NONE
 
static int indent = 2
 
static const char * ftsInfoStrings []
 
rpmioPool _rpmgiPool
 
static const char * _query_hdlist_path = "/usr/share/comps/%{_arch}/hdlist"
 

Macro Definition Documentation

#define _RPMGI_INTERNAL

Definition at line 18 of file rpmgi.c.

#define _RPMTS_INTERNAL   /* XXX ts->probs et al */

Definition at line 19 of file rpmgi.c.

Function Documentation

static const char* ftsInfoStr ( int  fts_info)
static

Definition at line 73 of file rpmgi.c.

References ftsInfoStrings.

Referenced by rpmgiWalkPathFilter().

const char* rpmgiEscapeSpaces ( const char *  s)

Escape isspace(3) characters in string.

Parameters
sstring
Returns
escaped string

Definition at line 330 of file rpmgi.c.

References xmalloc().

Referenced by IDTXglob(), and rpmgiGlobArgv().

static void rpmgiFini ( void *  _gi)
static

Definition at line 459 of file rpmgi.c.

References _free(), argvFree(), Fclose(), Fts_close(), headerFree(), rpmmiFree(), rpmtsFree(), and rpmtsiFree().

Referenced by rpmgiGetPool().

rpmgiFlags rpmgiGetFlags ( rpmgi  gi)

Return current iteration flags.

Parameters
gigeneralized iterator
Returns
flags

Definition at line 816 of file rpmgi.c.

References RPMGI_NONE.

Referenced by rpmcliArgIter().

static rpmgi rpmgiGetPool ( rpmioPool  pool)
static

Definition at line 491 of file rpmgi.c.

References _rpmgi_debug, _rpmgiPool, rpmgiFini(), rpmioGetPool(), and rpmioNewPool().

Referenced by rpmgiNew().

static rpmRC rpmgiGlobArgv ( rpmgi  gi,
ARGV_t  argv 
)
static

Append globbed arg list to iterator.

Parameters
gigeneralized iterator
argvarg list to be globbed (or NULL)
Returns
RPMRC_OK on success

Definition at line 360 of file rpmgi.c.

References _free(), argvAppend(), argvFree(), RPMDBI_ARGLIST, RPMDBI_FTSWALK, RPMDBI_HDLIST, RPMGI_NOGLOB, rpmgiEscapeSpaces(), rpmGlob(), and RPMRC_OK.

Referenced by rpmgiSetArgs().

const char* rpmgiHdrPath ( rpmgi  gi)

Return current header path.

Parameters
gigeneralized iterator
Returns
header path

Definition at line 821 of file rpmgi.c.

Referenced by rpmcliArgIter(), rpmcliInstall(), rpmcliSign(), and rpmReSign().

Header rpmgiHeader ( rpmgi  gi)

Return current iteration header.

Parameters
gigeneralized iterator
Returns
header

Definition at line 826 of file rpmgi.c.

Referenced by rpmcliInstall(), and rpmgiShowMatches().

static rpmRC rpmgiInitFilter ( rpmgi  gi)
static

Return rpmdb match iterator with filters (if any) set.

Parameters
gigeneralized iterator
Returns
RPMRC_OK on success

Definition at line 404 of file rpmgi.c.

References _, _free(), _rpmgi_debug, RPMDBI_PACKAGES, rpmlog(), RPMLOG_NOTICE, rpmmiAddPattern(), rpmmiFree(), RPMMIRE_DEFAULT, RPMRC_FAIL, RPMRC_OK, RPMTAG_NAME, rpmtsInitIterator(), tagName(), tagValue(), and xstrdup().

Referenced by rpmgiNext().

static rpmRC rpmgiLoadManifest ( rpmgi  gi,
const char *  path 
)
static

Load manifest into iterator arg list.

Parameters
gigeneralized iterator
pathfile path
Returns
RPMRC_OK on success

Definition at line 119 of file rpmgi.c.

References Fclose(), rpmgiOpen(), RPMRC_FAIL, and rpmReadPackageManifest().

Referenced by rpmgiLoadReadHeader().

static rpmRC rpmgiLoadNextKey ( rpmgi  gi)
static

Load next key from argv list.

Parameters
gigeneralized iterator
Returns
RPMRC_OK on success

Definition at line 167 of file rpmgi.c.

References RPMRC_NOTFOUND, and RPMRC_OK.

Referenced by rpmgiNext().

static rpmRC rpmgiLoadReadHeader ( rpmgi  gi)
static

Read next header from package, lazily expanding manifests as found.

Todo:

An empty file read as manifest truncates argv returning RPMRC_NOTFOUND.

Errors, e.g. non-existent path in manifest, will terminate iteration.

Chained manifests lose an arg someplace.

Parameters
gigeneralized iterator
Returns
RPMRC_OK on success

Definition at line 191 of file rpmgi.c.

References _free(), errno, headerFree(), headerLink(), RPMGI_NOHEADER, RPMGI_NOMANIFEST, rpmgiLoadManifest(), rpmgiReadHeader(), RPMRC_NOTFOUND, and RPMRC_OK.

Referenced by rpmgiNext().

rpmgi rpmgiNew ( rpmts  ts,
int  tag,
const void *  keyp,
size_t  keylen 
)

Return a generalized iterator.

Parameters
tstransaction set
tagrpm tag
keypkey data (NULL for sequential access)
keylenkey data length (0 will use strlen(keyp))
Returns
new iterator

Definition at line 505 of file rpmgi.c.

References rpmgiGetPool(), rpmgiLink(), rpmtsLink(), rpmtsOrder(), and xcalloc().

Referenced by main(), rpmcliArgIter(), rpmcliInstall(), rpmcliSign(), and rpmReSign().

rpmRC rpmgiNext ( rpmgi  gi)
static FD_t rpmgiOpen ( const char *  path,
const char *  fmode 
)
static

Open a file after macro expanding path.

Todo:
There are two error messages printed on header, then manifest failures.
Parameters
pathfile path
fmodeopen mode
Returns
file handle

Definition at line 92 of file rpmgi.c.

References _, _free(), errno, Fclose(), Ferror(), Fopen(), Fstrerror(), rpmExpand(), rpmlog(), and RPMLOG_ERR.

Referenced by rpmgiLoadManifest(), rpmgiNext(), and rpmgiReadHeader().

Header rpmgiReadHeader ( rpmgi  gi,
const char *  path 
)

Return header from package.

Parameters
gigeneralized iterator
pathfile path
Returns
header (NULL on failure)

Definition at line 133 of file rpmgi.c.

References Fclose(), headerFree(), rpmgiOpen(), RPMRC_FAIL, RPMRC_NOKEY, RPMRC_NOTFOUND, RPMRC_NOTTRUSTED, RPMRC_OK, and rpmReadPackageFile().

Referenced by rpmcliInstall(), rpmgiLoadReadHeader(), and rpmgiWalkReadHeader().

rpmRC rpmgiSetArgs ( rpmgi  gi,
ARGV_t  argv,
int  ftsOpts,
rpmgiFlags  flags 
)

Load iterator args.

Parameters
gigeneralized iterator
argvarg list
ftsOptsfts(3) flags
flagsiterator flags
Returns
RPMRC_OK on success

Definition at line 840 of file rpmgi.c.

References rpmgiGlobArgv(), and RPMRC_FAIL.

Referenced by main(), rpmcliArgIter(), rpmcliInstall(), rpmcliSign(), and rpmReSign().

rpmts rpmgiTs ( rpmgi  gi)

Return current iteration transaction set.

Parameters
gigeneralized iterator
Returns
transaction set

Definition at line 833 of file rpmgi.c.

static rpmRC rpmgiWalkPathFilter ( rpmgi  gi)
static

Filter file tree walk path.

Parameters
gigeneralized iterator
Returns
RPMRC_OK on success

Definition at line 242 of file rpmgi.c.

References _rpmgi_debug, FTS_D, FTS_DC, FTS_DEFAULT, FTS_DNR, FTS_DOT, FTS_DP, FTS_ERR, FTS_F, _ftsent::fts_info, FTS_INIT, _ftsent::fts_level, _ftsent::fts_name, _ftsent::fts_namelen, FTS_NS, FTS_NSOK, FTS_SL, FTS_SLNONE, FTS_W, ftsInfoStr(), indent, rpmlog(), RPMLOG_DEBUG, RPMRC_NOTFOUND, and RPMRC_OK.

Referenced by rpmgiWalkReadHeader().

static rpmRC rpmgiWalkReadHeader ( rpmgi  gi)
static

Read header from next package, lazily walking file tree.

Parameters
gigeneralized iterator
Returns
RPMRC_OK on success

Definition at line 293 of file rpmgi.c.

References Fts_read(), headerFree(), headerLink(), RPMGI_NOHEADER, rpmgiReadHeader(), rpmgiWalkPathFilter(), RPMRC_NOTFOUND, and RPMRC_OK.

Referenced by rpmgiNext().

Variable Documentation

const char* _query_hdlist_path = "/usr/share/comps/%{_arch}/hdlist"
static

Definition at line 544 of file rpmgi.c.

Referenced by rpmgiNext().

int _rpmgi_debug = 0

Definition at line 37 of file rpmgi.c.

Referenced by rpmgiGetPool(), rpmgiInitFilter(), rpmgiNext(), and rpmgiWalkPathFilter().

rpmioPool _rpmgiPool

Definition at line 489 of file rpmgi.c.

Referenced by rpmgiGetPool().

const char* ftsInfoStrings[]
static
Initial value:
= {
"UNKNOWN",
"D",
"DC",
"DEFAULT",
"DNR",
"DOT",
"DP",
"ERR",
"F",
"INIT",
"NS",
"NSOK",
"SL",
"SLNONE",
"W",
}

Definition at line 52 of file rpmgi.c.

Referenced by ftsInfoStr().

Definition at line 42 of file rpmgi.c.

Referenced by main(), and rpmcliArgIter().

int indent = 2
static