rpm/lib/rpmgi.h

195 lines
4.4 KiB
C

#ifndef H_RPMGI
#define H_RPMGI
/** \ingroup rpmio
* \file lib/rpmgi.h
*/
#include <rpmlib.h>
#include <rpmte.h>
#include <rpmts.h>
#include <fts.h>
#include <argv.h>
/**
*/
/*@-exportlocal@*/
/*@unchecked@*/
extern int _rpmgi_debug;
/*@=exportlocal@*/
/**
*/
typedef enum rpmgiFlags_e {
RPMGI_NONE = 0,
RPMGI_TSADD = (1 << 0),
RPMGI_TSORDER = (1 << 1),
RPMGI_NOGLOB = (1 << 2),
RPMGI_NOMANIFEST = (1 << 3),
RPMGI_NOHEADER = (1 << 4)
} rpmgiFlags;
/*@unchecked@*/
extern rpmgiFlags giFlags;
#if defined(_RPMGI_INTERNAL)
/** \ingroup rpmio
*/
struct rpmgi_s {
/*@refcounted@*/
rpmts ts; /*!< Iterator transaction set. */
int tag; /*!< Iterator type. */
/*@kept@*/ /*@relnull@*/
const void * keyp; /*!< Iterator key. */
size_t keylen; /*!< Iterator key length. */
rpmgiFlags flags; /*!< Iterator control bits. */
int active; /*!< Iterator is active? */
int i; /*!< Element index. */
/*@null@*/
const char * hdrPath; /*!< Path to current iterator header. */
/*@refcounted@*/ /*@null@*/
Header h; /*!< Current iterator header. */
/*@null@*/
rpmtsi tsi;
/*@null@*/
rpmdbMatchIterator mi;
/*@refcounted@*/
FD_t fd;
ARGV_t argv;
int argc;
int ftsOpts;
/*@null@*/
FTS * ftsp;
/*@relnull@*/
FTSENT * fts;
/*@refs@*/
int nrefs; /*!< Reference count. */
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
* Unreference a generalized iterator instance.
* @param gi generalized iterator
* @param msg
* @return NULL always
*/
/*@unused@*/ /*@null@*/
rpmgi rpmgiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmgi gi,
/*@null@*/ const char * msg)
/*@modifies gi @*/;
/** @todo Remove debugging entry from the ABI. */
/*@-exportlocal@*/
/*@null@*/
rpmgi XrpmgiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmgi gi,
/*@null@*/ const char * msg, const char * fn, unsigned ln)
/*@modifies gi @*/;
/*@=exportlocal@*/
#define rpmgiUnlink(_gi, _msg) XrpmgiUnlink(_gi, _msg, __FILE__, __LINE__)
/**
* Reference a generalized iterator instance.
* @param gi generalized iterator
* @param msg
* @return new generalized iterator reference
*/
/*@unused@*/ /*@newref@*/ /*@null@*/
rpmgi rpmgiLink (/*@null@*/ rpmgi gi, /*@null@*/ const char * msg)
/*@modifies gi @*/;
/** @todo Remove debugging entry from the ABI. */
/*@newref@*/ /*@null@*/
rpmgi XrpmgiLink (/*@null@*/ rpmgi gi, /*@null@*/ const char * msg,
const char * fn, unsigned ln)
/*@modifies gi @*/;
#define rpmgiLink(_gi, _msg) XrpmgiLink(_gi, _msg, __FILE__, __LINE__)
/** Destroy a generalized iterator.
* @param gi generalized iterator
* @return NULL always
*/
/*@null@*/
rpmgi rpmgiFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmgi gi)
/*@globals rpmGlobalMacroContext, h_errno, internalState @*/
/*@modifies gi, rpmGlobalMacroContext, h_errno, internalState @*/;
/**
* Return a generalized iterator.
* @param ts transaction set
* @param tag rpm tag
* @param keyp key data (NULL for sequential access)
* @param keylen key data length (0 will use strlen(keyp))
* @return new iterator
*/
/*@null@*/
rpmgi rpmgiNew(rpmts ts, int tag, /*@kept@*/ /*@null@*/ const void * keyp,
size_t keylen)
/*@globals internalState @*/
/*@modifies ts, internalState @*/;
/**
* Perform next iteration step.
* @param gi generalized iterator
* @returns RPMRC_OK on success, RPMRC_NOTFOUND on EOI
*/
rpmRC rpmgiNext(/*@null@*/ rpmgi gi)
/*@globals rpmGlobalMacroContext, h_errno, internalState @*/
/*@modifies gi, rpmGlobalMacroContext, h_errno, internalState @*/;
/**
* Return current header path.
* @param gi generalized iterator
* @returns header path
*/
/*@observer@*/ /*@null@*/
const char * rpmgiHdrPath(rpmgi gi)
/*@*/;
/**
* Return current iteration header.
* @param gi generalized iterator
* @returns header
*/
/*@null@*/
Header rpmgiHeader(/*@null@*/ rpmgi gi)
/*@*/;
/**
* Return current iteration transaction set.
* @param gi generalized iterator
* @returns transaction set
*/
/*@null@*/
rpmts rpmgiTs(/*@null@*/ rpmgi gi)
/*@*/;
/**
* Load iterator args.
* @param gi generalized iterator
* @param argv arg list
* @param ftsOpts fts(3) flags
* @param flags iterator flags
* @returns RPMRC_OK on success
*/
rpmRC rpmgiSetArgs(rpmgi gi, /*@null@*/ ARGV_t argv,
int ftsOpts, rpmgiFlags flags)
/*@globals internalState @*/
/*@modifies gi, internalState @*/;
#ifdef __cplusplus
}
#endif
#endif /* H_RPMGI */