1 /*
2  * Copyright (c) 2007-2008, Novell Inc.
3  *
4  * This program is licensed under the BSD license, read LICENSE.BSD
5  * for further information
6  */
7 
8 #include "queue.h"
9 #include "repo.h"
10 #include "chksum.h"
11 
12 struct headerToken_s;
13 
14 extern int repo_add_rpmdb(Repo *repo, Repo *ref, int flags);
15 extern int repo_add_rpmdb_reffp(Repo *repo, FILE *reffp, int flags);
16 extern Id repo_add_rpm(Repo *repo, const char *rpm, int flags);
17 
18 #define RPMDB_REPORT_PROGRESS	(1 << 8)
19 #define RPM_ADD_WITH_PKGID	(1 << 9)
20 #define RPM_ADD_NO_FILELIST	(1 << 10)
21 #define RPM_ADD_NO_RPMLIBREQS	(1 << 11)
22 #define RPM_ADD_WITH_SHA1SUM	(1 << 12)
23 #define RPM_ADD_WITH_SHA256SUM	(1 << 13)
24 #define RPM_ADD_TRIGGERS	(1 << 14)
25 #define RPM_ADD_WITH_HDRID	(1 << 15)
26 #define RPM_ADD_WITH_LEADSIGID	(1 << 16)
27 #define RPM_ADD_WITH_CHANGELOG	(1 << 17)
28 #define RPM_ADD_FILTERED_FILELIST (1 << 18)
29 #define RPMDB_KEEP_GPG_PUBKEY   (1 << 19)
30 
31 #define RPMDB_EMPTY_REFREPO	(1 << 30)	/* internal */
32 
33 #define RPM_ITERATE_FILELIST_ONLYDIRS	(1 << 0)
34 #define RPM_ITERATE_FILELIST_WITHMD5	(1 << 1)
35 #define RPM_ITERATE_FILELIST_WITHCOL	(1 << 2)
36 #define RPM_ITERATE_FILELIST_NOGHOSTS	(1 << 3)
37 
38 /* create and free internal state, rootdir is the rootdir of the rpm database */
39 extern void *rpm_state_create(Pool *pool, const char *rootdir);
40 extern void *rpm_state_free(void *rpmstate);
41 
42 /* return all matching rpmdbids */
43 extern int rpm_installedrpmdbids(void *rpmstate, const char *index, const char *match, Queue *rpmdbidq);
44 /* stat the package database */
45 extern int rpm_stat_database(void *rpmstate, void *stb);
46 /* hash the state of the package database */
47 extern int rpm_hash_database_state(void *rpmstate, Chksum *chk);
48 
49 /* return handles to a rpm header */
50 extern void *rpm_byrpmdbid(void *rpmstate, Id rpmdbid);
51 extern void *rpm_byfp(void *rpmstate, FILE *fp, const char *name);
52 extern void *rpm_byrpmh(void *rpmstate, struct headerToken_s *h);
53 
54 /* operations on a rpm header handle */
55 
56 struct filelistinfo {
57   unsigned int dirlen;
58   unsigned int diridx;
59   const char *digest;
60   unsigned int mode;
61   unsigned int color;
62 };
63 
64 extern char *rpm_query(void *rpmhandle, Id what);
65 extern unsigned long long rpm_query_num(void *rpmhandle, Id what, unsigned long long notfound);
66 extern void rpm_iterate_filelist(void *rpmhandle, int flags, void (*cb)(void *, const char *, struct filelistinfo *), void *cbdata);
67 extern Id   repo_add_rpm_handle(Repo *repo, void *rpmhandle, int flags);
68