#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id: generic-ctx-get.m2i,v 1.10 2004/10/04 18:54:14 rstory Exp $
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile: generic-ctx-get.m2i,v $ $Revision: 1.10 $ */
@end@
########################################################################
##/*
## This include will generate the code needed to assign data from
## a generated data context to a parameter reference.
##
## EXAMPLE (prototype generated elsewhere)
## int
## ifName_get(ifXTable_ctx * ctx, char **ifName_ptr_ptr,
##            size_t * ifName_len_ptr) {
##
## 
## m2c_node_lh :   temp_ifName / (*ifName_ptr_ptr)
## m2c_node_lhs:   temp_ifName_len / (*ifName_len_ptr);
## m2c_ctx_rh  :   ctx->data.
## node        :  ifName
##
##    if (temp_ifName_len < ctx->data.ifName_len) {
##        temp_ifName = malloc(ctx->data.ifName_len);
##    }
##    temp_ifName_len = ctx->data.ifName_len;
##    memcpy(temp_ifName, ctx->data.ifName, temp_ifName_len);
##*/
@if "$m2c_data_context" ne "generated"@
    /** WARNING: this code might not work for $m2c_data_context */
@end@
@if $m2c_node_needlength == 1@
    /*
     * make sure there is enough space for $node data
     */
    if ((NULL == $m2c_ctx_lh) || ($m2c_ctx_lhs < $m2c_ctx_rhs)) {
@   if $m2c_node_realloc == 0@
        snmp_log(LOG_ERR,"not enough space for value\n");
        return MFD_ERROR;
@   else@
        /*
         * allocate space for $node data
         */
@      if $m2c_node_realloc == 1@
        $m2c_ctx_lh = realloc($m2c_ctx_lh, $m2c_ctx_rhs * sizeof(${m2c_ctx_lh}[0]));
@      else@
        $m2c_ctx_lh = malloc($m2c_ctx_rhs * sizeof(${m2c_ctx_lh}[0]));
@      end@
        if(NULL == $m2c_ctx_lh) {
            snmp_log(LOG_ERR,"could not allocate memory\n");
            return MFD_ERROR;
        }
@   end@
    }
    $m2c_ctx_lhs = $m2c_ctx_rhs;
    memcpy( $m2c_ctx_lh, $m2c_ctx_rh,
            $m2c_ctx_lhs * sizeof(${m2c_ctx_lh}[0]) );
@else@
@   if $node.decl =~ /U64/i@ #              ASN_COUNTER64
    ${m2c_ctx_lh}.high = ${m2c_ctx_rh}.high;
    ${m2c_ctx_lh}.low = ${m2c_ctx_rh}.low;
@   else@
    $m2c_ctx_lh = $m2c_ctx_rh;
@   end@
@end@ # length
##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile: generic-ctx-get.m2i,v $ $Revision: 1.10 $ */
@end@
