diff options
-rw-r--r-- | lib/libalpm/add.c | 7 | ||||
-rw-r--r-- | lib/libalpm/alpm.c | 25 | ||||
-rw-r--r-- | lib/libalpm/alpm.h | 57 | ||||
-rw-r--r-- | lib/libalpm/deps.c | 71 | ||||
-rw-r--r-- | lib/libalpm/deps.h | 14 |
5 files changed, 103 insertions, 71 deletions
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index 1651304f..034643ef 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -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; } diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c index da879569..e4000911 100644 --- a/lib/libalpm/alpm.c +++ b/lib/libalpm/alpm.c @@ -565,6 +565,31 @@ int alpm_trans_release() } /* + * 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 */ diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 41a36a0d..451196f7 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -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); @@ -261,6 +232,32 @@ 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 */ PM_LIST *alpm_list_first(PM_LIST *list); diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index 838c7bbe..a0490d42 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -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 */ diff --git a/lib/libalpm/deps.h b/lib/libalpm/deps.h index 71af64be..b45fa48c 100644 --- a/lib/libalpm/deps.h +++ b/lib/libalpm/deps.h @@ -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); |