00001 #ifndef H_RPMFI
00002 #define H_RPMFI
00003
00009
00010
00011 extern int _rpmfi_debug;
00012
00013
00021 typedef enum rpmFileTypes_e {
00022 PIPE = 1,
00023 CDEV = 2,
00024 XDIR = 4,
00025 BDEV = 6,
00026 REG = 8,
00027 LINK = 10,
00028 SOCK = 12
00029 } rpmFileTypes;
00030
00034 typedef enum rpmfileState_e {
00035 RPMFILE_STATE_NORMAL = 0,
00036 RPMFILE_STATE_REPLACED = 1,
00037 RPMFILE_STATE_NOTINSTALLED = 2,
00038 RPMFILE_STATE_NETSHARED = 3,
00039 RPMFILE_STATE_WRONGCOLOR = 4
00040 } rpmfileState;
00041 #define RPMFILE_STATE_MISSING -1
00042
00046 typedef enum rpmfileAttrs_e {
00047
00048 RPMFILE_NONE = 0,
00049
00050 RPMFILE_CONFIG = (1 << 0),
00051 RPMFILE_DOC = (1 << 1),
00052 RPMFILE_ICON = (1 << 2),
00053 RPMFILE_MISSINGOK = (1 << 3),
00054 RPMFILE_NOREPLACE = (1 << 4),
00055 RPMFILE_SPECFILE = (1 << 5),
00056 RPMFILE_GHOST = (1 << 6),
00057 RPMFILE_LICENSE = (1 << 7),
00058 RPMFILE_README = (1 << 8),
00059 RPMFILE_EXCLUDE = (1 << 9),
00060 RPMFILE_UNPATCHED = (1 << 10),
00061 RPMFILE_PUBKEY = (1 << 11),
00062 RPMFILE_POLICY = (1 << 12),
00063 RPMFILE_EXISTS = (1 << 13),
00064 RPMFILE_SPARSE = (1 << 14),
00065 RPMFILE_TYPED = (1 << 15),
00066 RPMFILE_SOURCE = (1 << 16),
00067 RPMFILE_PATCH = (1 << 17),
00068 RPMFILE_OPTIONAL = (1 << 18)
00069 } rpmfileAttrs;
00070
00071 #define RPMFILE_SPOOK (RPMFILE_GHOST|RPMFILE_TYPED)
00072 #define RPMFILE_ALL ~(RPMFILE_NONE)
00073
00077 typedef enum fileAction_e {
00078 FA_UNKNOWN = 0,
00079 FA_CREATE,
00080 FA_COPYIN,
00081 FA_COPYOUT,
00082 FA_BACKUP,
00083 FA_SAVE,
00084 FA_SKIP,
00085 FA_ALTNAME,
00086 FA_ERASE,
00087 FA_SKIPNSTATE,
00088 FA_SKIPNETSHARED,
00089 FA_SKIPCOLOR
00090 } fileAction;
00091
00092 #if defined(_RPMFI_INTERNAL)
00093 #define XFA_SKIPPING(_a) \
00094 ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
00095
00099 struct rpmfi_s {
00100 int i;
00101 int j;
00103
00104 const char * Type;
00106 rpmTag tagN;
00107
00108 Header h;
00110
00111 const char ** bnl;
00112
00113 const char ** dnl;
00115
00116 const char ** fdigests;
00117
00118 uint32_t * fdigestalgos;
00119
00120 const char ** flinks;
00121
00122 const char ** flangs;
00124
00125 uint32_t * dil;
00126
00127 const uint32_t * fflags;
00128
00129 const uint32_t * fsizes;
00130
00131 const uint32_t * fmtimes;
00132
00133 uint16_t * fmodes;
00134
00135 const uint16_t * frdevs;
00136
00137 const uint32_t * finodes;
00139
00140 const char ** fuser;
00141
00142 const char ** fgroup;
00144
00145 uint8_t * fstates;
00147
00148 const uint32_t * fcolors;
00150
00151 const char ** fcontexts;
00153
00154 const char ** cdict;
00155 uint32_t ncdict;
00156
00157 const uint32_t * fcdictx;
00159
00160 const uint32_t * ddict;
00161 uint32_t nddict;
00162
00163 const uint32_t * fddictx;
00164
00165 const uint32_t * fddictn;
00167
00168 const uint32_t * vflags;
00170 uint32_t dc;
00171 uint32_t fc;
00173
00174
00175 rpmte te;
00176
00177
00178 uid_t uid;
00179 gid_t gid;
00180 uint32_t flags;
00181 fileAction action;
00182
00183 fileAction * actions;
00184
00185 struct fingerPrint_s * fps;
00186
00187 const char ** obnl;
00188
00189 const char ** odnl;
00190
00191 uint32_t * odil;
00193
00194 unsigned char * digests;
00195 uint32_t digestalgo;
00196 uint32_t digestlen;
00198
00199 const char * pretrans;
00200
00201 const char * pretransprog;
00202
00203 const char * posttrans;
00204
00205 const char * posttransprog;
00206
00207 const char * verifyscript;
00208
00209 const char * verifyscriptprog;
00210
00211
00212 char * fn;
00213 size_t fnlen;
00215 size_t astriplen;
00216 size_t striplen;
00217 unsigned long long archivePos;
00218 unsigned long long archiveSize;
00219 mode_t dperms;
00220 mode_t fperms;
00221
00222 const char ** apath;
00223 int mapflags;
00224
00225 int * fmapflags;
00226
00227 FSM_t fsm;
00228 uint32_t color;
00230 int isSource;
00232
00233 uint32_t * replacedSizes;
00235 unsigned int record;
00236 int magic;
00237 #define RPMFIMAGIC 0x09697923
00238
00239
00240 int nrefs;
00241 };
00242
00243 #endif
00244
00245 #ifdef __cplusplus
00246 extern "C" {
00247 #endif
00248
00251
00258
00259 rpmfi rpmfiUnlink ( rpmfi fi,
00260 const char * msg)
00261 ;
00262
00270
00271
00272 rpmfi XrpmfiUnlink ( rpmfi fi,
00273 const char * msg, const char * fn, unsigned ln)
00274 ;
00275
00276 #define rpmfiUnlink(_fi, _msg) XrpmfiUnlink(_fi, _msg, __FILE__, __LINE__)
00277
00284
00285 rpmfi rpmfiLink ( rpmfi fi, const char * msg)
00286 ;
00287
00295
00296 rpmfi XrpmfiLink ( rpmfi fi, const char * msg,
00297 const char * fn, unsigned ln)
00298 ;
00299 #define rpmfiLink(_fi, _msg) XrpmfiLink(_fi, _msg, __FILE__, __LINE__)
00300
00306 int rpmfiFC( rpmfi fi)
00307 ;
00308
00314
00315 int rpmfiFX( rpmfi fi)
00316 ;
00317
00324
00325 int rpmfiSetFX( rpmfi fi, int fx)
00326 ;
00327
00333 int rpmfiDC( rpmfi fi)
00334 ;
00335
00341 int rpmfiDX( rpmfi fi)
00342 ;
00343
00350 int rpmfiSetDX( rpmfi fi, int dx)
00351 ;
00352
00358 int rpmfiIsSource( rpmfi fi)
00359 ;
00360
00366
00367 extern const char * rpmfiBN( rpmfi fi)
00368 ;
00369
00375
00376 extern const char * rpmfiDN( rpmfi fi)
00377 ;
00378
00384
00385 extern const char * rpmfiFN( rpmfi fi)
00386 ;
00387
00393 uint32_t rpmfiFFlags( rpmfi fi)
00394 ;
00395
00402 uint32_t rpmfiSetFFlags( rpmfi fi, uint32_t FFlags)
00403 ;
00404
00410 uint32_t rpmfiVFlags( rpmfi fi)
00411 ;
00412
00419 uint32_t rpmfiSetVFlags( rpmfi fi, uint32_t VFlags)
00420 ;
00421
00427 uint16_t rpmfiFMode( rpmfi fi)
00428 ;
00429
00435 rpmfileState rpmfiFState( rpmfi fi)
00436 ;
00437
00444 rpmfileState rpmfiSetFState( rpmfi fi, rpmfileState fstate)
00445 ;
00446
00454
00455 extern const unsigned char * rpmfiDigest( rpmfi fi,
00456 int * algop,
00457 size_t * lenp)
00458 ;
00459
00465
00466 extern const char * rpmfiFLink( rpmfi fi)
00467 ;
00468
00474 uint32_t rpmfiFSize( rpmfi fi)
00475 ;
00476
00482 uint16_t rpmfiFRdev( rpmfi fi)
00483 ;
00484
00490 uint32_t rpmfiFInode( rpmfi fi)
00491 ;
00492
00498 uint32_t rpmfiColor( rpmfi fi)
00499 ;
00500
00506 uint32_t rpmfiFColor( rpmfi fi)
00507 ;
00508
00514
00515
00516 extern const char * rpmfiFClass( rpmfi fi)
00517 ;
00518
00519
00525
00526
00527 extern const char * rpmfiFContext( rpmfi fi)
00528 ;
00529
00530
00537 uint32_t rpmfiFDepends( rpmfi fi,
00538 const uint32_t ** fddictp)
00539 ;
00540
00546 uint32_t rpmfiFNlink( rpmfi fi)
00547 ;
00548
00554 uint32_t rpmfiFMtime( rpmfi fi)
00555 ;
00556
00562
00563 extern const char * rpmfiFUser( rpmfi fi)
00564 ;
00565
00571
00572 extern const char * rpmfiFGroup( rpmfi fi)
00573 ;
00574
00580 int rpmfiNext( rpmfi fi)
00581 ;
00582
00589
00590 rpmfi rpmfiInit( rpmfi fi, int fx)
00591 ;
00592
00598
00599 int rpmfiNextD( rpmfi fi)
00600 ;
00601
00608
00609 rpmfi rpmfiInitD( rpmfi fi, int dx)
00610 ;
00611
00617
00618 rpmfi rpmfiFree( rpmfi fi)
00619
00620 ;
00621
00630
00631 rpmfi rpmfiNew( const rpmts ts, Header h, rpmTag tagN, int flags)
00632
00633 ;
00634
00644 void rpmfiBuildFClasses(Header h,
00645 const char *** fclassp, uint32_t * fcp)
00646
00647
00648 ;
00649
00659 void rpmfiBuildFContexts(Header h,
00660 const char *** fcontextp, uint32_t * fcp)
00661
00662
00663 ;
00664
00674 void rpmfiBuildFSContexts(Header h,
00675 const char *** fcontextp, uint32_t * fcp)
00676
00677
00678 ;
00679
00689 void rpmfiBuildREContexts(Header h,
00690 const char *** fcontextp, uint32_t * fcp)
00691
00692
00693 ;
00694
00705 void rpmfiBuildFDeps(Header h, rpmTag tagN,
00706 const char *** fdepsp, uint32_t * fcp)
00707
00708
00709 ;
00710
00717 int rpmfiCompare(const rpmfi afi, const rpmfi bfi)
00718 ;
00719
00727 fileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing)
00728
00729 ;
00730
00736
00737
00738 const char * rpmfiTypeString(rpmfi fi)
00739 ;
00740
00741
00744 #ifdef __cplusplus
00745 }
00746 #endif
00747
00748 #endif