#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
@include m2c_setup_node.m2i@
@eval $m2c_node_realloc = 2@ // malloc
/**
 * Extract the current value of the $node data.
 *
 * Set a value using the data context for the row.
 *
@if $m2c_node_get_comments ne ""@
$m2c_node_get_comments
*
@end@
 * @param rowreq_ctx
 *        Pointer to the row request context.
 * @param $m2c_node_param_ref_name
 *        Pointer to storage for a $node.decl variable
@if $m2c_node_needlength == 1@
 * @param $m2c_node_param_ref_lname
 *        Pointer to a size_t. On entry, it will contain the size (in bytes)
 *        pointed to by $node.
 *        On exit, this value should contain the data size (in bytes).
@end@
 *
 * @retval MFD_SUCCESS         : success
 * @retval MFD_SKIP            : skip this node (no value for now)
 * @retval MFD_ERROR           : Any other error
@if $m2c_node_needlength == 1@
*
 * @note If you need more than (*$m2c_node_param_ref_lname) bytes of memory,
 *       allocate it using malloc() and update $m2c_node_param_ref_name.
 *       <b>DO NOT</b> free the previous pointer.
 *       The MFD helper will release the memory you allocate.
 *
 * @remark If you call this function yourself, you are responsible
 *         for checking if the pointer changed, and freeing any
 *         previously allocated memory. (Not necessary if you pass
 *         in a pointer to static memory, obviously.)
@end@
 */
int
${node}_get( ${context}_rowreq_ctx *rowreq_ctx, $m2c_node_param_ref )
{
@ifconf syntax-$node.syntax-get.m2i@
@    include syntax-$node.syntax-get.m2i@
@else@
@    include generic-get-decl.m2i@

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

    netsnmp_assert(NULL != rowreq_ctx);

/*
 * TODO:231:o: |-> Extract the current value of the $node data.
@if $m2c_node_needlength == 0@
 * copy $m2c_node_lh from $m2c_data_item_base
@else@
 * copy $m2c_node_lh data and $m2c_node_lhs from $m2c_data_item_base
@end@
 */
@    if ("$m2c_data_context" eq "generated") && ($m2c_node_skip_get != 1)@
@        include generic-ctx-get.m2i@
@    else@
@       if ($m2c_node_skip_get != 1)@
 /*
  * TODO:235:M: |-> Remove log message/SKIP once you've set $node data
  */
    snmp_log(LOG_ERR,"${context} node $node not implemented: skipping\n");
@       end@
    return MFD_SKIP;
@    end@
##   ------------------------------------------------------------------
@    if $node.decl =~ /long/i@ #   ASN_INTEGER ASN_COUNTER ASN_GAUGE
@       include generic-get-long.m2i@
@    elsif $node.decl =~ /char/i@ #         ASN_OCTET_STR ASN_OPAQUE
@       include generic-get-char.m2i@
@    elsif $node.decl =~ /oid/i@ #                    ASN_OBJECT_ID
@       include generic-get-oid.m2i@
@    elsif $node.decl =~ /U64/i@ #                    ASN_COUNTER64
@       include generic-get-U64.m2i@
@    else@
@        print ERROR: unknown node.decl: $node.decl@
@        exit@
@    end@
##   ------------------------------------------------------------------
@    if ($m2c_node_skip_mapping != 1) && ("$m2c_data_context" ne "generated")@
@        include generic-value-map.m2i@
@    end@
@    include generic-get-decl-bot.m2i@  // copy value out
@end@ # no syntax include

    return MFD_SUCCESS;
} /* ${node}_get */

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