#include "oldheader.h"
-typedef enum {
+typedef enum
+ {
RPMDB_NONE, RPMDB_GDBM_ERROR, RPMDB_NO_MEMORY
-} rpm_error;
+ }
+rpm_error;
-struct oldrpmdb {
+struct oldrpmdb
+ {
GDBM_FILE packages;
GDBM_FILE nameIndex;
GDBM_FILE pathIndex;
GDBM_FILE postIndex;
rpm_error rpmdbError;
gdbm_error gdbmError;
-};
+ };
-enum oldrpmdbFreeType {
+enum oldrpmdbFreeType
+ {
RPMDB_NOFREE, RPMDB_FREENAME, RPMDB_FREEALL
-};
+ };
-struct oldrpmdbLabel {
+struct oldrpmdbLabel
+ {
char *name, *version, *release;
enum oldrpmdbFreeType freeType;
struct oldrpmdbLabel *next;
int fileNumber; /* -1 means invalid */
-};
+ };
-struct oldrpmdbPackageInfo {
+struct oldrpmdbPackageInfo
+ {
char *name, *version, *release;
char *labelstr;
unsigned int installTime, buildTime;
char *copyright;
unsigned int fileCount;
struct oldrpmFileInfo *files;
-};
+ };
#define RPMDB_READER 1
struct oldrpmdbLabel *oldrpmdbFindPackagesByLabel (struct oldrpmdb *oldrpmdb,
struct oldrpmdbLabel label);
-char *oldrpmdbGetPackageGroup (struct oldrpmdb *oldrpmdb, struct oldrpmdbLabel label);
+char *oldrpmdbGetPackageGroup (struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label);
+char *oldrpmdbGetPackagePostun (struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label);
+char *oldrpmdbGetPackagePreun (struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label);
char *oldrpmdbGetPackageGif (struct oldrpmdb *oldrpmdb, struct oldrpmdbLabel label,
int *size);
int oldrpmdbGetPackageInfo (struct oldrpmdb *oldrpmdb, struct oldrpmdbLabel label,
static int labelstrlistToLabelList(char * str, int length,
struct oldrpmdbLabel ** list);
+static char * getScript(char * which, struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label);
+
static char * prefix = "/var/lib/rpm";
char * oldrpmdbLabelToLabelstr(struct oldrpmdbLabel label, int withFileNum) {
return g;
}
+static char * getScript(char * which, struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label) {
+ datum key, rec;
+ char * labelstr;
+
+ labelstr = oldrpmdbLabelToLabelstr(label, 0);
+ labelstr = realloc(labelstr, strlen(labelstr) + 10);
+ strcat(labelstr, ":");
+ strcat(labelstr, which);
+
+ key.dptr = labelstr;
+ key.dsize = strlen(labelstr);
+
+ rec = gdbm_fetch(oldrpmdb->postIndex, key);
+ free(labelstr);
+ if (!rec.dptr) {
+ return NULL;
+ }
+
+ printf("found for: %s\n", labelstr);
+
+ return rec.dptr;
+}
+
+char *oldrpmdbGetPackagePostun (struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label) {
+ return getScript("post", oldrpmdb, label);
+}
+
+char *oldrpmdbGetPackagePreun (struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label) {
+ return getScript("pre", oldrpmdb, label);
+}
+
/* Returns NULL on error or if no icon exists */
-char * oldrpmdbGetPackageGif(struct oldrpmdb * oldrpmdb, struct oldrpmdbLabel label,
- int * size) {
+char * oldrpmdbGetPackageGif(struct oldrpmdb * oldrpmdb,
+ struct oldrpmdbLabel label, int * size) {
datum key, rec;
char * labelstr;