Fix checkVersionWithFlags for rpm 4 and remove semaphore handlings
This commit is contained in:
parent
61352c7c3e
commit
8836c8f87b
@ -971,11 +971,7 @@ addToHeaderList(struct configTag *ct,
|
||||
/* process package */
|
||||
logmsg(LOG_DEBUG, "getting header for %s", filepath);
|
||||
|
||||
sem_t rpm_mutex = getRPMMutex();
|
||||
|
||||
sem_wait(&rpm_mutex);
|
||||
if (getHeader(&ts, filepath, &h)) {
|
||||
sem_post(&rpm_mutex);
|
||||
errstr = strerror(errno);
|
||||
logmsg(LOG_WARNING,
|
||||
"%s: unable to read header (%s); skipping.",filename, errstr);
|
||||
@ -998,7 +994,6 @@ addToHeaderList(struct configTag *ct,
|
||||
}
|
||||
memset(newheaderlist, 0, sizeof(struct headerList));
|
||||
getPackageInfoIntoHeaderList(h, newheaderlist);
|
||||
sem_post(&rpm_mutex);
|
||||
|
||||
if (!newheaderlist->sourcename) {
|
||||
logmsg(LOG_WARNING,
|
||||
|
@ -33,7 +33,6 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <semaphore.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#define HEADERS_BUFFER_SIZE 2000000
|
||||
@ -77,6 +76,4 @@ int scanrpmnamecmp(const struct dirent **f1, const struct dirent **f2);
|
||||
|
||||
char* printrpmversion(char *s, int bufsize, long epoch, char *version, char *release);
|
||||
|
||||
sem_t getRPMMutex();
|
||||
|
||||
#endif // RPMFUNCTIONS_H
|
||||
|
@ -28,6 +28,7 @@
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <zlib.h>
|
||||
#include <libiberty/libiberty.h>
|
||||
@ -35,38 +36,59 @@
|
||||
#include "functions.h"
|
||||
#include "rpmfunctions.h"
|
||||
|
||||
sem_t rpm_mutex;
|
||||
|
||||
/*
|
||||
* static int getPackageInfo(
|
||||
* Header h, char **name, char **version, char **release,
|
||||
* char **summary); */
|
||||
|
||||
struct EVR_s {
|
||||
char *data;
|
||||
uint32_t e;
|
||||
char *v;
|
||||
char *r;
|
||||
} EVR;
|
||||
|
||||
void rpmEVRsplit(const char* ver, struct EVR_s *evr) {
|
||||
evr->e = 0;
|
||||
evr->v = NULL;
|
||||
evr->r = NULL;
|
||||
evr->data = strdup(ver);
|
||||
for (int i = 0; i < strlen(ver); i++) {
|
||||
if (evr->data[i] == ':') {
|
||||
evr->e = strtoul(ver, NULL, 10);
|
||||
evr->data[i] = '\0';
|
||||
evr->v = &evr->data[i+1];
|
||||
} else if (evr->data[i] == '-') {
|
||||
evr->data[i] = '\0';
|
||||
evr->r = &evr->data[i+1];
|
||||
if (evr->v == NULL) evr->v = evr->data;
|
||||
}
|
||||
}
|
||||
if (evr->v == NULL) evr->v = evr->data;
|
||||
}
|
||||
|
||||
unsigned int checkVersionWithFlags(const char* cmp1, uint_32 flags, const char* cmp2) {
|
||||
int vercmp = 0;
|
||||
#if RPM_VERSION_MAJOR >= 5
|
||||
struct EVR_s evr1, evr2;
|
||||
struct EVR_s evr1, evr2;
|
||||
|
||||
sem_wait(&rpm_mutex);
|
||||
rpmEVRparse(cmp1, &evr1);
|
||||
rpmEVRparse(cmp2, &evr2);
|
||||
sem_post(&rpm_mutex);
|
||||
rpmEVRsplit(cmp1, &evr1);
|
||||
rpmEVRsplit(cmp2, &evr2);
|
||||
|
||||
if (strlen(evr1.F[RPMEVR_E]) && strlen(evr2.F[RPMEVR_E])) vercmp=rpmvercmp(evr1.F[RPMEVR_E], evr2.F[RPMEVR_E]);
|
||||
else if (strlen(evr2.F[RPMEVR_E])) vercmp = -1;
|
||||
else if (strlen(evr1.F[RPMEVR_E])) vercmp = 1;
|
||||
if (evr1.e == evr2.e) vercmp = 0;
|
||||
else if (evr1.e > evr2.e) vercmp = 1;
|
||||
else vercmp = -1;
|
||||
|
||||
if (!vercmp) vercmp=rpmvercmp(evr1.F[RPMEVR_V], evr2.F[RPMEVR_V]);
|
||||
if (!vercmp && strlen(evr1.F[RPMEVR_R]) && strlen(evr2.F[RPMEVR_R])) vercmp=rpmvercmp(evr1.F[RPMEVR_R], evr2.F[RPMEVR_R]);
|
||||
#else
|
||||
vercmp=rpmvercmp(cmp1, cmp2);
|
||||
#endif
|
||||
if (vercmp == 0) vercmp = rpmvercmp(evr1.v, evr2.v);
|
||||
if (vercmp == 0 && evr1.r && evr2.r) vercmp = rpmvercmp(evr1.r, evr2.r);
|
||||
|
||||
if ((vercmp == 0) && (flags & RPMSENSE_EQUAL)) return 1;
|
||||
else if ((vercmp == 1) && (flags & RPMSENSE_LESS)) return 1;
|
||||
else if ((vercmp == -1) && (flags & RPMSENSE_GREATER)) return 1;
|
||||
free(evr1.data);
|
||||
free(evr2.data);
|
||||
|
||||
return 0;
|
||||
if ((vercmp == 0) && (flags & RPMSENSE_EQUAL)) return 1;
|
||||
else if ((vercmp == 1) && (flags & RPMSENSE_LESS)) return 1;
|
||||
else if ((vercmp == -1) && (flags & RPMSENSE_GREATER)) return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -394,15 +416,10 @@ char* printrpmversion(char *s, int bufsize, long epoch, char *version, char *rel
|
||||
return s;
|
||||
}
|
||||
|
||||
sem_t getRPMMutex() {
|
||||
return rpm_mutex;
|
||||
}
|
||||
|
||||
void rpminit() {
|
||||
#if RPM_VERSION >= 0x040100
|
||||
rpmReadConfigFiles(NULL, NULL);
|
||||
// ts = rpmtsCreate();
|
||||
// rpmtsSetVSFlags(ts, (rpmVSFlags_e)-1);
|
||||
#endif
|
||||
sem_init(&rpm_mutex, 0, 1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user