Turned pmdepmissing_t into an opaque structure
This commit is contained in:
parent
e5389ddc62
commit
95ea99e197
|
@ -150,14 +150,13 @@ int add_prepare(pmdb_t *db, pmtrans_t *trans, PMList **data)
|
|||
for(j = lp; j; j = j->next) {
|
||||
pmdepmissing_t* miss = j->data;
|
||||
|
||||
if(miss->type == PM_DEP_DEPEND || miss->type == PM_DEP_REQUIRED) {
|
||||
if(miss->type == PM_DEP_TYPE_DEPEND || miss->type == PM_DEP_TYPE_REQUIRED) {
|
||||
if(!errorout) {
|
||||
errorout = 1;
|
||||
}
|
||||
if((miss = (pmdepmissing_t *)malloc(sizeof(pmdepmissing_t))) == NULL) {
|
||||
FREELIST(lp);
|
||||
/* ORE, needed or not ?
|
||||
FREELIST(*data);*/
|
||||
FREELIST(*data);
|
||||
RET_ERR(PM_ERR_MEMORY, -1);
|
||||
}
|
||||
*miss = *(pmdepmissing_t*)j->data;
|
||||
|
@ -173,7 +172,7 @@ int add_prepare(pmdb_t *db, pmtrans_t *trans, PMList **data)
|
|||
_alpm_log(PM_LOG_FLOW2, "looking for conflicts");
|
||||
for(j = lp; j; j = j->next) {
|
||||
pmdepmissing_t* miss = (pmdepmissing_t *)j->data;
|
||||
if(miss->type == PM_DEP_CONFLICT) {
|
||||
if(miss->type == PM_DEP_TYPE_CONFLICT) {
|
||||
if(!errorout) {
|
||||
errorout = 1;
|
||||
}
|
||||
|
|
|
@ -564,6 +564,31 @@ int alpm_trans_release()
|
|||
return(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Dependencies
|
||||
*/
|
||||
|
||||
void *alpm_dep_getinfo(pmdepmissing_t *miss, unsigned char parm)
|
||||
{
|
||||
void *data;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(miss != NULL, return(NULL));
|
||||
|
||||
switch(parm) {
|
||||
case PM_DEP_TARGET: data = (void *)(int)miss->target; break;
|
||||
case PM_DEP_TYPE: data = (void *)(int)miss->type; break;
|
||||
case PM_DEP_MOD: data = (void *)(int)miss->depend.mod; break;
|
||||
case PM_DEP_NAME: data = miss->depend.name; break;
|
||||
case PM_DEP_VERSION: data = miss->depend.version; break;
|
||||
default:
|
||||
data = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
return(data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Log facilities
|
||||
*/
|
||||
|
|
|
@ -38,9 +38,7 @@ typedef struct __pmpkg_t PM_PKG;
|
|||
typedef struct __pmgrp_t PM_GRP;
|
||||
typedef struct __pmsync_t PM_SYNC;
|
||||
typedef struct __pmtrans_t PM_TRANS;
|
||||
/* ORE
|
||||
typedef struct __pmdepend_t PM_DEP;
|
||||
typedef struct __pmdepmissing_t PM_DEPMISS; */
|
||||
typedef struct __pmdepmissing_t PM_DEPMISS;
|
||||
|
||||
/*
|
||||
* Library
|
||||
|
@ -226,33 +224,6 @@ enum {
|
|||
PM_TRANS_TARGETS
|
||||
};
|
||||
|
||||
/* Dependencies */
|
||||
enum {
|
||||
PM_DEP_ANY = 1,
|
||||
PM_DEP_EQ,
|
||||
PM_DEP_GE,
|
||||
PM_DEP_LE
|
||||
};
|
||||
enum {
|
||||
PM_DEP_DEPEND = 1,
|
||||
PM_DEP_REQUIRED,
|
||||
PM_DEP_CONFLICT
|
||||
};
|
||||
|
||||
/* ORE
|
||||
to be deprecated in favor of PM_DEP and PM_DEPMISS (opaque) */
|
||||
typedef struct __pmdepend_t {
|
||||
unsigned short mod;
|
||||
char name[256];
|
||||
char version[64];
|
||||
} pmdepend_t;
|
||||
|
||||
typedef struct __pmdepmissing_t {
|
||||
unsigned char type;
|
||||
char target[256];
|
||||
pmdepend_t depend;
|
||||
} pmdepmissing_t;
|
||||
|
||||
void *alpm_trans_getinfo(unsigned char parm);
|
||||
int alpm_trans_init(unsigned char type, unsigned char flags, alpm_trans_cb cb);
|
||||
int alpm_trans_addtarget(char *target);
|
||||
|
@ -260,6 +231,32 @@ int alpm_trans_prepare(PM_LIST **data);
|
|||
int alpm_trans_commit();
|
||||
int alpm_trans_release();
|
||||
|
||||
/*
|
||||
* Dependencies
|
||||
*/
|
||||
|
||||
enum {
|
||||
PM_DEP_MOD_ANY = 1,
|
||||
PM_DEP_MOD_EQ,
|
||||
PM_DEP_MOD_GE,
|
||||
PM_DEP_MOD_LE
|
||||
};
|
||||
enum {
|
||||
PM_DEP_TYPE_DEPEND = 1,
|
||||
PM_DEP_TYPE_REQUIRED,
|
||||
PM_DEP_TYPE_CONFLICT
|
||||
};
|
||||
/* Dependencies parameters */
|
||||
enum {
|
||||
PM_DEP_TARGET = 1,
|
||||
PM_DEP_TYPE,
|
||||
PM_DEP_MOD,
|
||||
PM_DEP_NAME,
|
||||
PM_DEP_VERSION
|
||||
};
|
||||
|
||||
void *alpm_dep_getinfo(PM_DEPMISS *miss, unsigned char parm);
|
||||
|
||||
/*
|
||||
* PM_LIST helpers
|
||||
*/
|
||||
|
|
|
@ -126,7 +126,7 @@ PMList *sortbydeps(PMList *targets, int mode)
|
|||
* with depmod operators.
|
||||
*
|
||||
*/
|
||||
PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
||||
PMList *checkdeps(pmdb_t *db, unsigned char op, PMList *packages)
|
||||
{
|
||||
pmpkg_t *info = NULL;
|
||||
pmdepend_t depend;
|
||||
|
@ -186,7 +186,7 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
FREELISTPTR(provides);
|
||||
}
|
||||
found = 0;
|
||||
if(depend.mod == PM_DEP_ANY) {
|
||||
if(depend.mod == PM_DEP_MOD_ANY) {
|
||||
found = 1;
|
||||
} else {
|
||||
/* note that we use the version from the NEW package in the check */
|
||||
|
@ -198,15 +198,15 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
}
|
||||
cmp = rpmvercmp(ver, depend.version);
|
||||
switch(depend.mod) {
|
||||
case PM_DEP_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_LE: found = (cmp <= 0); break;
|
||||
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
|
||||
}
|
||||
FREE(ver);
|
||||
}
|
||||
if(!found) {
|
||||
MALLOC(miss, sizeof(pmdepmissing_t));
|
||||
miss->type = PM_DEP_REQUIRED;
|
||||
miss->type = PM_DEP_TYPE_REQUIRED;
|
||||
miss->depend.mod = depend.mod;
|
||||
STRNCPY(miss->target, p->name, PKG_NAME_LEN);
|
||||
STRNCPY(miss->depend.name, depend.name, PKG_NAME_LEN);
|
||||
|
@ -234,8 +234,8 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
pmpkg_t *dp = (pmpkg_t *)k->data;
|
||||
if(!strcmp(j->data, dp->name)) {
|
||||
MALLOC(miss, sizeof(pmdepmissing_t));
|
||||
miss->type = PM_DEP_CONFLICT;
|
||||
miss->depend.mod = PM_DEP_ANY;
|
||||
miss->type = PM_DEP_TYPE_CONFLICT;
|
||||
miss->depend.mod = PM_DEP_MOD_ANY;
|
||||
miss->depend.version[0] = '\0';
|
||||
STRNCPY(miss->target, tp->name, PKG_NAME_LEN);
|
||||
STRNCPY(miss->depend.name, dp->name, PKG_NAME_LEN);
|
||||
|
@ -249,8 +249,8 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
pmpkg_t *a = (pmpkg_t *)k->data;
|
||||
if(!strcmp(a->name, (char *)j->data)) {
|
||||
MALLOC(miss, sizeof(pmdepmissing_t));
|
||||
miss->type = PM_DEP_CONFLICT;
|
||||
miss->depend.mod = PM_DEP_ANY;
|
||||
miss->type = PM_DEP_TYPE_CONFLICT;
|
||||
miss->depend.mod = PM_DEP_MOD_ANY;
|
||||
miss->depend.version[0] = '\0';
|
||||
STRNCPY(miss->target, tp->name, PKG_NAME_LEN);
|
||||
STRNCPY(miss->depend.name, a->name, PKG_NAME_LEN);
|
||||
|
@ -266,8 +266,8 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
for(j = info->conflicts; j; j = j->next) {
|
||||
if(!strcmp((char *)j->data, tp->name)) {
|
||||
MALLOC(miss, sizeof(pmdepmissing_t));
|
||||
miss->type = PM_DEP_CONFLICT;
|
||||
miss->depend.mod = PM_DEP_ANY;
|
||||
miss->type = PM_DEP_TYPE_CONFLICT;
|
||||
miss->depend.mod = PM_DEP_MOD_ANY;
|
||||
miss->depend.version[0] = '\0';
|
||||
STRNCPY(miss->target, tp->name, PKG_NAME_LEN);
|
||||
STRNCPY(miss->depend.name, info->name, PKG_NAME_LEN);
|
||||
|
@ -292,8 +292,8 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
}
|
||||
// we treat this just like a conflict
|
||||
MALLOC(miss, sizeof(pmdepmissing_t));
|
||||
miss->type = CONFLICT;
|
||||
miss->depend.mod = PM_DEP_ANY;
|
||||
miss->type = PM_DEP_TYPE_CONFLICT;
|
||||
miss->depend.mod = PM_DEP_MOD_ANY;
|
||||
miss->depend.version[0] = '\0';
|
||||
STRNCPY(miss->target, tp->name, PKG_NAME_LEN);
|
||||
STRNCPY(miss->depend.name, k->data, PKG_NAME_LEN);
|
||||
|
@ -314,7 +314,7 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
for(k = db_get_pkgcache(db); k && !found; k = k->next) {
|
||||
pmpkg_t *p = (pmpkg_t *)k->data;
|
||||
if(!strcmp(p->name, depend.name)) {
|
||||
if(depend.mod == PM_DEP_ANY) {
|
||||
if(depend.mod == PM_DEP_MOD_ANY) {
|
||||
/* accept any version */
|
||||
found = 1;
|
||||
} else {
|
||||
|
@ -329,9 +329,9 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
}
|
||||
cmp = rpmvercmp(ver, depend.version);
|
||||
switch(depend.mod) {
|
||||
case PM_DEP_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_LE: found = (cmp <= 0); break;
|
||||
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
|
||||
}
|
||||
FREE(ver);
|
||||
}
|
||||
|
@ -342,7 +342,7 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
pmpkg_t *p = (pmpkg_t *)k->data;
|
||||
/* see if the package names match OR if p provides depend.name */
|
||||
if(!strcmp(p->name, depend.name) || pm_list_is_strin(depend.name, p->provides)) {
|
||||
if(depend.mod == PM_DEP_ANY) {
|
||||
if(depend.mod == PM_DEP_MOD_ANY) {
|
||||
/* accept any version */
|
||||
found = 1;
|
||||
} else {
|
||||
|
@ -357,9 +357,9 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
}
|
||||
cmp = rpmvercmp(ver, depend.version);
|
||||
switch(depend.mod) {
|
||||
case PM_DEP_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_LE: found = (cmp <= 0); break;
|
||||
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
|
||||
}
|
||||
FREE(ver);
|
||||
}
|
||||
|
@ -378,7 +378,7 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
FREELISTPTR(k);
|
||||
continue;
|
||||
}
|
||||
if(depend.mod == PM_DEP_ANY) {
|
||||
if(depend.mod == PM_DEP_MOD_ANY) {
|
||||
/* accept any version */
|
||||
found = 1;
|
||||
} else {
|
||||
|
@ -393,9 +393,9 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
}
|
||||
cmp = rpmvercmp(ver, depend.version);
|
||||
switch(depend.mod) {
|
||||
case PM_DEP_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_LE: found = (cmp <= 0); break;
|
||||
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
|
||||
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
|
||||
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
|
||||
}
|
||||
FREE(ver);
|
||||
}
|
||||
|
@ -405,7 +405,7 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
/* else if still not found... */
|
||||
if(!found) {
|
||||
MALLOC(miss, sizeof(pmdepmissing_t));
|
||||
miss->type = PM_DEP_DEPEND;
|
||||
miss->type = PM_DEP_TYPE_DEPEND;
|
||||
miss->depend.mod = depend.mod;
|
||||
STRNCPY(miss->target, tp->name, PKG_NAME_LEN);
|
||||
STRNCPY(miss->depend.name, depend.name, PKG_NAME_LEN);
|
||||
|
@ -427,8 +427,8 @@ PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages)
|
|||
for(j = tp->requiredby; j; j = j->next) {
|
||||
if(!pm_list_is_strin((char *)j->data, packages)) {
|
||||
MALLOC(miss, sizeof(pmdepmissing_t));
|
||||
miss->type = PM_DEP_REQUIRED;
|
||||
miss->depend.mod = PM_DEP_ANY;
|
||||
miss->type = PM_DEP_TYPE_REQUIRED;
|
||||
miss->depend.mod = PM_DEP_MOD_ANY;
|
||||
miss->depend.version[0] = '\0';
|
||||
STRNCPY(miss->target, tp->name, PKG_NAME_LEN);
|
||||
STRNCPY(miss->depend.name, (char *)j->data, PKG_NAME_LEN);
|
||||
|
@ -459,16 +459,15 @@ int splitdep(char *depstr, pmdepend_t *depend)
|
|||
str = strdup(depstr);
|
||||
|
||||
if((ptr = strstr(str, ">="))) {
|
||||
depend->mod = PM_DEP_GE;
|
||||
depend->mod = PM_DEP_MOD_GE;
|
||||
} else if((ptr = strstr(str, "<="))) {
|
||||
depend->mod = PM_DEP_LE;
|
||||
depend->mod = PM_DEP_MOD_LE;
|
||||
} else if((ptr = strstr(str, "="))) {
|
||||
depend->mod = PM_DEP_EQ;
|
||||
depend->mod = PM_DEP_MOD_EQ;
|
||||
} else {
|
||||
/* no version specified - accept any */
|
||||
depend->mod = PM_DEP_ANY;
|
||||
depend->mod = PM_DEP_MOD_ANY;
|
||||
STRNCPY(depend->name, str, PKG_NAME_LEN);
|
||||
STRNCPY(depend->version, "", PKG_VERSION_LEN);
|
||||
}
|
||||
|
||||
if(ptr == NULL) {
|
||||
|
@ -478,7 +477,7 @@ int splitdep(char *depstr, pmdepend_t *depend)
|
|||
*ptr = '\0';
|
||||
STRNCPY(depend->name, str, PKG_NAME_LEN);
|
||||
ptr++;
|
||||
if(depend->mod != PM_DEP_EQ) {
|
||||
if(depend->mod != PM_DEP_MOD_EQ) {
|
||||
ptr++;
|
||||
}
|
||||
STRNCPY(depend->version, ptr, PKG_VERSION_LEN);
|
||||
|
@ -567,7 +566,7 @@ int resolvedeps(pmdb_t *local, PMList *databases, pmsync_t *sync, PMList *list,
|
|||
return(1);
|
||||
} else*/
|
||||
|
||||
if(miss->type == PM_DEP_DEPEND) {
|
||||
if(miss->type == PM_DEP_TYPE_DEPEND) {
|
||||
pmsync_t *sync = NULL;
|
||||
|
||||
/* find the package in one of the repositories */
|
||||
|
|
|
@ -24,8 +24,20 @@
|
|||
#include "db.h"
|
||||
#include "sync.h"
|
||||
|
||||
typedef struct __pmdepend_t {
|
||||
unsigned char mod;
|
||||
char name[PKG_NAME_LEN];
|
||||
char version[PKG_VERSION_LEN];
|
||||
} pmdepend_t;
|
||||
|
||||
typedef struct __pmdepmissing_t {
|
||||
char target[PKG_NAME_LEN];
|
||||
unsigned char type;
|
||||
pmdepend_t depend;
|
||||
} pmdepmissing_t;
|
||||
|
||||
PMList *sortbydeps(PMList *targets, int mode);
|
||||
PMList *checkdeps(pmdb_t *db, unsigned short op, PMList *packages);
|
||||
PMList *checkdeps(pmdb_t *db, unsigned char op, PMList *packages);
|
||||
int splitdep(char *depstr, pmdepend_t *depend);
|
||||
PMList *removedeps(pmdb_t *db, PMList *targs);
|
||||
int resolvedeps(pmdb_t *local, PMList *databases, pmsync_t *sync, PMList *list, PMList *trail, PMList **data);
|
||||
|
|
Loading…
Reference in New Issue