/******************************************************************** * FUNCTION yangapi_new_param * * Create a new YANGAPI paramater * * INPUTS: * parmname == parameter name * parmnamelen == parameter name string length * parmval == parameter value * parmvallen == parameter value string length * RETURNS: * pointer to initialized param, or NULL if malloc error *********************************************************************/ yangapi_param_t * yangapi_new_param (const xmlChar *parmname, uint32 parmnamelen, const xmlChar *parmval, uint32 parmvallen) { yangapi_param_t *param = m__getObj(yangapi_param_t); if (param) { memset(param, 0x0, sizeof(yangapi_param_t)); if (parmname) { param->name = xml_strndup(parmname, parmnamelen); if (!param->name) { yangapi_free_param(param); return NULL; } if (parmval) { param->value = xml_strndup(parmval, parmvallen); if (!param->value) { yangapi_free_param(param); return NULL; } } } } return param; } /* yangapi_new_param */
/******************************************************************** * FUNCTION set_alias * * Set an alias value field * * INPUTS: * alias == alias record to use * valstr == value string to use * * RETURNS: * status *********************************************************************/ static status_t set_alias (alias_cb_t *alias, const xmlChar *valstr) { status_t res = NO_ERR; if (alias->value) { m__free(alias->value); alias->value = NULL; } alias->quotes = 0; if (valstr) { if (*valstr == '"' || *valstr == '\'') { /* preseve quotes used */ alias->quotes = (*valstr == '"') ? 2 : 1; /* check trim quoted string */ uint32 len = xml_strlen(valstr); if (len > 2) { const xmlChar *endstr = &valstr[len-1]; if (*endstr == *valstr) { /* remove paired quotes */ alias->value = xml_strndup(valstr+1, len-2); if (alias->value == NULL) { res = ERR_INTERNAL_MEM; } } else { /* improper string; unmatched quotes */ res = ERR_NCX_INVALID_VALUE; } } else { /* else got just a quote char */ res = ERR_NCX_INVALID_VALUE; } } else { alias->value = xml_strdup(valstr); if (alias->value == NULL) { res = ERR_INTERNAL_MEM; } } } /* else cleared value if not already */ return res; } /* set_alias */
/******************************************************************** * FUNCTION new_feature_entry * * Create a feature_entry_t * * INPUTS: * featstr == feature string parm to use *********************************************************************/ static feature_entry_t * new_feature_entry (const xmlChar *featstr) { uint32 len = 0; boolean splitdone = FALSE; status_t res = split_feature_string(featstr, &len); if (res == NO_ERR) { splitdone = TRUE; } feature_entry_t *feature_entry = m__getObj(feature_entry_t); if (feature_entry == NULL) { return NULL; } memset(feature_entry, 0x0, sizeof(feature_entry_t)); if (splitdone) { feature_entry->modname = xml_strndup(featstr, len); if (feature_entry->modname == NULL) { free_feature_entry(feature_entry); return NULL; } feature_entry->feature = xml_strdup(&featstr[len+1]); if (feature_entry->feature == NULL) { free_feature_entry(feature_entry); return NULL; } } else { feature_entry->feature = xml_strdup(featstr); if (feature_entry->feature == NULL) { free_feature_entry(feature_entry); return NULL; } } return feature_entry; } /* new_feature_entry */
/******************************************************************** * FUNCTION new_alias * * Malloc and fill in an alias record * * INPUTS: * name == alias name (not z-terminated) * namelen == length of name string * * RETURNS: * pointer to alias record or NULL if none *********************************************************************/ static alias_cb_t * new_alias (const xmlChar *name, uint32 namelen) { alias_cb_t *alias; if (namelen == 0) { SET_ERROR(ERR_INTERNAL_VAL); return NULL; } alias = m__getObj(alias_cb_t); if (alias == NULL) { return NULL; } memset(alias, 0x0, sizeof(alias_cb_t)); alias->name = xml_strndup(name, namelen); if (alias->name == NULL) { free_alias(alias); return NULL; } return alias; } /* new_alias */