Example #1
0
/********************************************************************
* 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 */
Example #3
0
/********************************************************************
* 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 */