touched up qse_xli_setpairwithstr() a bit
This commit is contained in:
@ -891,49 +891,43 @@ qse_xli_pair_t* qse_xli_setpairwithstr (qse_xli_t* xli, const qse_xli_list_t* li
|
||||
qse_xli_pair_t* pair, * xpair;
|
||||
|
||||
pair = qse_xli_findpair (xli, list, fqpn);
|
||||
if (pair)
|
||||
if (!pair) return QSE_NULL;
|
||||
|
||||
if (xli->opt.trait & QSE_XLI_VALIDATE)
|
||||
{
|
||||
if (xli->opt.trait & QSE_XLI_VALIDATE)
|
||||
qse_rbt_pair_t* scm_pair;
|
||||
const qse_xli_scm_t* scm;
|
||||
|
||||
scm_pair = qse_rbt_search (xli->schema, fqpn, qse_strlen(fqpn));
|
||||
if (!scm_pair)
|
||||
{
|
||||
qse_rbt_pair_t* scm_pair;
|
||||
const qse_xli_scm_t* scm;
|
||||
qse_cstr_t key;
|
||||
|
||||
scm_pair = qse_rbt_search (xli->schema, fqpn, qse_strlen(fqpn));
|
||||
if (!scm_pair)
|
||||
{
|
||||
qse_cstr_t key;
|
||||
key.ptr = (qse_char_t*)fqpn;
|
||||
key.len = qse_strlen(fqpn);
|
||||
|
||||
key.ptr = (qse_char_t*)fqpn;
|
||||
key.len = qse_strlen(fqpn);
|
||||
|
||||
qse_xli_seterror (xli, QSE_XLI_EUDKEY, &key, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
scm = (qse_xli_scm_t*)QSE_RBT_VPTR(scm_pair);
|
||||
|
||||
if (scm && !(scm->flags & QSE_XLI_SCM_VALSTR))
|
||||
{
|
||||
/* check the value type */
|
||||
qse_cstr_t key;
|
||||
|
||||
key.ptr = (qse_char_t*)fqpn;
|
||||
key.len = qse_strlen(fqpn);
|
||||
|
||||
qse_xli_seterror (xli, QSE_XLI_EILVAL, (const qse_cstr_t*)&key, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
qse_xli_seterror (xli, QSE_XLI_EUDKEY, &key, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
xpair = qse_xli_insertpairwithstr (xli, pair->super, (qse_xli_atom_t*)pair, pair->key, pair->alias, pair->tag, value, strtag);
|
||||
if (xpair) qse_xli_deletepair (xli, pair);
|
||||
return xpair;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* TODO: insert a new pair */
|
||||
return QSE_NULL;
|
||||
scm = (qse_xli_scm_t*)QSE_RBT_VPTR(scm_pair);
|
||||
|
||||
if (scm && !(scm->flags & QSE_XLI_SCM_VALSTR))
|
||||
{
|
||||
/* check the value type */
|
||||
qse_cstr_t key;
|
||||
|
||||
key.ptr = (qse_char_t*)fqpn;
|
||||
key.len = qse_strlen(fqpn);
|
||||
|
||||
qse_xli_seterror (xli, QSE_XLI_EILVAL, (const qse_cstr_t*)&key, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
xpair = qse_xli_insertpairwithstr (xli, pair->super, (qse_xli_atom_t*)pair, pair->key, pair->alias, pair->tag, value, strtag);
|
||||
if (xpair) qse_xli_deletepair (xli, pair);
|
||||
return xpair;
|
||||
}
|
||||
|
||||
qse_size_t qse_xli_countpairs (qse_xli_t* xli, const qse_xli_list_t* list, const qse_char_t* fqpn)
|
||||
|
Reference in New Issue
Block a user