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:
parent
da66bedf4f
commit
7653bb9399
1 changed files with 9 additions and 5 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue