The normal APIs for creating values expect a zero-terminated string, so they cannot be used for creating a YANG leaf with the binary type.
Use the val_make_binary_obj function from ncx/val_util.h
Also check val_set_simval_binary in ncx/val.h
These functions take a buffer and buffer length as input and do not expect a zero-terminated string.
The val_make_binary_obj function shows an example usage of the val_set_simval_binary function.
/********************************************************************
* FUNCTION val_make_binary_obj
*
* Malloc and set a val_value_t as a NCX_BT_BINARY type
*
* INPUTS:
* obj == object template to use set binary object
* valstr == simple value encoded as a binary buffer
* valstrlen == length of valstr (not zero-terminated)
* res == address of return status
*
* OUTPUTS:
* *res == return status
* RETURNS:
* malloced val struct filled in; NULL if malloc failed
*********************************************************************/
val_value_t *
val_make_binary_obj (obj_template_t *obj,
const xmlChar *valstr,
uint32 valstrlen,
status_t *res)
{
assert(obj);
assert(res);
val_value_t *newval = val_new_value();
if (!newval) {
*res = ERR_INTERNAL_MEM;
return NULL;
}
val_init_from_template(newval, obj);
*res = val_set_simval_binary(newval, valstr, valstrlen);
if (*res != NO_ERR) {
val_free_value(newval);
newval = NULL;
}
return newval;
} /* val_make_binary_obj */