Make alpm_splitdep immutable

The alpm_splitdep function formerly overwrote the input string, causing
a few issues. Fix this.

Signed-off-by: Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Nagy Gabor 2007-06-18 10:32:38 -04:00 committed by Dan McGee
parent da66bedf4f
commit 7653bb9399

View file

@ -437,10 +437,12 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
{ {
pmdepend_t *depend; pmdepend_t *depend;
char *ptr = NULL; char *ptr = NULL;
char *newstr = NULL;
if(depstring == NULL) { if(depstring == NULL) {
return(NULL); return(NULL);
} }
newstr = strdup(depstring);
depend = malloc(sizeof(pmdepend_t)); depend = malloc(sizeof(pmdepend_t));
if(depend == NULL) { if(depend == NULL) {
@ -450,30 +452,32 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
/* Find a version comparator if one exists. If it does, set the type and /* Find a version comparator if one exists. If it does, set the type and
* increment the ptr accordingly so we can copy the right strings. */ * increment the ptr accordingly so we can copy the right strings. */
if((ptr = strstr(depstring, ">="))) { if((ptr = strstr(newstr, ">="))) {
depend->mod = PM_DEP_MOD_GE; depend->mod = PM_DEP_MOD_GE;
*ptr = '\0'; *ptr = '\0';
ptr += 2; ptr += 2;
} else if((ptr = strstr(depstring, "<="))) { } else if((ptr = strstr(newstr, "<="))) {
depend->mod = PM_DEP_MOD_LE; depend->mod = PM_DEP_MOD_LE;
*ptr = '\0'; *ptr = '\0';
ptr += 2; ptr += 2;
} else if((ptr = strstr(depstring, "="))) { } else if((ptr = strstr(newstr, "="))) {
depend->mod = PM_DEP_MOD_EQ; depend->mod = PM_DEP_MOD_EQ;
*ptr = '\0'; *ptr = '\0';
ptr += 1; ptr += 1;
} else { } else {
/* no version specified - copy in the name and return it */ /* no version specified - copy in the name and return it */
depend->mod = PM_DEP_MOD_ANY; depend->mod = PM_DEP_MOD_ANY;
strncpy(depend->name, depstring, PKG_NAME_LEN); strncpy(depend->name, newstr, PKG_NAME_LEN);
depend->version[0] = '\0'; depend->version[0] = '\0';
free(newstr);
return(depend); return(depend);
} }
/* if we get here, we have a version comparator, copy the right parts /* if we get here, we have a version comparator, copy the right parts
* to the right places */ * to the right places */
strncpy(depend->name, depstring, PKG_NAME_LEN); strncpy(depend->name, newstr, PKG_NAME_LEN);
strncpy(depend->version, ptr, PKG_VERSION_LEN); strncpy(depend->version, ptr, PKG_VERSION_LEN);
free(newstr);
return(depend); return(depend);
} }