| ############################################################# -*- c -*- |
| ## generic include for XXX. Do not use directly. |
| ## |
| ## $Id$ |
| ######################################################################## |
| @if $m2c_mark_boundary == 1@ |
| /** START code generated by $RCSfile$ $Revision$ */ |
| @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@ |
| ##/* set up for length/copy conversions for various cases. |
| ## length mod applies to left hand side. copy mod applies to right hand side |
| ## |
| ##*/ |
| @if ("$m2c_ctx_rhu" ne "elements") && ("$m2c_ctx_rhu" ne "bytes")@ |
| @ print Invalid rh units '$m2c_ctx_rhu'@ |
| @ exit@ |
| @end@ |
| @if ("$m2c_ctx_lhu" ne "elements") && ("$m2c_ctx_lhu" ne "bytes")@ |
| @ print Invalid lh units '$m2c_ctx_lhu'@ |
| @ exit@ |
| @end@ |
| @if "$m2c_ctx_rhu" ne "$m2c_ctx_lhu"@ |
| ##/* elements = bytes, length mod="/sizeof", copy mult="" */ |
| @ if "$m2c_ctx_lhu" eq "elements"@ |
| @ eval $m2c_ctx_lm = "/ sizeof($m2c_ctx_rh[0])"@ |
| @ eval $m2c_ctx_cm = ""@ |
| @ else@ |
| ##/* bytes = elements, length mod="*sizeof", copy mult="sizeof" */ |
| @ eval $m2c_ctx_lm = "* sizeof($m2c_ctx_rh[0])"@ |
| @ eval $m2c_ctx_cm = "* sizeof($m2c_ctx_rh[0])"@ |
| @ end@ |
| @else@ |
| ##/* elements = elements, length mod="", copy mult="sizeof" */ |
| @ if "$m2c_ctx_lhu" eq "elements"@ |
| @ eval $m2c_ctx_lm = ""@ |
| @ eval $m2c_ctx_cm = "* sizeof($m2c_ctx_rh[0])"@ |
| @ else@ |
| ##/* bytes = bytes, length mod="", copy mult="" */ |
| @ eval $m2c_ctx_lm = ""@ |
| @ eval $m2c_ctx_cm = ""@ |
| @ end@ |
| @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$m2c_ctx_lm))) { |
| @ if $m2c_node_realloc == 0@ |
| snmp_log(LOG_ERR,"not enough space for value ($m2c_ctx_rh)\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$m2c_ctx_cm ); |
| @ else@ |
| $m2c_ctx_lh = malloc($m2c_ctx_rhs$m2c_ctx_cm); |
| @ end@ |
| if(NULL == $m2c_ctx_lh) { |
| snmp_log(LOG_ERR,"could not allocate memory ($m2c_ctx_rh)\n"); |
| return MFD_ERROR; |
| } |
| @ end@ |
| } |
| $m2c_ctx_lhs = $m2c_ctx_rhs$m2c_ctx_lm; |
| memcpy( $m2c_ctx_lh, $m2c_ctx_rh, $m2c_ctx_rhs$m2c_ctx_cm ); |
| @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$ $Revision$ */ |
| @end@ |