rpm 5.2.1

- Main Page
- Related Pages
- Modules
- Data Structures
- Files

- File List
- Globals

lib/rpmds.h
Go to the documentation of this file.

    00001 #ifndef H_RPMDS
    00002 #define H_RPMDS
    00003
    00009 #include "rpmevr.h"
    00010 #define _RPMNS_INTERNAL
    00011 #include "rpmns.h"
    00012 #include "rpmps.h"
    00013
    00016 /*@-exportlocal@*/
    00017 /*@unchecked@*/
    00018 extern int _rpmds_debug;
    00019 /*@=exportlocal@*/
    00020
    00023 /*@unchecked@*/ /*@observer@*/ /*@owned@*/ /*@null@*/
    00024 extern const char *_sysinfo_path;
    00025
    00028 /*@-exportlocal@*/
    00029 /*@unchecked@*/
    00030 extern int _rpmds_nopromote;
    00031 /*@=exportlocal@*/
    00032
    00033 #if defined(_RPMDS_INTERNAL)
    00034 #include "mire.h"
    00035
    00039 struct rpmds_s {
    00040     struct rpmioItem_s _item;
    00041 /*@observer@*/
    00042     const char * Type;
    00043 /*@only@*/ /*@null@*/
    00044     const char * DNEVR;
    00045 /*@refcounted@*/ /*@null@*/
    00046     Header h;
    00047 /*@only@*/ /*@relnull@*/
    00048     const char ** N;
    00049 /*@only@*/ /*@relnull@*/
    00050     const char ** EVR;
    00051 /*@only@*/ /*@relnull@*/
    00052     evrFlags * Flags;
    00053 /*@only@*/ /*@null@*/
    00054     rpmuint32_t * Color;
    00055 /*@only@*/ /*@null@*/
    00056     rpmuint32_t * Refs;
    00057 /*@only@*/ /*@null@*/
    00058     rpmint32_t * Result;
    00059 /*@null@*/
    00060     int (*EVRparse) (const char *evrstr, EVR_t evr);     /* EVR parsing. */
    00061     int (*EVRcmp) (const char *a, const char *b);        /* EVR comparison. */
    00062     struct rpmns_s ns;
    00063 /*@only@*/ /*@null@*/
    00064     miRE exclude;
    00065     int nexclude;
    00066 /*@only@*/ /*@null@*/
    00067     miRE include;
    00068     int ninclude;
    00069 /*@only@*/ /*@null@*/
    00070     const char * A;
    00071     rpmuint32_t BT;
    00072     rpmTag tagN;
    00073     rpmuint32_t Count;
    00074     int i;
    00075     unsigned l;
    00076     unsigned u;
    00077     int nopromote;
    00078 #if defined(__LCLINT__)
    00079 /*@refs@*/
    00080     int nrefs;
    00081 #endif
    00082 };
    00083 #endif  /* _RPMDS_INTERNAL */
    00084
    00085 #if defined(_RPMPRCO_INTERNAL)
    00086
    00089 struct rpmPRCO_s {
    00090     struct rpmioItem_s _item;
    00091 /*@dependent@*/ /*@relnull@*/
    00092     rpmds * Pdsp;
    00093 /*@dependent@*/ /*@relnull@*/
    00094     rpmds * Rdsp;
    00095 /*@dependent@*/ /*@relnull@*/
    00096     rpmds * Cdsp;
    00097 /*@dependent@*/ /*@relnull@*/
    00098     rpmds * Odsp;
    00099 /*@dependent@*/ /*@relnull@*/
    00100     rpmds * Tdsp;
    00101 /*@dependent@*/ /*@relnull@*/
    00102     rpmds * Ddsp;
    00103 /*@dependent@*/ /*@relnull@*/
    00104     rpmds * Ldsp;
    00105 /*@refcounted@*/ /*@null@*/
    00106     rpmds this;
    00107 /*@refcounted@*/ /*@null@*/
    00108     rpmds P;
    00109 /*@refcounted@*/ /*@null@*/
    00110     rpmds R;
    00111 /*@refcounted@*/ /*@null@*/
    00112     rpmds C;
    00113 /*@refcounted@*/ /*@null@*/
    00114     rpmds O;
    00115 /*@refcounted@*/ /*@null@*/
    00116     rpmds T;
    00117 /*@refcounted@*/ /*@null@*/
    00118     rpmds D;
    00119 /*@refcounted@*/ /*@null@*/
    00120     rpmds L;
    00121 #if defined(__LCLINT__)
    00122 /*@refs@*/
    00123     int nrefs;
    00124 #endif
    00125 };
    00126 #endif  /* _RPMPRCO_INTERNAL */
    00127
    00128 #ifdef __cplusplus
    00129 extern "C" {
    00130 #endif
    00131
    00134
    00141 /*@unused@*/ /*@null@*/
    00142 rpmds rpmdsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmds ds,
    00143                 /*@null@*/ const char * msg)
    00144         /*@modifies ds @*/;
    00145 #define rpmdsUnlink(_ds, _msg)  \
    00146     ((rpmds)rpmioUnlinkPoolItem((rpmioItem)(_ds), _msg, __FILE__, __LINE__))
    00147
    00154 /*@unused@*/ /*@newref@*/ /*@null@*/
    00155 rpmds rpmdsLink (/*@null@*/ rpmds ds, /*@null@*/ const char * msg)
    00156         /*@modifies ds @*/;
    00157 #define rpmdsLink(_ds, _msg)    \
    00158     ((rpmds)rpmioLinkPoolItem((rpmioItem)(_ds), _msg, __FILE__, __LINE__))
    00159
    00165 /*@null@*/
    00166 rpmds rpmdsFree(/*@killref@*/ /*@null@*/ rpmds ds)
    00167         /*@modifies ds @*/;
    00168 #define rpmdsFree(_ds)  \
    00169     ((rpmds)rpmioFreePoolItem((rpmioItem)(_ds), __FUNCTION__, __FILE__, __LINE__))
    00170
    00178 /*@null@*/
    00179 rpmds rpmdsNew(Header h, rpmTag tagN, int flags)
    00180         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00181         /*@modifies h, rpmGlobalMacroContext, fileSystem, internalState @*/;
    00182
    00188 /*@dependent@*/ /*@observer@*/ /*@null@*/
    00189 const char * rpmdsNewN(rpmds ds)
    00190         /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
    00191         /*@modifies ds, rpmGlobalMacroContext, internalState @*/;
    00192
    00199 char * rpmdsNewDNEVR(const char * dspfx, rpmds ds)
    00200         /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
    00201         /*@modifies ds, rpmGlobalMacroContext, internalState @*/;
    00202
    00210 /*@null@*/
    00211 rpmds rpmdsThis(Header h, rpmTag tagN, evrFlags Flags)
    00212         /*@globals internalState @*/
    00213         /*@modifies internalState @*/;
    00214
    00223 /*@null@*/
    00224 rpmds rpmdsSingle(rpmTag tagN, const char * N, const char * EVR, evrFlags Flags)
    00225         /*@*/;
    00226
    00232 int rpmdsCount(/*@null@*/ const rpmds ds)
    00233         /*@*/;
    00234
    00240 int rpmdsIx(/*@null@*/ const rpmds ds)
    00241         /*@*/;
    00242
    00249 int rpmdsSetIx(/*@null@*/ rpmds ds, int ix)
    00250         /*@modifies ds @*/;
    00251
    00257 /*@observer@*/ /*@relnull@*/
    00258 extern const char * rpmdsDNEVR(/*@null@*/ const rpmds ds)
    00259         /*@*/;
    00260
    00266 /*@observer@*/ /*@null@*/
    00267 extern const char * rpmdsN(/*@null@*/ rpmds ds)
    00268         /*@globals internalState @*/
    00269         /*@modifies internalState @*/;
    00270
    00276 /*@observer@*/ /*@relnull@*/
    00277 extern const char * rpmdsEVR(/*@null@*/ const rpmds ds)
    00278         /*@*/;
    00279
    00285 evrFlags rpmdsFlags(/*@null@*/ const rpmds ds)
    00286         /*@*/;
    00287
    00293 rpmTag rpmdsTagN(/*@null@*/ const rpmds ds)
    00294         /*@*/;
    00295
    00301 /*@observer@*/ /*@relnull@*/
    00302 extern const char * rpmdsA(/*@null@*/ const rpmds ds)
    00303         /*@*/;
    00304
    00310 time_t rpmdsBT(/*@null@*/ const rpmds ds)
    00311         /*@*/;
    00312
    00319 time_t rpmdsSetBT(/*@null@*/ const rpmds ds, time_t BT)
    00320         /*@modifies ds @*/;
    00321
    00327 nsType rpmdsNSType(/*@null@*/ const rpmds ds)
    00328         /*@*/;
    00329
    00343 int rpmdsNoPromote(/*@null@*/ const rpmds ds)
    00344         /*@*/;
    00345
    00352 int rpmdsSetNoPromote(/*@null@*/ rpmds ds, int nopromote)
    00353         /*@modifies ds @*/;
    00354
    00361 /*@null@*/
    00362 void * rpmdsSetEVRparse(/*@null@*/ rpmds ds,
    00363                 /*@null@*/ int (*EVRparse)(const char *everstr, EVR_t evr))
    00364         /*@modifies ds @*/;
    00365
    00372 /*@null@*/
    00373 void * rpmdsSetEVRcmp(/*@null@*/ rpmds ds,
    00374                 /*@null@*/ int (*EVRcmp)(const char *a, const char *b))
    00375         /*@modifies ds @*/;
    00376
    00382 rpmuint32_t rpmdsColor(/*@null@*/ const rpmds ds)
    00383         /*@*/;
    00384
    00391 rpmuint32_t rpmdsSetColor(/*@null@*/ const rpmds ds, rpmuint32_t color)
    00392         /*@modifies ds @*/;
    00393
    00399 /*@null@*/
    00400 void * rpmdsExclude(/*@null@*/ const rpmds ds)
    00401         /*@*/;
    00402
    00408 int rpmdsNExclude(/*@null@*/ const rpmds ds)
    00409         /*@*/;
    00410
    00416 /*@null@*/
    00417 void * rpmdsInclude(/*@null@*/ const rpmds ds)
    00418         /*@*/;
    00419
    00425 int rpmdsNInclude(/*@null@*/ const rpmds ds)
    00426         /*@*/;
    00427
    00433 rpmuint32_t rpmdsRefs(/*@null@*/ const rpmds ds)
    00434         /*@*/;
    00435
    00442 rpmuint32_t rpmdsSetRefs(/*@null@*/ const rpmds ds, rpmuint32_t refs)
    00443         /*@modifies ds @*/;
    00444
    00450 rpmint32_t rpmdsResult(/*@null@*/ const rpmds ds)
    00451         /*@*/;
    00452
    00459 rpmint32_t rpmdsSetResult(/*@null@*/ const rpmds ds, rpmint32_t result)
    00460         /*@modifies ds @*/;
    00461
    00468 /*@-globuse@*/ /* FIX: rpmMessage annotation is a lie */
    00469 void rpmdsNotify(/*@null@*/ rpmds ds, /*@null@*/ const char * where, int rc)
    00470         /*@globals fileSystem @*/
    00471         /*@modifies fileSystem @*/;
    00472 /*@=globuse@*/
    00473
    00479 int rpmdsNext(/*@null@*/ rpmds ds)
    00480         /*@modifies ds @*/;
    00481
    00487 /*@null@*/
    00488 rpmds rpmdsInit(/*@null@*/ rpmds ds)
    00489         /*@modifies ds @*/;
    00490
    00497 int rpmdsFind(rpmds ds, /*@null@*/ const rpmds ods)
    00498         /*@modifies ds @*/;
    00499
    00506 int rpmdsMerge(/*@null@*/ /*@out@*/ rpmds * dsp, /*@null@*/ rpmds ods)
    00507         /*@modifies *dsp, ods @*/;
    00508
    00517 int rpmdsSearch(/*@null@*/ rpmds ds, /*@null@*/ rpmds ods)
    00518         /*@modifies ds, ods @*/;
    00519
    00522 /*@unchecked@*/ /*@null@*/
    00523 extern const char * _cpuinfo_path;
    00524
    00531 int rpmdsCpuinfo(/*@out@*/ rpmds * dsp, /*@null@*/ const char * fn)
    00532         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00533         /*@modifies *dsp, rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/;
    00534
    00541 int rpmdsRpmlib(rpmds * dsp, /*@null@*/ void * tblp)
    00542         /*@modifies *dsp @*/;
    00543
    00550 int rpmdsSysinfo(rpmPRCO PRCO, /*@null@*/ const char * fn)
    00551         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00552         /*@modifies PRCO, rpmGlobalMacroContext, h_errno,
    00553                 fileSystem, internalState @*/;
    00554
    00561 int rpmdsGetconf(rpmds * dsp, /*@null@*/ const char * path)
    00562         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00563         /*@modifies *dsp, rpmGlobalMacroContext, h_errno,
    00564                 fileSystem, internalState @*/;
    00565
    00572 int rpmdsMergePRCO(void * context, rpmds ds)
    00573         /*@modifies context, ds @*/;
    00574
    00580 /*@null@*/
    00581 rpmPRCO rpmdsFreePRCO(/*@only@*/ /*@null@*/ rpmPRCO PRCO)
    00582         /*@modifies PRCO @*/;
    00583
    00589 rpmPRCO rpmdsNewPRCO(/*@null@*/ Header h)
    00590         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00591         /*@modifies h, rpmGlobalMacroContext, fileSystem, internalState @*/;
    00592
    00599 /*@null@*/
    00600 rpmds rpmdsFromPRCO(/*@null@*/ rpmPRCO PRCO, rpmTag tagN)
    00601         /*@*/;
    00602
    00611 int rpmdsELF(const char * fn, int flags,
    00612                 int (*add) (void * context, rpmds ds), void * context)
    00613         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00614         /*@modifies rpmGlobalMacroContext, fileSystem, internalState @*/;
    00615 #define RPMELF_FLAG_SKIPPROVIDES        0x1     /*<! rpmdsELF: skip provides */
    00616 #define RPMELF_FLAG_SKIPREQUIRES        0x2     /*<! rpmdsELF: skip requires */
    00617
    00625 int rpmdsLdconfig(rpmPRCO PRCO, /*@null@*/ const char * fn)
    00626         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00627         /*@modifies *PRCO, rpmGlobalMacroContext, fileSystem, internalState @*/;
    00628
    00629 #if defined(__sun)
    00630
    00639 int rpmdsRldpath(rpmPRCO PRCO, /*@null@*/ const char * rldp)
    00640         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00641         /*@modifies *PRCO, rpmGlobalMacroContext, fileSystem, internalState @*/;
    00642
    00651 int rpmdsCrle(rpmPRCO PRCO, /*@null@*/ const char * fn)
    00652         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00653         /*@modifies *PRCO, rpmGlobalMacroContext, fileSystem, internalState @*/;
    00654 #endif
    00655
    00662 struct utsname;
    00663 int rpmdsUname(rpmds * dsp, /*@null@*/ const struct utsname * un)
    00664         /*@globals internalState @*/
    00665         /*@modifies *dsp, internalState @*/;
    00666
    00674 int rpmdsPipe(rpmds * dsp, rpmTag tagN, /*@null@*/ const char * cmd)
    00675         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00676         /*@modifies *dsp, rpmGlobalMacroContext, h_errno,
    00677                 fileSystem, internalState @*/;
    00678
    00685 int rpmdsCompare(const rpmds A, const rpmds B)
    00686         /*@*/;
    00687
    00694 int rpmdsMatch(const rpmds A, rpmds B)
    00695         /*@modifies B @*/;
    00696
    00705 void rpmdsProblem(/*@null@*/ rpmps ps, const char * pkgNEVR, const rpmds ds,
    00706                 /*@only@*/ /*@null@*/ const fnpyKey * suggestedKeys,
    00707                 int adding)
    00708         /*@globals internalState @*/
    00709         /*@modifies ps, internalState @*/;
    00710
    00718 int rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote)
    00719         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
    00720         /*@modifies h, rpmGlobalMacroContext, fileSystem, internalState @*/;
    00721
    00729 int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote)
    00730         /*@globals internalState @*/
    00731         /*@modifies internalState @*/;
    00732
    00739 int rpmdsNegateRC(const rpmds ds, int rc)
    00740         /*@*/;
    00741
    00747 /*@observer@*/
    00748 const char * rpmdsType(/*@null@*/ const rpmds ds)
    00749         /*@*/;
    00750
    00751 #if !defined(SWIG)
    00752
    00758 /*@unused@*/ static inline
    00759 int rpmdsPrint(/*@null@*/ rpmds ds, /*@null@*/ FILE * fp)
    00760         /*@globals fileSystem @*/
    00761         /*@modifies ds, *fp, fileSystem @*/
    00762 {
    00763     if (fp == NULL)
    00764         fp = stderr;
    00765     ds = rpmdsInit(ds);
    00766     while (rpmdsNext(ds) >= 0)
    00767         fprintf(fp, "%6d\t%s: %s\n", rpmdsIx(ds), rpmdsType(ds), rpmdsDNEVR(ds)+2);
    00768     return 0;
    00769 }
    00770
    00777 /*@unused@*/ static inline
    00778 int rpmdsPrintResults(/*@null@*/ rpmds ds, /*@null@*/ FILE * fp)
    00779         /*@globals fileSystem @*/
    00780         /*@modifies ds, *fp, fileSystem @*/
    00781 {
    00782     if (fp == NULL)
    00783         fp = stderr;
    00784     ds = rpmdsInit(ds);
    00785     while (rpmdsNext(ds) >= 0) {
    00786         rpmint32_t rc = rpmdsResult(ds);
    00787         if (rc > 0)
    00788             continue;
    00789         fprintf(fp, "%6d\t%s: %s\n", rpmdsIx(ds), rpmdsType(ds), rpmdsDNEVR(ds)+2);
    00790     }
    00791     return 0;
    00792 }
    00793
    00801 /*@-mods@*/     /* XXX LCL wonky */
    00802 /*@unused@*/ static inline
    00803 int rpmdsPrintClosure(/*@null@*/ rpmds P, /*@null@*/ rpmds R,
    00804                 /*@null@*/ FILE * fp)
    00805         /*@globals fileSystem @*/
    00806         /*@modifies P, R, *fp, fileSystem @*/
    00807 {
    00808     int rc;
    00809
    00810     /* Allocate the R results array (to be filled in by rpmdsSearch). */
    00811     (void) rpmdsSetResult(R, 0);        /* allocate result array. */
    00812
    00813     /* Collect the rpmdsSearch results (in the R dependency set). */
    00814     R = rpmdsInit(R);
    00815     while (rpmdsNext(R) >= 0)
    00816         rc = rpmdsSearch(P, R);
    00817
    00818     return rpmdsPrintResults(R, fp);
    00819 }
    00820 /*@=mods@*/
    00821 #endif
    00822
    00824 #ifdef __cplusplus
    00825 }
    00826 #endif
    00827
    00828 #endif  /* H_RPMDS */