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
00042 #define _RPMVSF_NODIGESTS \
00043 ( RPMVSF_NOSHA1HEADER | \
00044 RPMVSF_NOMD5HEADER | \
00045 RPMVSF_NOSHA1 | \
00046 RPMVSF_NOMD5 )
00047
00048 #define _RPMVSF_NOSIGNATURES \
00049 ( RPMVSF_NODSAHEADER | \
00050 RPMVSF_NORSAHEADER | \
00051 RPMVSF_NODSA | \
00052 RPMVSF_NORSA )
00053
00054 #define _RPMVSF_NOHEADER \
00055 ( RPMVSF_NOSHA1HEADER | \
00056 RPMVSF_NOMD5HEADER | \
00057 RPMVSF_NODSAHEADER | \
00058 RPMVSF_NORSAHEADER )
00059
00060 #define _RPMVSF_NOPAYLOAD \
00061 ( RPMVSF_NOSHA1 | \
00062 RPMVSF_NOMD5 | \
00063 RPMVSF_NODSA | \
00064 RPMVSF_NORSA )
00065
00069 typedef enum rpmtsOpX_e {
00070 RPMTS_OP_TOTAL = 0,
00071 RPMTS_OP_CHECK = 1,
00072 RPMTS_OP_ORDER = 2,
00073 RPMTS_OP_FINGERPRINT = 3,
00074 RPMTS_OP_REPACKAGE = 4,
00075 RPMTS_OP_INSTALL = 5,
00076 RPMTS_OP_ERASE = 6,
00077 RPMTS_OP_SCRIPTLETS = 7,
00078 RPMTS_OP_COMPRESS = 8,
00079 RPMTS_OP_UNCOMPRESS = 9,
00080 RPMTS_OP_DIGEST = 10,
00081 RPMTS_OP_SIGNATURE = 11,
00082 RPMTS_OP_DBADD = 12,
00083 RPMTS_OP_DBREMOVE = 13,
00084 RPMTS_OP_DBGET = 14,
00085 RPMTS_OP_DBPUT = 15,
00086 RPMTS_OP_DBDEL = 16,
00087 RPMTS_OP_MAX = 17
00088 } rpmtsOpX;
00089
00090 #if defined(_RPMTS_INTERNAL)
00091
00092 #include "rpmhash.h"
00093 #include "rpmal.h"
00094
00095
00096
00097 extern int _cacheDependsRC;
00098
00099
00102 typedef struct diskspaceInfo_s * rpmDiskSpaceInfo;
00103
00106 struct diskspaceInfo_s {
00107 dev_t dev;
00108 signed long bneeded;
00109 signed long ineeded;
00110 int bsize;
00111 signed long long bavail;
00112 signed long long iavail;
00113 };
00114
00118 #define adj_fs_blocks(_nb) (((_nb) * 21) / 20)
00119
00120
00121
00122 #define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block))
00123
00126 typedef enum tsStage_e {
00127 TSM_UNKNOWN = 0,
00128 TSM_INSTALL = 7,
00129 TSM_ERASE = 8,
00130 } tsmStage;
00131
00135 struct rpmts_s {
00136 rpmtransFlags transFlags;
00137 tsmStage goal;
00139
00140 rpmdb sdb;
00141 int sdbmode;
00142
00143 int (*solve) (rpmts ts, rpmds key, const void * data)
00144 ;
00145
00146 const void * solveData;
00147 int nsuggests;
00148
00149 const void ** suggests;
00151
00152 rpmCallbackFunction notify;
00153
00154 rpmCallbackData notifyData;
00156
00157 rpmps probs;
00158 rpmprobFilterFlags ignoreSet;
00161 int filesystemCount;
00162
00163 const char ** filesystems;
00164
00165 rpmDiskSpaceInfo dsi;
00167
00168 rpmdb rdb;
00169 int dbmode;
00170
00171 hashTable ht;
00173
00174 int * removedPackages;
00175 int numRemovedPackages;
00176 int allocedRemovedPackages;
00178
00179 rpmal addedPackages;
00180 int numAddedPackages;
00182 #ifndef DYING
00183
00184 rpmal availablePackages;
00185 int numAvailablePackages;
00186 #endif
00187
00188
00189 rpmsx sx;
00191
00192 rpmte relocateElement;
00194
00195 rpmte * order;
00196 int orderCount;
00197 int orderAlloced;
00198 int unorderedSuccessors;
00200 int selinuxEnabled;
00201 int chrootDone;
00202
00203 const char * rootDir;
00204
00205 const char * currDir;
00206
00207 FD_t scriptFd;
00208 int delta;
00209 int_32 tid;
00211 uint_32 color;
00213 rpmVSFlags vsflags;
00215
00216 const char * fn;
00217 int_32 sigtag;
00218 int_32 sigtype;
00219
00220 const void * sig;
00221 int_32 siglen;
00223
00224 const unsigned char * pkpkt;
00225 size_t pkpktlen;
00226 unsigned char pksignid[8];
00228 struct rpmop_s ops[RPMTS_OP_MAX];
00229
00230
00231 pgpDig dig;
00233
00234 Spec spec;
00236
00237 int nrefs;
00239 };
00240 #endif
00241
00242 #ifdef __cplusplus
00243 extern "C" {
00244 #endif
00245
00251 int rpmtsCheck(rpmts ts)
00252
00253 ;
00254
00271 int rpmtsOrder(rpmts ts)
00272
00273 ;
00274
00283 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00284
00285 ;
00286
00293
00294 rpmts rpmtsUnlink ( rpmts ts,
00295 const char * msg)
00296 ;
00297
00299
00300
00301 rpmts XrpmtsUnlink ( rpmts ts,
00302 const char * msg, const char * fn, unsigned ln)
00303 ;
00304
00305 #define rpmtsUnlink(_ts, _msg) XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__)
00306
00313
00314 rpmts rpmtsLink (rpmts ts, const char * msg)
00315 ;
00316
00318 rpmts XrpmtsLink (rpmts ts,
00319 const char * msg, const char * fn, unsigned ln)
00320 ;
00321 #define rpmtsLink(_ts, _msg) XrpmtsLink(_ts, _msg, __FILE__, __LINE__)
00322
00328 int rpmtsCloseDB(rpmts ts)
00329
00330 ;
00331
00338 int rpmtsOpenDB(rpmts ts, int dbmode)
00339
00340 ;
00341
00349 int rpmtsInitDB(rpmts ts, int dbmode)
00350
00351 ;
00352
00358 int rpmtsRebuildDB(rpmts ts)
00359
00360 ;
00361
00367 int rpmtsVerifyDB(rpmts ts)
00368
00369 ;
00370
00379
00380 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00381 const void * keyp, size_t keylen)
00382
00383 ;
00384
00390 rpmRC rpmtsFindPubkey(rpmts ts)
00391
00392 ;
00393
00399
00400 int rpmtsCloseSDB(rpmts ts)
00401
00402 ;
00403
00404
00411
00412 int rpmtsOpenSDB(rpmts ts, int dbmode)
00413
00414 ;
00415
00416
00424
00425 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00426
00427 ;
00428
00429
00437
00438 int rpmtsAvailable(rpmts ts, const rpmds ds)
00439
00440 ;
00441
00449 int rpmtsSetSolveCallback(rpmts ts,
00450 int (*solve) (rpmts ts, rpmds ds, const void * data),
00451 const void * solveData)
00452 ;
00453
00459
00460 rpmps rpmtsProblems(rpmts ts)
00461 ;
00462
00467 void rpmtsCleanDig(rpmts ts)
00468 ;
00469
00474 void rpmtsClean(rpmts ts)
00475
00476 ;
00477
00482 void rpmtsEmpty(rpmts ts)
00483
00484 ;
00485
00491
00492 rpmts rpmtsFree( rpmts ts)
00493
00494 ;
00495
00501 rpmVSFlags rpmtsVSFlags(rpmts ts)
00502 ;
00503
00510 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00511 ;
00512
00519 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00520 ;
00521
00527
00528 extern const char * rpmtsRootDir(rpmts ts)
00529 ;
00530
00536 void rpmtsSetRootDir(rpmts ts, const char * rootDir)
00537 ;
00538
00544
00545 extern const char * rpmtsCurrDir(rpmts ts)
00546 ;
00547
00553 void rpmtsSetCurrDir(rpmts ts, const char * currDir)
00554 ;
00555
00561
00562 FD_t rpmtsScriptFd(rpmts ts)
00563 ;
00564
00570 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd)
00571 ;
00572
00578 int rpmtsSELinuxEnabled(rpmts ts)
00579 ;
00580
00586 int rpmtsChrootDone(rpmts ts)
00587 ;
00588
00595 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00596 ;
00597
00603
00604 rpmsx rpmtsREContext(const rpmts ts)
00605 ;
00606
00613 int rpmtsSetREContext(rpmts ts, rpmsx sx)
00614 ;
00615
00621 int_32 rpmtsGetTid(rpmts ts)
00622 ;
00623
00630 int_32 rpmtsSetTid(rpmts ts, int_32 tid)
00631 ;
00632
00638 int_32 rpmtsSigtag(const rpmts ts)
00639 ;
00640
00646 int_32 rpmtsSigtype(const rpmts ts)
00647 ;
00648
00654
00655 extern const void * rpmtsSig(const rpmts ts)
00656 ;
00657
00663 int_32 rpmtsSiglen(const rpmts ts)
00664 ;
00665
00675 int rpmtsSetSig(rpmts ts,
00676 int_32 sigtag, int_32 sigtype,
00677 const void * sig, int_32 siglen)
00678 ;
00679
00685
00686 pgpDig rpmtsDig(rpmts ts)
00687 ;
00688
00694
00695 pgpDigParams rpmtsSignature(const rpmts ts)
00696 ;
00697
00703
00704 pgpDigParams rpmtsPubkey(const rpmts ts)
00705 ;
00706
00712
00713 rpmdb rpmtsGetRdb(rpmts ts)
00714 ;
00715
00721 int rpmtsInitDSI(const rpmts ts)
00722
00723 ;
00724
00734 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00735 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize,
00736 fileAction action)
00737 ;
00738
00744 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00745 ;
00746
00756
00757 void * rpmtsNotify(rpmts ts, rpmte te,
00758 rpmCallbackType what, unsigned long amount, unsigned long total)
00759 ;
00760
00766 int rpmtsNElements(rpmts ts)
00767 ;
00768
00775
00776 rpmte rpmtsElement(rpmts ts, int ix)
00777 ;
00778
00784 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00785 ;
00786
00792 rpmtransFlags rpmtsFlags(rpmts ts)
00793 ;
00794
00801 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
00802 ;
00803
00809
00810 Spec rpmtsSpec(rpmts ts)
00811 ;
00812
00819
00820 Spec rpmtsSetSpec(rpmts ts, Spec spec)
00821 ;
00822
00828
00829 rpmte rpmtsRelocateElement(rpmts ts)
00830 ;
00831
00838
00839 rpmte rpmtsSetRelocateElement(rpmts ts, rpmte relocateElement)
00840 ;
00841
00847 uint_32 rpmtsColor(rpmts ts)
00848 ;
00849
00856 uint_32 rpmtsSetColor(rpmts ts, uint_32 color)
00857 ;
00858
00865
00866 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
00867 ;
00868
00880 int rpmtsSetNotifyCallback(rpmts ts,
00881 rpmCallbackFunction notify,
00882 rpmCallbackData notifyData)
00883 ;
00884
00889
00890 rpmts rpmtsCreate(void)
00891
00892 ;
00893
00907 int rpmtsAddInstallElement(rpmts ts, Header h,
00908 const fnpyKey key, int upgrade,
00909 rpmRelocation * relocs)
00910
00911
00912
00913 ;
00914
00922 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
00923
00924 ;
00925
00934
00935 int rpmtsGetKeys(rpmts ts,
00936 fnpyKey ** ep,
00937 int * nep)
00938
00939 ;
00940
00947 char * hGetNEVR(Header h, const char ** np )
00948 ;
00949
00956 char * hGetNEVRA(Header h, const char ** np )
00957 ;
00958
00964 uint_32 hGetColor(Header h)
00965 ;
00966
00967 #ifdef __cplusplus
00968 }
00969 #endif
00970
00971 #endif