#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
/**
 * @internal
 * convert the index component stored in the context to an oid
 */
int
${context}_index_to_oid(netsnmp_index *oid_idx,
                         ${context}_mib_index *mib_idx)
{
@include generic-table-indexes-varbind-setup.m2i@

    DEBUGMSGTL(("verbose:${context}:${context}_index_to_oid","called\n"));

@    foreach $node index@
@        include m2c_setup_node.m2i@
        /* $m2c_node_summary */
@        if $m2c_node_needlength == 1@
    snmp_set_var_value(&var_$node, &mib_idx->$node,
                       mib_idx->${node}_len * sizeof(mib_idx->${node}[0]));
@        else@
    snmp_set_var_value(&var_$node, &mib_idx->$node, sizeof(mib_idx->$node));
@        end@

@    end@ # for each column

    err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
                           NULL, 0, &var_$m2c_dii_first);
    if(err)
        snmp_log(LOG_ERR,"error %d converting index to oid\n", err);

    /*
     * parsing may have allocated memory. free it.
     */
    snmp_reset_var_buffers( &var_$m2c_dii_first );

    return err;
} /* ${context}_index_to_oid */

##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
