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;
00313 rpmVSFlags vsflags;
00315
00316 const char * fn;
00317 int_32 sigtag;
00318 int_32 sigtype;
00319
00320 const void * sig;
00321 int_32 siglen;
00323
00324 const unsigned char * pkpkt;
00325 size_t pkpktlen;
00326 unsigned char pksignid[8];
00328 struct rpmop_s ops[RPMTS_OP_MAX];
00329
00330
00331 pgpDig dig;
00333
00334 Spec spec;
00336
00337 rpmtsScore score;
00339
00340 int nrefs;
00341 };
00342 #endif
00343
00344 #ifdef __cplusplus
00345 extern "C" {
00346 #endif
00347
00353 int rpmtsCheck(rpmts ts)
00354
00355 ;
00356
00373 int rpmtsOrder(rpmts ts)
00374
00375 ;
00376
00394 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00395
00396 ;
00397
00404
00405 rpmts rpmtsUnlink ( rpmts ts,
00406 const char * msg)
00407 ;
00408
00410
00411
00412 rpmts XrpmtsUnlink ( rpmts ts,
00413 const char * msg, const char * fn, unsigned ln)
00414 ;
00415
00416 #define rpmtsUnlink(_ts, _msg) XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__)
00417
00424
00425 rpmts rpmtsLink (rpmts ts, const char * msg)
00426 ;
00427
00429 rpmts XrpmtsLink (rpmts ts,
00430 const char * msg, const char * fn, unsigned ln)
00431 ;
00432 #define rpmtsLink(_ts, _msg) XrpmtsLink(_ts, _msg, __FILE__, __LINE__)
00433
00439 int rpmtsCloseDB(rpmts ts)
00440
00441 ;
00442
00449 int rpmtsOpenDB(rpmts ts, int dbmode)
00450
00451 ;
00452
00460 int rpmtsInitDB(rpmts ts, int dbmode)
00461
00462 ;
00463
00469 int rpmtsRebuildDB(rpmts ts)
00470
00471 ;
00472
00478 int rpmtsVerifyDB(rpmts ts)
00479
00480 ;
00481
00490
00491 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00492 const void * keyp, size_t keylen)
00493
00494 ;
00495
00501
00502 rpmRC rpmtsFindPubkey(rpmts ts)
00503
00504 ;
00505
00506
00512
00513 int rpmtsCloseSDB(rpmts ts)
00514
00515 ;
00516
00517
00524
00525 int rpmtsOpenSDB(rpmts ts, int dbmode)
00526
00527 ;
00528
00529
00537
00538 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00539
00540 ;
00541
00542
00550
00551 int rpmtsAvailable(rpmts ts, const rpmds ds)
00552
00553 ;
00554
00562 int rpmtsSetSolveCallback(rpmts ts,
00563 int (*solve) (rpmts ts, rpmds ds, const void * data),
00564 const void * solveData)
00565 ;
00566
00572 rpmtsType rpmtsGetType(rpmts ts)
00573 ;
00574
00586 void rpmtsSetType(rpmts ts, rpmtsType type)
00587 ;
00588
00594
00595 rpmps rpmtsProblems(rpmts ts)
00596 ;
00597
00602 void rpmtsCleanDig(rpmts ts)
00603 ;
00604
00609 void rpmtsClean(rpmts ts)
00610
00611 ;
00612
00617 void rpmtsEmpty(rpmts ts)
00618
00619 ;
00620
00626
00627 rpmts rpmtsFree( rpmts ts)
00628
00629 ;
00630
00636 rpmVSFlags rpmtsVSFlags(rpmts ts)
00637 ;
00638
00645 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00646 ;
00647
00654 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00655 ;
00656
00662
00663 extern const char * rpmtsRootDir(rpmts ts)
00664 ;
00665
00671 void rpmtsSetRootDir(rpmts ts, const char * rootDir)
00672 ;
00673
00679
00680 extern const char * rpmtsCurrDir(rpmts ts)
00681 ;
00682
00688 void rpmtsSetCurrDir(rpmts ts, const char * currDir)
00689 ;
00690
00696
00697 FD_t rpmtsScriptFd(rpmts ts)
00698 ;
00699
00705 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd)
00706 ;
00707
00713 int rpmtsSELinuxEnabled(rpmts ts)
00714 ;
00715
00721 int rpmtsChrootDone(rpmts ts)
00722 ;
00723
00730 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00731 ;
00732
00738
00739 rpmsx rpmtsREContext(const rpmts ts)
00740 ;
00741
00748 int rpmtsSetREContext(rpmts ts, rpmsx sx)
00749 ;
00750
00756 int_32 rpmtsGetTid(rpmts ts)
00757 ;
00758
00765 int_32 rpmtsSetTid(rpmts ts, int_32 tid)
00766 ;
00767
00773 int_32 rpmtsSigtag(const rpmts ts)
00774 ;
00775
00781 int_32 rpmtsSigtype(const rpmts ts)
00782 ;
00783
00789
00790 extern const void * rpmtsSig(const rpmts ts)
00791 ;
00792
00798 int_32 rpmtsSiglen(const rpmts ts)
00799 ;
00800
00810 int rpmtsSetSig(rpmts ts,
00811 int_32 sigtag, int_32 sigtype,
00812 const void * sig, int_32 siglen)
00813 ;
00814
00820
00821 pgpDig rpmtsDig(rpmts ts)
00822 ;
00823
00829
00830 pgpDigParams rpmtsSignature(const rpmts ts)
00831 ;
00832
00838
00839 pgpDigParams rpmtsPubkey(const rpmts ts)
00840 ;
00841
00847
00848 rpmdb rpmtsGetRdb(rpmts ts)
00849 ;
00850
00856 int rpmtsInitDSI(const rpmts ts)
00857
00858 ;
00859
00869 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00870 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize,
00871 fileAction action)
00872 ;
00873
00879 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00880 ;
00881
00891
00892 void * rpmtsNotify(rpmts ts, rpmte te,
00893 rpmCallbackType what, unsigned long amount, unsigned long total)
00894 ;
00895
00901 int rpmtsNElements(rpmts ts)
00902 ;
00903
00910
00911 rpmte rpmtsElement(rpmts ts, int ix)
00912 ;
00913
00919 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00920 ;
00921
00927 rpmtransFlags rpmtsFlags(rpmts ts)
00928 ;
00929
00936 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
00937 ;
00938
00944
00945 Spec rpmtsSpec(rpmts ts)
00946 ;
00947
00954
00955 Spec rpmtsSetSpec(rpmts ts, Spec spec)
00956 ;
00957
00963
00964 rpmte rpmtsRelocateElement(rpmts ts)
00965 ;
00966
00973
00974 rpmte rpmtsSetRelocateElement(rpmts ts, rpmte relocateElement)
00975 ;
00976
00982 uint_32 rpmtsColor(rpmts ts)
00983 ;
00984
00991 uint_32 rpmtsSetColor(rpmts ts, uint_32 color)
00992 ;
00993
01000
01001 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
01002 ;
01003
01015 int rpmtsSetNotifyCallback(rpmts ts,
01016 rpmCallbackFunction notify,
01017 rpmCallbackData notifyData)
01018 ;
01019
01024
01025 rpmts rpmtsCreate(void)
01026
01027 ;
01028
01042 int rpmtsAddInstallElement(rpmts ts, Header h,
01043 const fnpyKey key, int upgrade,
01044 rpmRelocation * relocs)
01045
01046
01047
01048 ;
01049
01057 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
01058
01059 ;
01060
01069
01070 int rpmtsGetKeys(rpmts ts,
01071 fnpyKey ** ep,
01072 int * nep)
01073
01074 ;
01075
01082 char * hGetNEVR(Header h, const char ** np )
01083 ;
01084
01091 char * hGetNEVRA(Header h, const char ** np )
01092 ;
01093
01099 uint_32 hGetColor(Header h)
01100 ;
01101
01102 #ifdef __cplusplus
01103 }
01104 #endif
01105
01106
01107 #endif