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
*    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
*    *res == return status
*   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)

    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) {
        newval = NULL;

    return newval;

} /* val_make_binary_obj */