Enforce const correctness on dep functions and rewrite alpm_dep_get_string

Add some const specifiers to the dep functions that can have them. In
addition, rewrite alpm_dep_get_string to use snprintf and cover all of
the bases (operators).

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2007-11-12 22:48:15 -06:00
parent ec6a7d689b
commit 1b2817f539
2 changed files with 36 additions and 34 deletions

View file

@ -378,14 +378,14 @@ int alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep);
alpm_list_t *alpm_checkdeps(pmdb_t *db, pmtranstype_t op, alpm_list_t *alpm_checkdeps(pmdb_t *db, pmtranstype_t op,
alpm_list_t *packages); alpm_list_t *packages);
const char *alpm_miss_get_target(pmdepmissing_t *miss); const char *alpm_miss_get_target(const pmdepmissing_t *miss);
pmdeptype_t alpm_miss_get_type(pmdepmissing_t *miss); pmdeptype_t alpm_miss_get_type(const pmdepmissing_t *miss);
pmdepend_t *alpm_miss_get_dep(pmdepmissing_t *miss); pmdepend_t *alpm_miss_get_dep(pmdepmissing_t *miss);
pmdepmod_t alpm_dep_get_mod(pmdepend_t *dep); pmdepmod_t alpm_dep_get_mod(const pmdepend_t *dep);
const char *alpm_dep_get_name(pmdepend_t *dep); const char *alpm_dep_get_name(const pmdepend_t *dep);
const char *alpm_dep_get_version(pmdepend_t *dep); const char *alpm_dep_get_version(const pmdepend_t *dep);
char *alpm_dep_get_string(pmdepend_t *dep); char *alpm_dep_get_string(const pmdepend_t *dep);
/* /*
* File conflicts * File conflicts

View file

@ -770,23 +770,21 @@ error:
return(-1); return(-1);
} }
const char SYMEXPORT *alpm_miss_get_target(pmdepmissing_t *miss) const char SYMEXPORT *alpm_miss_get_target(const pmdepmissing_t *miss)
{ {
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
/* Sanity checks */ /* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(miss != NULL, return(NULL)); ASSERT(miss != NULL, return(NULL));
return miss->target; return miss->target;
} }
pmdeptype_t SYMEXPORT alpm_miss_get_type(pmdepmissing_t *miss) pmdeptype_t SYMEXPORT alpm_miss_get_type(const pmdepmissing_t *miss)
{ {
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
/* Sanity checks */ /* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(miss != NULL, return(-1)); ASSERT(miss != NULL, return(-1));
return miss->type; return miss->type;
@ -797,76 +795,80 @@ pmdepend_t SYMEXPORT *alpm_miss_get_dep(pmdepmissing_t *miss)
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
/* Sanity checks */ /* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(miss != NULL, return(NULL)); ASSERT(miss != NULL, return(NULL));
return &miss->depend; return &miss->depend;
} }
pmdepmod_t SYMEXPORT alpm_dep_get_mod(pmdepend_t *dep) pmdepmod_t SYMEXPORT alpm_dep_get_mod(const pmdepend_t *dep)
{ {
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
/* Sanity checks */ /* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(dep != NULL, return(-1)); ASSERT(dep != NULL, return(-1));
return dep->mod; return dep->mod;
} }
const char SYMEXPORT *alpm_dep_get_name(pmdepend_t *dep) const char SYMEXPORT *alpm_dep_get_name(const pmdepend_t *dep)
{ {
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
/* Sanity checks */ /* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(dep != NULL, return(NULL)); ASSERT(dep != NULL, return(NULL));
return dep->name; return dep->name;
} }
const char SYMEXPORT *alpm_dep_get_version(pmdepend_t *dep) const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
{ {
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
/* Sanity checks */ /* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(dep != NULL, return(NULL)); ASSERT(dep != NULL, return(NULL));
return dep->version; return dep->version;
} }
/* the return-string must be freed! */ /** Reverse of splitdep; make a dep string from a pmdepend_t struct.
char SYMEXPORT *alpm_dep_get_string(pmdepend_t *dep) * The string must be freed!
* @param dep the depend to turn into a string
* @return a string-formatted dependency with operator if necessary
*/
char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
{ {
char *opr, *str = NULL;
size_t len;
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
/* Sanity checks */ /* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(dep != NULL, return(NULL)); ASSERT(dep != NULL, return(NULL));
/* TODO redo the sprintf, change to snprintf and
* make it less hacky and dependent on sizeof, etc */
char *ptr;
char *depstring;
MALLOC(depstring, sizeof(pmdepend_t), RET_ERR(PM_ERR_MEMORY, NULL));
strcpy(depstring, dep->name);
ptr = depstring + strlen(depstring);
switch(dep->mod) { switch(dep->mod) {
case PM_DEP_MOD_ANY: case PM_DEP_MOD_ANY:
break; opr = "";
case PM_DEP_MOD_EQ:
sprintf(ptr, "=%s", dep->version);
break; break;
case PM_DEP_MOD_GE: case PM_DEP_MOD_GE:
sprintf(ptr, ">=%s", dep->version); opr = ">=";
break; break;
case PM_DEP_MOD_LE: case PM_DEP_MOD_LE:
sprintf(ptr, "<=%s", dep->version); opr = "<=";
break;
case PM_DEP_MOD_EQ:
opr = "=";
break;
default:
opr = "";
break; break;
} }
return(depstring); /* we can always compute len and print the string like this because opr
* and ver will be empty when PM_DEP_MOD_ANY is the depend type */
len = strlen(dep->name) + strlen(opr) + strlen(dep->version) + 1;
MALLOC(str, len, RET_ERR(PM_ERR_MEMORY, NULL));
snprintf(str, len, "%s%s%s", dep->name, opr, dep->version);
return(str);
} }
/* vim: set ts=2 sw=2 noet: */ /* vim: set ts=2 sw=2 noet: */