in libs/signature/src/param_list.c [58:109]
int add_param_to_list(SPAS_PARAM_LIST *list, const char *name,
const char *value) {
SPAS_PARAM_NODE *pnode = NULL;
SPAS_PARAM_NODE *plast = NULL;
int nlen = 0;
int vlen = 0;
if (list == NULL || name == NULL || value == NULL) {
return ERROR_INVALID_PARAM;
}
nlen = strlen(name);
vlen = strlen(value);
pnode = (SPAS_PARAM_NODE *)_mem_alloc(sizeof(SPAS_PARAM_NODE));
if (pnode == NULL) {
return ERROR_MEM_ALLOC;
}
pnode->name = (char *)_mem_alloc(nlen + 1);
if (pnode->name == NULL) {
_mem_free(pnode);
return ERROR_MEM_ALLOC;
}
pnode->value = (char *)_mem_alloc(vlen + 1);
if (pnode->value == NULL) {
_mem_free(pnode->name);
_mem_free(pnode);
return ERROR_MEM_ALLOC;
}
memcpy(pnode->name, name, nlen);
memcpy(pnode->value, value, vlen);
if (list->phead == NULL) {
list->phead = pnode;
} else if (_nodecmp(pnode, list->phead) <= 0) {
pnode->pnext = list->phead;
list->phead = pnode;
} else {
plast = list->phead;
while (plast->pnext != NULL) {
if (_nodecmp(pnode, plast->pnext) <= 0) {
pnode->pnext = plast->pnext;
plast->pnext = pnode;
break;
} else {
plast = plast->pnext;
}
}
if (plast->pnext == NULL) {
plast->pnext = pnode;
}
}
list->length++;
list->size += nlen + vlen + 1; /* 1 overhead for '=' */
return SPAS_NO_ERROR;
}