00001 #ifndef H_RPMTS
00002 #define H_RPMTS
00003
00009 #include "rpmps.h"
00010
00011
00012
00013 extern int _rpmts_debug;
00014
00015 extern int _fps_debug;
00016
00017
00021 typedef enum rpmVSFlags_e {
00022 RPMVSF_DEFAULT = 0,
00023 RPMVSF_NOHDRCHK = (1 << 0),
00024 RPMVSF_NEEDPAYLOAD = (1 << 1),
00025
00026 RPMVSF_NOSHA1HEADER = (1 << 8),
00027 RPMVSF_NOMD5HEADER = (1 << 9),
00028 RPMVSF_NODSAHEADER = (1 << 10),
00029 RPMVSF_NORSAHEADER = (1 << 11),
00030
00031 RPMVSF_NOSHA1 = (1 << 16),
00032 RPMVSF_NOMD5 = (1 << 17),
00033 RPMVSF_NODSA = (1 << 18),
00034 RPMVSF_NORSA = (1 << 19)
00035
00036 } rpmVSFlags;
00037
00038 #define _RPMVSF_NODIGESTS \
00039 ( RPMVSF_NOSHA1HEADER | \
00040 RPMVSF_NOMD5HEADER | \
00041 RPMVSF_NOSHA1 | \
00042 RPMVSF_NOMD5 )
00043
00044 #define _RPMVSF_NOSIGNATURES \
00045 ( RPMVSF_NODSAHEADER | \
00046 RPMVSF_NORSAHEADER | \
00047 RPMVSF_NODSA | \
00048 RPMVSF_NORSA )
00049
00050 #define _RPMVSF_NOHEADER \
00051 ( RPMVSF_NOSHA1HEADER | \
00052 RPMVSF_NOMD5HEADER | \
00053 RPMVSF_NODSAHEADER | \
00054 RPMVSF_NORSAHEADER )
00055
00056 #define _RPMVSF_NOPAYLOAD \
00057 ( RPMVSF_NOSHA1 | \
00058 RPMVSF_NOMD5 | \
00059 RPMVSF_NODSA | \
00060 RPMVSF_NORSA )
00061
00062 #if defined(_RPMTS_INTERNAL)
00063
00064 #include "rpmhash.h"
00065 #include "rpmal.h"
00066
00067
00068
00069 extern int _cacheDependsRC;
00070
00071
00074 typedef struct diskspaceInfo_s * rpmDiskSpaceInfo;
00075
00078 struct diskspaceInfo_s {
00079 dev_t dev;
00080 signed long bneeded;
00081 signed long ineeded;
00082 int bsize;
00083 signed long bavail;
00084 signed long iavail;
00085 };
00086
00090 #define adj_fs_blocks(_nb) (((_nb) * 21) / 20)
00091
00092
00093
00094 #define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block))
00095
00098 typedef enum tsStage_e {
00099 TSM_UNKNOWN = 0,
00100 TSM_INSTALL = 7,
00101 TSM_ERASE = 8,
00102 } tsmStage;
00103
00107 struct rpmts_s {
00108 rpmtransFlags transFlags;
00109 tsmStage goal;
00111
00112 rpmdb sdb;
00113 int sdbmode;
00114
00115 int (*solve) (rpmts ts, rpmds key, const void * data)
00116 ;
00117 const void * solveData;
00118 int nsuggests;
00119
00120 const void ** suggests;
00122
00123 rpmCallbackFunction notify;
00124
00125 rpmCallbackData notifyData;
00127
00128 rpmps probs;
00129 rpmprobFilterFlags ignoreSet;
00132 int filesystemCount;
00133
00134 const char ** filesystems;
00135
00136 rpmDiskSpaceInfo dsi;
00138
00139 rpmdb rdb;
00140 int dbmode;
00141
00142 hashTable ht;
00144
00145 int * removedPackages;
00146 int numRemovedPackages;
00147 int allocedRemovedPackages;
00149
00150 rpmal addedPackages;
00151 int numAddedPackages;
00153 #ifndef DYING
00154
00155 rpmal availablePackages;
00156 int numAvailablePackages;
00157 #endif
00158
00159
00160 rpmte * order;
00161 int orderCount;
00162 int orderAlloced;
00163 int unorderedSuccessors;
00165 int chrootDone;
00166
00167 const char * rootDir;
00168
00169 const char * currDir;
00170
00171 FD_t scriptFd;
00172 int delta;
00173 int_32 tid;
00175 rpmVSFlags vsflags;
00177
00178 const char * fn;
00179 int_32 sigtag;
00180 int_32 sigtype;
00181
00182 const void * sig;
00183 int_32 siglen;
00185
00186 const unsigned char * pkpkt;
00187 size_t pkpktlen;
00188 unsigned char pksignid[8];
00190
00191 pgpDig dig;
00193
00194 int nrefs;
00196 };
00197 #endif
00198
00199 #ifdef __cplusplus
00200 extern "C" {
00201 #endif
00202
00208 int rpmtsCheck(rpmts ts)
00209
00210 ;
00211
00228 int rpmtsOrder(rpmts ts)
00229
00230 ;
00231
00240 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00241
00242
00243
00244 ;
00245
00252
00253 rpmts rpmtsUnlink ( rpmts ts,
00254 const char * msg)
00255 ;
00256
00258
00259
00260 rpmts XrpmtsUnlink ( rpmts ts,
00261 const char * msg, const char * fn, unsigned ln)
00262 ;
00263
00264 #define rpmtsUnlink(_ts, _msg) XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__)
00265
00272
00273 rpmts rpmtsLink (rpmts ts, const char * msg)
00274 ;
00275
00277 rpmts XrpmtsLink (rpmts ts,
00278 const char * msg, const char * fn, unsigned ln)
00279 ;
00280 #define rpmtsLink(_ts, _msg) XrpmtsLink(_ts, _msg, __FILE__, __LINE__)
00281
00287 int rpmtsCloseDB(rpmts ts)
00288
00289 ;
00290
00297 int rpmtsOpenDB(rpmts ts, int dbmode)
00298
00299 ;
00300
00308 int rpmtsInitDB(rpmts ts, int dbmode)
00309
00310 ;
00311
00317 int rpmtsRebuildDB(rpmts ts)
00318
00319 ;
00320
00326 int rpmtsVerifyDB(rpmts ts)
00327
00328 ;
00329
00338
00339 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00340 const void * keyp, size_t keylen)
00341
00342 ;
00343
00349 rpmRC rpmtsFindPubkey(rpmts ts)
00350
00351 ;
00352
00358
00359 int rpmtsCloseSDB(rpmts ts)
00360
00361 ;
00362
00363
00370
00371 int rpmtsOpenSDB(rpmts ts, int dbmode)
00372
00373 ;
00374
00375
00383
00384 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00385
00386 ;
00387
00388
00396
00397 int rpmtsAvailable(rpmts ts, const rpmds ds)
00398
00399 ;
00400
00408 int rpmtsSetSolveCallback(rpmts ts,
00409 int (*solve) (rpmts ts, rpmds ds, const void * data),
00410 const void * solveData)
00411 ;
00412
00418
00419 rpmps rpmtsProblems(rpmts ts)
00420 ;
00421
00426 void rpmtsCleanDig(rpmts ts)
00427 ;
00428
00433 void rpmtsClean(rpmts ts)
00434
00435 ;
00436
00441 void rpmtsEmpty(rpmts ts)
00442
00443 ;
00444
00450
00451 rpmts rpmtsFree( rpmts ts)
00452
00453 ;
00454
00460 rpmVSFlags rpmtsVSFlags(rpmts ts)
00461 ;
00462
00469 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00470 ;
00471
00478 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00479 ;
00480
00486
00487 extern const char * rpmtsRootDir(rpmts ts)
00488 ;
00489
00495 void rpmtsSetRootDir(rpmts ts, const char * rootDir)
00496 ;
00497
00503
00504 extern const char * rpmtsCurrDir(rpmts ts)
00505 ;
00506
00512 void rpmtsSetCurrDir(rpmts ts, const char * currDir)
00513 ;
00514
00520
00521 FD_t rpmtsScriptFd(rpmts ts)
00522 ;
00523
00529 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd)
00530 ;
00531
00537 int rpmtsChrootDone(rpmts ts)
00538 ;
00539
00546 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00547 ;
00548
00554 int_32 rpmtsGetTid(rpmts ts)
00555 ;
00556
00563 int_32 rpmtsSetTid(rpmts ts, int_32 tid)
00564 ;
00565
00571 int_32 rpmtsSigtag(const rpmts ts)
00572 ;
00573
00579 int_32 rpmtsSigtype(const rpmts ts)
00580 ;
00581
00587
00588 extern const void * rpmtsSig(const rpmts ts)
00589 ;
00590
00596 int_32 rpmtsSiglen(const rpmts ts)
00597 ;
00598
00608 int rpmtsSetSig(rpmts ts,
00609 int_32 sigtag, int_32 sigtype,
00610 const void * sig, int_32 siglen)
00611 ;
00612
00618
00619 pgpDig rpmtsDig(rpmts ts)
00620 ;
00621
00627
00628 pgpDigParams rpmtsSignature(const rpmts ts)
00629 ;
00630
00636
00637 pgpDigParams rpmtsPubkey(const rpmts ts)
00638 ;
00639
00645
00646 rpmdb rpmtsGetRdb(rpmts ts)
00647 ;
00648
00654 int rpmtsInitDSI(const rpmts ts)
00655
00656 ;
00657
00667 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00668 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize,
00669 fileAction action)
00670 ;
00671
00677 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00678 ;
00679
00689
00690 void * rpmtsNotify(rpmts ts, rpmte te,
00691 rpmCallbackType what, unsigned long amount, unsigned long total)
00692 ;
00693
00699 int rpmtsNElements(rpmts ts)
00700 ;
00701
00708 rpmte rpmtsElement(rpmts ts, int ix)
00709 ;
00710
00716 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00717 ;
00718
00724 rpmtransFlags rpmtsFlags(rpmts ts)
00725 ;
00726
00733 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
00734 ;
00735
00747 int rpmtsSetNotifyCallback(rpmts ts,
00748 rpmCallbackFunction notify,
00749 rpmCallbackData notifyData)
00750 ;
00751
00756
00757 rpmts rpmtsCreate(void)
00758 ;
00759
00773 int rpmtsAddInstallElement(rpmts ts, Header h,
00774 const fnpyKey key, int upgrade,
00775 rpmRelocation * relocs)
00776
00777
00778
00779 ;
00780
00788 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
00789
00790 ;
00791
00800
00801 int rpmtsGetKeys(rpmts ts,
00802 fnpyKey ** ep,
00803 int * nep)
00804
00805 ;
00806
00813 char * hGetNEVR(Header h, const char ** np )
00814 ;
00815
00816 #ifdef __cplusplus
00817 }
00818 #endif
00819
00820 #endif