00001 #ifndef H_RPMTS
00002 #define H_RPMTS
00003
00009 #include "rpmps.h"
00010 #include "rpmsw.h"
00011 #include "rpmsx.h"
00012
00013
00014
00015 extern int _rpmts_debug;
00016
00017 extern int _rpmts_stats;
00018
00019 extern int _fps_debug;
00020
00021
00025 typedef enum rpmVSFlags_e {
00026 RPMVSF_DEFAULT = 0,
00027 RPMVSF_NOHDRCHK = (1 << 0),
00028 RPMVSF_NEEDPAYLOAD = (1 << 1),
00029
00030 RPMVSF_NOSHA1HEADER = (1 << 8),
00031 RPMVSF_NOMD5HEADER = (1 << 9),
00032 RPMVSF_NODSAHEADER = (1 << 10),
00033 RPMVSF_NORSAHEADER = (1 << 11),
00034
00035 RPMVSF_NOSHA1 = (1 << 16),
00036 RPMVSF_NOMD5 = (1 << 17),
00037 RPMVSF_NODSA = (1 << 18),
00038 RPMVSF_NORSA = (1 << 19)
00039
00040 } rpmVSFlags;
00041
00045 typedef enum rpmtsType_e {
00046 RPMTRANS_TYPE_NORMAL = 0,
00047 RPMTRANS_TYPE_ROLLBACK = (1 << 0),
00048 RPMTRANS_TYPE_AUTOROLLBACK = (1 << 1)
00049 } rpmtsType;
00050
00051 #define _RPMVSF_NODIGESTS \
00052 ( RPMVSF_NOSHA1HEADER | \
00053 RPMVSF_NOMD5HEADER | \
00054 RPMVSF_NOSHA1 | \
00055 RPMVSF_NOMD5 )
00056
00057 #define _RPMVSF_NOSIGNATURES \
00058 ( RPMVSF_NODSAHEADER | \
00059 RPMVSF_NORSAHEADER | \
00060 RPMVSF_NODSA | \
00061 RPMVSF_NORSA )
00062
00063 #define _RPMVSF_NOHEADER \
00064 ( RPMVSF_NOSHA1HEADER | \
00065 RPMVSF_NOMD5HEADER | \
00066 RPMVSF_NODSAHEADER | \
00067 RPMVSF_NORSAHEADER )
00068
00069 #define _RPMVSF_NOPAYLOAD \
00070 ( RPMVSF_NOSHA1 | \
00071 RPMVSF_NOMD5 | \
00072 RPMVSF_NODSA | \
00073 RPMVSF_NORSA )
00074
00078 typedef enum rpmtsOpX_e {
00079 RPMTS_OP_TOTAL = 0,
00080 RPMTS_OP_CHECK = 1,
00081 RPMTS_OP_ORDER = 2,
00082 RPMTS_OP_FINGERPRINT = 3,
00083 RPMTS_OP_REPACKAGE = 4,
00084 RPMTS_OP_INSTALL = 5,
00085 RPMTS_OP_ERASE = 6,
00086 RPMTS_OP_SCRIPTLETS = 7,
00087 RPMTS_OP_COMPRESS = 8,
00088 RPMTS_OP_UNCOMPRESS = 9,
00089 RPMTS_OP_DIGEST = 10,
00090 RPMTS_OP_SIGNATURE = 11,
00091 RPMTS_OP_DBADD = 12,
00092 RPMTS_OP_DBREMOVE = 13,
00093 RPMTS_OP_DBGET = 14,
00094 RPMTS_OP_DBPUT = 15,
00095 RPMTS_OP_DBDEL = 16,
00096 RPMTS_OP_MAX = 17
00097 } rpmtsOpX;
00098
00099 #if defined(_RPMTS_INTERNAL)
00100
00101 #include "rpmhash.h"
00102 #include "rpmal.h"
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 struct rpmtsScoreEntry_s {
00126 char * N;
00127 rpmElementType te_types;
00128 int installed;
00129 int erased;
00130 };
00131
00132 typedef struct rpmtsScoreEntry_s * rpmtsScoreEntry;
00133
00134 struct rpmtsScore_s {
00135 int entries;
00136 rpmtsScoreEntry * scores;
00137 int nrefs;
00138 };
00139
00140 typedef struct rpmtsScore_s * rpmtsScore;
00141
00142
00150 rpmRC rpmtsScoreInit(rpmts runningTS, rpmts rollbackTS)
00151
00152 ;
00153
00159
00160
00161 rpmtsScore rpmtsScoreFree( rpmtsScore score)
00162 ;
00163
00164
00170
00171 rpmtsScore rpmtsGetScore(rpmts ts)
00172 ;
00173
00179
00180 rpmtsScoreEntry rpmtsScoreGetEntry(rpmtsScore score, const char *N)
00181 ;
00182
00188
00189
00190
00191
00192
00193
00194 extern int _cacheDependsRC;
00195
00196
00199 typedef struct diskspaceInfo_s * rpmDiskSpaceInfo;
00200
00203 struct diskspaceInfo_s {
00204 dev_t dev;
00205 signed long bneeded;
00206 signed long ineeded;
00207 int bsize;
00208 signed long long bavail;
00209 signed long long iavail;
00210 };
00211
00215 #define adj_fs_blocks(_nb) (((_nb) * 21) / 20)
00216
00217
00218
00219 #define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block))
00220
00223 typedef enum tsStage_e {
00224 TSM_UNKNOWN = 0,
00225 TSM_INSTALL = 7,
00226 TSM_ERASE = 8,
00227 } tsmStage;
00228
00232 struct rpmts_s {
00233 rpmtransFlags transFlags;
00234 tsmStage goal;
00235 rpmtsType type;
00237
00238 rpmdb sdb;
00239 int sdbmode;
00240
00241 int (*solve) (rpmts ts, rpmds key, const void * data)
00242 ;
00243
00244 const void * solveData;
00245 int nsuggests;
00246
00247 const void ** suggests;
00249
00250 rpmCallbackFunction notify;
00251
00252 rpmCallbackData notifyData;
00254
00255 rpmps probs;
00256 rpmprobFilterFlags ignoreSet;
00259 int filesystemCount;
00260
00261 const char ** filesystems;
00262
00263 rpmDiskSpaceInfo dsi;
00265
00266 rpmdb rdb;
00267 int dbmode;
00268
00269 hashTable ht;
00271
00272 int * removedPackages;
00273 int numRemovedPackages;
00274 int allocedRemovedPackages;
00276
00277 rpmal addedPackages;
00278 int numAddedPackages;
00280 #ifndef DYING
00281
00282 rpmal availablePackages;
00283 int numAvailablePackages;
00284 #endif
00285
00286
00287 rpmsx sx;
00289
00290 rpmte relocateElement;
00292
00293 rpmte * order;
00294 int orderCount;
00295 int orderAlloced;
00296 int unorderedSuccessors;
00297 int ntrees;
00298 int maxDepth;
00300 int selinuxEnabled;
00301 int chrootDone;
00302
00303 const char * rootDir;
00304
00305 const char * currDir;
00306
00307 FD_t scriptFd;
00308 int delta;
00309 int_32 tid;
00311 uint_32 color;
00312 uint_32 prefcolor;
00314 rpmVSFlags vsflags;
00316
00317 const char * fn;
00318 int_32 sigtag;
00319 int_32 sigtype;
00320
00321 const void * sig;
00322 int_32 siglen;
00324
00325 const unsigned char * pkpkt;
00326 size_t pkpktlen;
00327 unsigned char pksignid[8];
00329 struct rpmop_s ops[RPMTS_OP_MAX];
00330
00331
00332 pgpDig dig;
00334
00335 Spec spec;
00337
00338 rpmtsScore score;
00340
00341 int nrefs;
00342 };
00343 #endif
00344
00345 #ifdef __cplusplus
00346 extern "C" {
00347 #endif
00348
00359 int rpmtsCheck(rpmts ts)
00360
00361 ;
00362
00379 int rpmtsOrder(rpmts ts)
00380
00381 ;
00382
00400 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00401
00402 ;
00403
00410
00411 rpmts rpmtsUnlink ( rpmts ts,
00412 const char * msg)
00413 ;
00414
00416
00417
00418 rpmts XrpmtsUnlink ( rpmts ts,
00419 const char * msg, const char * fn, unsigned ln)
00420 ;
00421
00422 #define rpmtsUnlink(_ts, _msg) XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__)
00423
00430
00431 rpmts rpmtsLink (rpmts ts, const char * msg)
00432 ;
00433
00435 rpmts XrpmtsLink (rpmts ts,
00436 const char * msg, const char * fn, unsigned ln)
00437 ;
00438 #define rpmtsLink(_ts, _msg) XrpmtsLink(_ts, _msg, __FILE__, __LINE__)
00439
00445 int rpmtsCloseDB(rpmts ts)
00446
00447 ;
00448
00455 int rpmtsOpenDB(rpmts ts, int dbmode)
00456
00457 ;
00458
00466 int rpmtsInitDB(rpmts ts, int dbmode)
00467
00468 ;
00469
00475 int rpmtsRebuildDB(rpmts ts)
00476
00477 ;
00478
00484 int rpmtsVerifyDB(rpmts ts)
00485
00486 ;
00487
00496
00497 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00498 const void * keyp, size_t keylen)
00499
00500 ;
00501
00507
00508 rpmRC rpmtsFindPubkey(rpmts ts)
00509
00510 ;
00511
00512
00518
00519 int rpmtsCloseSDB(rpmts ts)
00520
00521 ;
00522
00523
00530
00531 int rpmtsOpenSDB(rpmts ts, int dbmode)
00532
00533 ;
00534
00535
00543
00544 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00545
00546 ;
00547
00548
00556
00557 int rpmtsAvailable(rpmts ts, const rpmds ds)
00558
00559 ;
00560
00568 int rpmtsSetSolveCallback(rpmts ts,
00569 int (*solve) (rpmts ts, rpmds ds, const void * data),
00570 const void * solveData)
00571 ;
00572
00578 rpmtsType rpmtsGetType(rpmts ts)
00579 ;
00580
00592 void rpmtsSetType(rpmts ts, rpmtsType type)
00593 ;
00594
00600
00601 rpmps rpmtsProblems(rpmts ts)
00602 ;
00603
00608 void rpmtsCleanDig(rpmts ts)
00609 ;
00610
00615 void rpmtsClean(rpmts ts)
00616
00617 ;
00618
00623 void rpmtsEmpty(rpmts ts)
00624
00625 ;
00626
00632
00633 rpmts rpmtsFree( rpmts ts)
00634
00635 ;
00636
00642 rpmVSFlags rpmtsVSFlags(rpmts ts)
00643 ;
00644
00651 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00652 ;
00653
00660 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00661 ;
00662
00668
00669 extern const char * rpmtsRootDir(rpmts ts)
00670 ;
00671
00677 void rpmtsSetRootDir(rpmts ts, const char * rootDir)
00678 ;
00679
00685
00686 extern const char * rpmtsCurrDir(rpmts ts)
00687 ;
00688
00694 void rpmtsSetCurrDir(rpmts ts, const char * currDir)
00695 ;
00696
00702
00703 FD_t rpmtsScriptFd(rpmts ts)
00704 ;
00705
00711 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd)
00712 ;
00713
00719 int rpmtsSELinuxEnabled(rpmts ts)
00720 ;
00721
00727 int rpmtsChrootDone(rpmts ts)
00728 ;
00729
00736 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00737 ;
00738
00744
00745 rpmsx rpmtsREContext(const rpmts ts)
00746 ;
00747
00754 int rpmtsSetREContext(rpmts ts, rpmsx sx)
00755 ;
00756
00762 int_32 rpmtsGetTid(rpmts ts)
00763 ;
00764
00771 int_32 rpmtsSetTid(rpmts ts, int_32 tid)
00772 ;
00773
00779 int_32 rpmtsSigtag(const rpmts ts)
00780 ;
00781
00787 int_32 rpmtsSigtype(const rpmts ts)
00788 ;
00789
00795
00796 extern const void * rpmtsSig(const rpmts ts)
00797 ;
00798
00804 int_32 rpmtsSiglen(const rpmts ts)
00805 ;
00806
00816 int rpmtsSetSig(rpmts ts,
00817 int_32 sigtag, int_32 sigtype,
00818 const void * sig, int_32 siglen)
00819 ;
00820
00826
00827 pgpDig rpmtsDig(rpmts ts)
00828 ;
00829
00835
00836 pgpDigParams rpmtsSignature(const rpmts ts)
00837 ;
00838
00844
00845 pgpDigParams rpmtsPubkey(const rpmts ts)
00846 ;
00847
00853
00854 rpmdb rpmtsGetRdb(rpmts ts)
00855 ;
00856
00862 int rpmtsInitDSI(const rpmts ts)
00863
00864 ;
00865
00875 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00876 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize,
00877 fileAction action)
00878 ;
00879
00885 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00886 ;
00887
00897
00898 void * rpmtsNotify(rpmts ts, rpmte te,
00899 rpmCallbackType what, unsigned long amount, unsigned long total)
00900 ;
00901
00907 int rpmtsNElements(rpmts ts)
00908 ;
00909
00916
00917 rpmte rpmtsElement(rpmts ts, int ix)
00918 ;
00919
00925 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00926 ;
00927
00933 rpmtransFlags rpmtsFlags(rpmts ts)
00934 ;
00935
00942 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
00943 ;
00944
00950
00951 Spec rpmtsSpec(rpmts ts)
00952 ;
00953
00960
00961 Spec rpmtsSetSpec(rpmts ts, Spec spec)
00962 ;
00963
00969
00970 rpmte rpmtsRelocateElement(rpmts ts)
00971 ;
00972
00979
00980 rpmte rpmtsSetRelocateElement(rpmts ts, rpmte relocateElement)
00981 ;
00982
00988 uint_32 rpmtsColor(rpmts ts)
00989 ;
00990
00996 uint_32 rpmtsPrefColor(rpmts ts)
00997 ;
00998
01005 uint_32 rpmtsSetColor(rpmts ts, uint_32 color)
01006 ;
01007
01014
01015 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
01016 ;
01017
01029 int rpmtsSetNotifyCallback(rpmts ts,
01030 rpmCallbackFunction notify,
01031 rpmCallbackData notifyData)
01032 ;
01033
01038
01039 rpmts rpmtsCreate(void)
01040
01041 ;
01042
01056 int rpmtsAddInstallElement(rpmts ts, Header h,
01057 const fnpyKey key, int upgrade,
01058 rpmRelocation * relocs)
01059
01060
01061
01062 ;
01063
01071 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
01072
01073 ;
01074
01083
01084 int rpmtsGetKeys(rpmts ts,
01085 fnpyKey ** ep,
01086 int * nep)
01087
01088 ;
01089
01096 char * hGetNEVR(Header h, const char ** np )
01097 ;
01098
01105 char * hGetNEVRA(Header h, const char ** np )
01106 ;
01107
01113 uint_32 hGetColor(Header h)
01114 ;
01115
01116 #ifdef __cplusplus
01117 }
01118 #endif
01119
01120
01121 #endif