#if HAVE_CONFIG_H
#include <config.h>
#endif
#include <dce/idlddefs.h>
#include <ndrmi.h>
#include <lsysdep.h>
#include <assert.h>
static void rpc_ss_ndr_m_array_shadow (
rpc_void_p_t struct_addr,
idl_ulong_int *struct_offset_vec_ptr,
idl_ulong_int *offset_vec_ptr,
IDL_cs_shadow_elt_t *cs_shadow,
idl_ulong_int shadow_index,
idl_byte **p_defn_vec_ptr,
IDL_msp_t IDL_msp
)
{
idl_byte *defn_vec_ptr;
idl_byte array_type;
idl_ulong_int array_defn_index;
idl_byte *array_defn_ptr;
idl_boolean allocate;
IDL_bound_pair_t *bounds_list;
idl_ulong_int cs_type_defn_index;
idl_byte *cs_type_defn_ptr;
idl_ulong_int routine_index;
void (**routine_ptr)();
idl_byte ln_type = 0;
idl_ulong_int ln_index;
idl_byte sz_type = 0;
idl_ulong_int sz_index;
idl_ulong_int l_storage_len;
idl_ulong_int w_storage_len;
idl_cs_convert_t convert_type;
rpc_void_p_t ldata;
idl_ulong_int l_data_len;
rpc_void_p_t wdata;
idl_ulong_int w_data_len;
defn_vec_ptr = *p_defn_vec_ptr;
cs_shadow[shadow_index].IDL_release = idl_false;
array_type = *defn_vec_ptr;
defn_vec_ptr++;
allocate = (array_type == IDL_DT_ALLOCATE);
if (allocate)
{
array_type = *defn_vec_ptr;
defn_vec_ptr++;
}
defn_vec_ptr++;
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
IDL_GET_LONG_FROM_VECTOR(array_defn_index, defn_vec_ptr);
if (array_type == IDL_DT_FIXED_ARRAY)
{
*p_defn_vec_ptr = defn_vec_ptr;
return;
}
if (struct_addr != NULL)
ldata = (rpc_void_p_t)((idl_byte *)struct_addr + *offset_vec_ptr);
else
ldata = IDL_msp->IDL_param_vec[shadow_index + 1];
array_defn_ptr = IDL_msp->IDL_type_vec + array_defn_index;
array_defn_ptr++;
if (array_type == IDL_DT_VARYING_ARRAY)
{
if (IDL_msp->IDL_type_vec[TVEC_INT_REP_OFFSET] != NDR_LOCAL_INT_REP)
rpc_ss_fixed_bounds_from_vector(1, array_defn_ptr, &bounds_list,
IDL_msp);
else
bounds_list = (IDL_bound_pair_t *)array_defn_ptr;
array_defn_ptr += IDL_FIXED_BOUND_PAIR_WIDTH;
l_storage_len = bounds_list[0].upper - bounds_list[0].lower + 1;
}
else
{
array_defn_ptr += IDL_CONF_BOUND_PAIR_WIDTH/2 + 1;
sz_type = *array_defn_ptr;
IDL_GET_LONG_FROM_VECTOR(sz_index, array_defn_ptr);
if (struct_addr != NULL)
{
l_storage_len = rpc_ss_get_typed_integer(sz_type,
(rpc_void_p_t)((idl_byte *)struct_addr
+ *(struct_offset_vec_ptr + sz_index)),
IDL_msp);
}
else
{
l_storage_len = rpc_ss_get_typed_integer(sz_type,
IDL_msp->IDL_param_vec[sz_index], IDL_msp);
}
sz_index--;
}
if ((array_type == IDL_DT_VARYING_ARRAY)
|| (array_type == IDL_DT_OPEN_ARRAY))
{
array_defn_ptr += IDL_DATA_LIMIT_PAIR_WIDTH/2 + 1;
ln_type = *array_defn_ptr;
IDL_GET_LONG_FROM_VECTOR(ln_index, array_defn_ptr);
if (struct_addr != NULL)
{
l_data_len = rpc_ss_get_typed_integer(ln_type,
(rpc_void_p_t)((idl_byte *)struct_addr
+ *(struct_offset_vec_ptr + ln_index)),
IDL_msp);
}
else
{
l_data_len = rpc_ss_get_typed_integer(ln_type,
IDL_msp->IDL_param_vec[ln_index], IDL_msp);
}
ln_index--;
}
else
l_data_len = l_storage_len;
array_defn_ptr += 2;
IDL_GET_LONG_FROM_VECTOR(cs_type_defn_index, array_defn_ptr);
cs_type_defn_ptr = IDL_msp->IDL_type_vec + cs_type_defn_index;
IDL_DISCARD_LONG_FROM_VECTOR(cs_type_defn_ptr);
IDL_GET_LONG_FROM_VECTOR(routine_index, cs_type_defn_ptr);
routine_ptr = IDL_msp->IDL_rtn_vec + routine_index;
(*(routine_ptr + IDL_RTN_NET_SIZE_INDEX))(IDL_msp->IDL_h,
*(IDL_msp->IDL_cs_tags_p->p_marsh_tag),
l_storage_len,
&convert_type,
(array_type == IDL_DT_VARYING_ARRAY) ? NULL : &w_storage_len,
&IDL_msp->IDL_status);
if (IDL_msp->IDL_status != error_status_ok)
DCETHREAD_RAISE(rpc_x_ss_pipe_comm_error);
if ((array_type == IDL_DT_CONF_ARRAY)
|| (array_type == IDL_DT_OPEN_ARRAY))
{
rpc_ss_put_typed_integer(w_storage_len, sz_type,
(rpc_void_p_t)&cs_shadow[sz_index].IDL_data);
}
if (allocate)
goto common_return;
if (convert_type == idl_cs_no_convert)
{
cs_shadow[shadow_index].IDL_data.IDL_storage_p = ldata;
w_data_len = l_data_len ;
goto alloc_return;
}
if (array_type == IDL_DT_VARYING_ARRAY)
{
w_storage_len = l_storage_len;
}
wdata = (idl_void_p_t)rpc_ss_mem_alloc(&IDL_msp->IDL_mem_handle,
w_storage_len * rpc_ss_type_size(cs_type_defn_ptr, IDL_msp));
cs_shadow[shadow_index].IDL_data.IDL_storage_p = wdata;
cs_shadow[shadow_index].IDL_release = true;
(*(routine_ptr + IDL_RTN_TO_NETCS_INDEX))(IDL_msp->IDL_h,
*(IDL_msp->IDL_cs_tags_p->p_marsh_tag),
ldata,
l_data_len,
wdata,
(array_type == IDL_DT_CONF_ARRAY) ? NULL : &w_data_len,
&IDL_msp->IDL_status);
if (IDL_msp->IDL_status != error_status_ok)
DCETHREAD_RAISE(rpc_x_ss_pipe_comm_error);
alloc_return:;
if ((array_type == IDL_DT_VARYING_ARRAY)
|| (array_type == IDL_DT_OPEN_ARRAY))
{
rpc_ss_put_typed_integer(w_data_len, ln_type,
(rpc_void_p_t)&cs_shadow[ln_index].IDL_data);
}
common_return:
;
*p_defn_vec_ptr = defn_vec_ptr;
if (IDL_msp->IDL_type_vec[TVEC_INT_REP_OFFSET] != NDR_LOCAL_INT_REP)
if (array_type == IDL_DT_VARYING_ARRAY)
rpc_ss_mem_item_free(&IDL_msp->IDL_mem_handle, (byte_p_t)bounds_list);
return ;
}
void rpc_ss_ndr_m_struct_cs_shadow (
rpc_void_p_t struct_addr,
idl_byte struct_type ATTRIBUTE_UNUSED,
idl_ulong_int shadow_length,
idl_ulong_int offset_index,
idl_byte *defn_vec_ptr,
IDL_cs_shadow_elt_t **p_cs_shadow,
IDL_msp_t IDL_msp
)
{
idl_ulong_int *struct_offset_vec_ptr;
idl_ulong_int *offset_vec_ptr;
idl_byte type_byte;
IDL_cs_shadow_elt_t *cs_shadow;
idl_ulong_int shadow_index;
cs_shadow = (IDL_cs_shadow_elt_t *)rpc_ss_mem_alloc
(&IDL_msp->IDL_mem_handle, shadow_length * sizeof(IDL_cs_shadow_elt_t));
struct_offset_vec_ptr = IDL_msp->IDL_offset_vec + offset_index;
offset_vec_ptr = struct_offset_vec_ptr + 1;
shadow_index = 0;
do {
type_byte = *defn_vec_ptr;
defn_vec_ptr++;
switch(type_byte)
{
case IDL_DT_CS_ARRAY:
rpc_ss_ndr_m_array_shadow(struct_addr, struct_offset_vec_ptr,
offset_vec_ptr, cs_shadow, shadow_index, &defn_vec_ptr,
IDL_msp);
shadow_index++;
offset_vec_ptr++;
break;
case IDL_DT_BYTE:
case IDL_DT_CHAR:
case IDL_DT_BOOLEAN:
case IDL_DT_DOUBLE:
case IDL_DT_ENUM:
case IDL_DT_FLOAT:
case IDL_DT_SMALL:
case IDL_DT_SHORT:
case IDL_DT_LONG:
case IDL_DT_HYPER:
case IDL_DT_USMALL:
case IDL_DT_USHORT:
case IDL_DT_ULONG:
case IDL_DT_UHYPER:
case IDL_DT_IGNORE:
case IDL_DT_V1_ENUM:
case IDL_DT_ERROR_STATUS:
offset_vec_ptr++;
cs_shadow[shadow_index].IDL_release = idl_false;
shadow_index++;
break;
case IDL_DT_FIXED_ARRAY:
case IDL_DT_VARYING_ARRAY:
case IDL_DT_CONF_ARRAY:
case IDL_DT_OPEN_ARRAY:
defn_vec_ptr++;
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
offset_vec_ptr++;
cs_shadow[shadow_index].IDL_release = idl_false;
shadow_index++;
break;
case IDL_DT_ENC_UNION:
case IDL_DT_N_E_UNION:
case IDL_DT_FULL_PTR:
case IDL_DT_UNIQUE_PTR:
case IDL_DT_REF_PTR:
case IDL_DT_TRANSMIT_AS:
case IDL_DT_REPRESENT_AS:
case IDL_DT_CS_TYPE:
defn_vec_ptr++;
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
offset_vec_ptr++;
cs_shadow[shadow_index].IDL_release = idl_false;
shadow_index++;
break;
case IDL_DT_STRING:
case IDL_DT_NDR_ALIGN_2:
case IDL_DT_NDR_ALIGN_4:
case IDL_DT_NDR_ALIGN_8:
case IDL_DT_BEGIN_NESTED_STRUCT:
case IDL_DT_END_NESTED_STRUCT:
case IDL_DT_V1_ARRAY:
case IDL_DT_V1_STRING:
case IDL_DT_CS_ATTRIBUTE:
case IDL_DT_CS_RLSE_SHADOW:
break;
case IDL_DT_RANGE:
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
break;
case IDL_DT_EOL:
break;
default:
#ifdef DEBUG_INTERP
printf("rpc_ss_ndr_m_struct_cs_shadow:unrecognized type %d\n",
type_byte);
exit(0);
#endif
DCETHREAD_RAISE(rpc_x_coding_error);
}
} while (type_byte != IDL_DT_EOL);
*p_cs_shadow = cs_shadow;
}
static void rpc_ss_ndr_m_cs_farr_or_single
(
rpc_void_p_t data_addr,
IDL_bound_pair_t *bounds_list,
idl_ulong_int cs_type_defn_index,
idl_ulong_int l_storage_len,
IDL_msp_t IDL_msp
)
{
idl_byte *cs_type_defn_ptr;
idl_ulong_int routine_index;
void (**routine_ptr)();
idl_cs_convert_t convert_type;
rpc_void_p_t wdata;
cs_type_defn_ptr = IDL_msp->IDL_type_vec + cs_type_defn_index;
IDL_DISCARD_LONG_FROM_VECTOR(cs_type_defn_ptr);
IDL_GET_LONG_FROM_VECTOR(routine_index, cs_type_defn_ptr);
routine_ptr = IDL_msp->IDL_rtn_vec + routine_index;
(*(routine_ptr + IDL_RTN_NET_SIZE_INDEX))(IDL_msp->IDL_h,
*(IDL_msp->IDL_cs_tags_p->p_marsh_tag),
l_storage_len,
&convert_type,
NULL,
&IDL_msp->IDL_status);
if (IDL_msp->IDL_status != error_status_ok)
DCETHREAD_RAISE(rpc_x_ss_pipe_comm_error);
if (convert_type == idl_cs_no_convert)
{
rpc_ss_ndr_m_fix_or_conf_arr(data_addr, 1, bounds_list,
cs_type_defn_ptr, 0, IDL_msp);
}
else
{
wdata = (idl_void_p_t)rpc_ss_mem_alloc(&IDL_msp->IDL_mem_handle,
l_storage_len * rpc_ss_type_size(cs_type_defn_ptr, IDL_msp));
(*(routine_ptr + IDL_RTN_TO_NETCS_INDEX))(IDL_msp->IDL_h,
*(IDL_msp->IDL_cs_tags_p->p_marsh_tag),
data_addr,
l_storage_len,
wdata,
NULL,
&IDL_msp->IDL_status);
if (IDL_msp->IDL_status != error_status_ok)
DCETHREAD_RAISE(rpc_x_ss_pipe_comm_error);
rpc_ss_ndr_m_fix_or_conf_arr(wdata, 1, bounds_list,
cs_type_defn_ptr, IDL_M_DO_NOT_POINT, IDL_msp);
rpc_ss_mem_item_free(&IDL_msp->IDL_mem_handle, (byte_p_t)wdata);
}
}
void rpc_ss_ndr_m_fixed_cs_array
(
rpc_void_p_t array_addr,
idl_byte **p_defn_vec_ptr,
IDL_msp_t IDL_msp
)
{
idl_byte *defn_vec_ptr;
idl_ulong_int array_defn_index;
idl_byte *array_defn_ptr;
IDL_bound_pair_t *bounds_list;
idl_ulong_int cs_type_defn_index;
defn_vec_ptr = *p_defn_vec_ptr;
defn_vec_ptr += 2;
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
IDL_GET_LONG_FROM_VECTOR(array_defn_index, defn_vec_ptr);
array_defn_ptr = IDL_msp->IDL_type_vec + array_defn_index;
array_defn_ptr++;
if (IDL_msp->IDL_type_vec[TVEC_INT_REP_OFFSET] != NDR_LOCAL_INT_REP)
rpc_ss_fixed_bounds_from_vector(1, array_defn_ptr, &bounds_list,
IDL_msp);
else
bounds_list = (IDL_bound_pair_t *)array_defn_ptr;
array_defn_ptr += IDL_FIXED_BOUND_PAIR_WIDTH;
array_defn_ptr++;
IDL_GET_LONG_FROM_VECTOR(cs_type_defn_index, array_defn_ptr);
rpc_ss_ndr_m_cs_farr_or_single(array_addr, bounds_list, cs_type_defn_index,
bounds_list[0].upper - bounds_list[0].lower + 1,
IDL_msp);
*p_defn_vec_ptr = defn_vec_ptr;
if (IDL_msp->IDL_type_vec[TVEC_INT_REP_OFFSET] != NDR_LOCAL_INT_REP)
rpc_ss_mem_item_free(&IDL_msp->IDL_mem_handle, (byte_p_t)bounds_list);
}
void rpc_ss_ndr_marsh_cs_char
(
rpc_void_p_t char_addr,
idl_ulong_int cs_type_defn_index,
IDL_msp_t IDL_msp
)
{
IDL_bound_pair_t bound_pair;
bound_pair.upper = 0;
bound_pair.lower = 0;
rpc_ss_ndr_m_cs_farr_or_single(char_addr, &bound_pair, cs_type_defn_index,
1, IDL_msp);
}
void rpc_ss_ndr_marsh_cs_array (
rpc_void_p_t array_addr,
IDL_cs_shadow_elt_t *cs_shadow,
idl_ulong_int shadow_index,
idl_boolean in_struct,
idl_byte **p_defn_vec_ptr,
IDL_msp_t IDL_msp
)
{
idl_byte array_type;
idl_byte *defn_vec_ptr = 0;
idl_ulong_int array_defn_index;
idl_byte *array_defn_ptr = 0;
IDL_bound_pair_t bound_pair;
IDL_bound_pair_t *bounds_list;
idl_ulong_int Z_value;
IDL_bound_pair_t range_pair;
idl_byte ln_type;
idl_ulong_int ln_index;
idl_byte sz_type;
idl_ulong_int sz_index;
idl_ulong_int cs_type_defn_index;
idl_byte *cs_type_defn_ptr = 0 ;
array_type = **p_defn_vec_ptr;
if (array_type == IDL_DT_FIXED_ARRAY)
{
rpc_ss_ndr_m_fixed_cs_array(array_addr, p_defn_vec_ptr, IDL_msp);
return;
}
defn_vec_ptr = *p_defn_vec_ptr;
defn_vec_ptr += 2;
IDL_DISCARD_LONG_FROM_VECTOR(defn_vec_ptr);
IDL_GET_LONG_FROM_VECTOR(array_defn_index, defn_vec_ptr);
*p_defn_vec_ptr = defn_vec_ptr;
if (array_type == IDL_DT_ALLOCATE)
{
return;
}
array_defn_ptr = IDL_msp->IDL_type_vec + array_defn_index;
array_defn_ptr++;
if (array_type == IDL_DT_VARYING_ARRAY)
{
if (IDL_msp->IDL_type_vec[TVEC_INT_REP_OFFSET] != NDR_LOCAL_INT_REP)
rpc_ss_fixed_bounds_from_vector(1, array_defn_ptr, &bounds_list,
IDL_msp);
else
bounds_list = (IDL_bound_pair_t *)array_defn_ptr;
array_defn_ptr += IDL_FIXED_BOUND_PAIR_WIDTH;
}
else
{
bound_pair.lower = 1;
array_defn_ptr += IDL_CONF_BOUND_PAIR_WIDTH/2 + 1;
sz_type = *array_defn_ptr;
IDL_GET_LONG_FROM_VECTOR(sz_index, array_defn_ptr);
sz_index--;
bound_pair.upper = rpc_ss_get_typed_integer(sz_type,
(rpc_void_p_t)&cs_shadow[sz_index].IDL_data,
IDL_msp);
bounds_list = &bound_pair;
if ( ! in_struct )
{
IDL_MARSH_LONG(&bound_pair.upper);
}
}
if ((array_type == IDL_DT_VARYING_ARRAY)
|| (array_type == IDL_DT_OPEN_ARRAY))
{
array_defn_ptr++;
IDL_GET_LONG_FROM_VECTOR(range_pair.lower, array_defn_ptr);
array_defn_ptr++;
ln_type = *array_defn_ptr;
IDL_GET_LONG_FROM_VECTOR(ln_index, array_defn_ptr);
ln_index--;
range_pair.upper = rpc_ss_get_typed_integer(ln_type,
(rpc_void_p_t)&cs_shadow[ln_index].IDL_data,
IDL_msp);
range_pair.upper += range_pair.lower;
}
array_defn_ptr++;
IDL_GET_LONG_FROM_VECTOR(cs_type_defn_index, array_defn_ptr);
cs_type_defn_ptr = IDL_msp->IDL_type_vec + cs_type_defn_index;
IDL_DISCARD_LONG_FROM_VECTOR(cs_type_defn_ptr);
IDL_DISCARD_LONG_FROM_VECTOR(cs_type_defn_ptr);
if (array_type == IDL_DT_CONF_ARRAY)
{
rpc_ss_ndr_m_fix_or_conf_arr(
cs_shadow[shadow_index].IDL_data.IDL_storage_p,
1, bounds_list, cs_type_defn_ptr,
IDL_M_DO_NOT_POINT, IDL_msp);
}
else
{
Z_value = bounds_list[0].upper - bounds_list[0].lower + 1;
rpc_ss_ndr_m_var_or_open_arr(
cs_shadow[shadow_index].IDL_data.IDL_storage_p,
&Z_value, 1, &range_pair,
cs_type_defn_ptr, IDL_M_DO_NOT_POINT, IDL_msp);
}
if (IDL_msp->IDL_type_vec[TVEC_INT_REP_OFFSET] != NDR_LOCAL_INT_REP)
if (array_type == IDL_DT_VARYING_ARRAY)
rpc_ss_mem_item_free(&IDL_msp->IDL_mem_handle, (byte_p_t)bounds_list);
return ;
}
void rpc_ss_ndr_m_rlse_cs_shadow
(
IDL_cs_shadow_elt_t *cs_shadow,
idl_ulong_int shadow_length,
IDL_msp_t IDL_msp
)
{
unsigned32 i;
for (i=0; i<shadow_length; i++)
{
if (cs_shadow[i].IDL_release)
{
rpc_ss_mem_item_free(&IDL_msp->IDL_mem_handle,
(byte_p_t)cs_shadow[i].IDL_data.IDL_storage_p);
}
}
rpc_ss_mem_item_free(&IDL_msp->IDL_mem_handle, (byte_p_t)cs_shadow);
}
void rpc_ss_ndr_m_param_cs_shadow
(
idl_byte *type_vec_ptr,
idl_ulong_int param_index,
idl_ulong_int shadow_length,
IDL_cs_shadow_elt_t **p_cs_shadow,
IDL_msp_t IDL_msp
)
{
idl_byte type_byte;
IDL_cs_shadow_elt_t *cs_shadow;
unsigned32 i;
cs_shadow = (IDL_cs_shadow_elt_t *)rpc_ss_mem_alloc
(&IDL_msp->IDL_mem_handle, shadow_length
* sizeof(IDL_cs_shadow_elt_t));
for (i=0; i<shadow_length; i++)
cs_shadow[i].IDL_release = idl_false;
for (i = 0; ; i++)
{
if (i != 0)
{
IDL_GET_LONG_FROM_VECTOR(param_index,type_vec_ptr);
}
do {
type_byte = *type_vec_ptr;
type_vec_ptr++;
switch(type_byte)
{
case IDL_DT_CS_ARRAY:
rpc_ss_ndr_m_array_shadow(NULL, NULL, NULL, cs_shadow,
param_index - 1, &type_vec_ptr, IDL_msp);
break;
case IDL_DT_BYTE:
case IDL_DT_CHAR:
case IDL_DT_BOOLEAN:
case IDL_DT_DOUBLE:
case IDL_DT_ENUM:
case IDL_DT_FLOAT:
case IDL_DT_SMALL:
case IDL_DT_SHORT:
case IDL_DT_LONG:
case IDL_DT_HYPER:
case IDL_DT_USMALL:
case IDL_DT_USHORT:
case IDL_DT_ULONG:
case IDL_DT_UHYPER:
case IDL_DT_IGNORE:
case IDL_DT_V1_ENUM:
case IDL_DT_ERROR_STATUS:
case IDL_DT_IN_CONTEXT:
case IDL_DT_IN_OUT_CONTEXT:
case IDL_DT_OUT_CONTEXT:
break;
case IDL_DT_FIXED_ARRAY:
case IDL_DT_VARYING_ARRAY:
case IDL_DT_CONF_ARRAY:
case IDL_DT_OPEN_ARRAY:
type_vec_ptr++;
IDL_DISCARD_LONG_FROM_VECTOR(type_vec_ptr);
IDL_DISCARD_LONG_FROM_VECTOR(type_vec_ptr);
break;
case IDL_DT_FIXED_STRUCT:
case IDL_DT_CONF_STRUCT:
case IDL_DT_V1_CONF_STRUCT:
case IDL_DT_ENC_UNION:
case IDL_DT_N_E_UNION:
case IDL_DT_FULL_PTR:
case IDL_DT_UNIQUE_PTR:
case IDL_DT_REF_PTR:
case IDL_DT_TRANSMIT_AS:
case IDL_DT_REPRESENT_AS:
case IDL_DT_PIPE:
case IDL_DT_CS_TYPE:
type_vec_ptr++;
IDL_DISCARD_LONG_FROM_VECTOR(type_vec_ptr);
break;
case IDL_DT_ALLOCATE_REF:
rpc_ss_discard_allocate_ref(&type_vec_ptr);
break;
case IDL_DT_FREE_REP:
IDL_DISCARD_LONG_FROM_VECTOR(type_vec_ptr);
break;
case IDL_DT_PASSED_BY_REF:
case IDL_DT_STRING:
case IDL_DT_ALLOCATE:
case IDL_DT_V1_ARRAY:
case IDL_DT_V1_STRING:
case IDL_DT_DELETED_NODES:
case IDL_DT_CS_ATTRIBUTE:
case IDL_DT_EOL:
break;
case IDL_DT_RANGE:
IDL_DISCARD_LONG_FROM_VECTOR(type_vec_ptr);
IDL_DISCARD_LONG_FROM_VECTOR(type_vec_ptr);
break;
case IDL_DT_CS_RLSE_SHADOW:
*p_cs_shadow = cs_shadow;
return;
default:
#ifdef DEBUG_INTERP
printf("rpc_ss_ndr_m_param_cs_shadow:unrecognized type %d\n",
type_byte);
exit(0);
#endif
DCETHREAD_RAISE(rpc_x_coding_error);
}
} while (type_byte != IDL_DT_EOL);
}
}
void rpc_ss_conf_struct_cs_bounds
(
idl_byte *defn_vec_ptr,
IDL_cs_shadow_elt_t *cs_shadow,
IDL_bound_pair_t *bounds_list,
IDL_msp_t IDL_msp
)
{
idl_byte sz_type;
idl_ulong_int sz_index;
bounds_list[0].lower = 1;
defn_vec_ptr += IDL_CONF_BOUND_PAIR_WIDTH/2 + 1;
sz_type = *defn_vec_ptr;
IDL_GET_LONG_FROM_VECTOR(sz_index, defn_vec_ptr);
sz_index--;
bounds_list[0].upper = rpc_ss_get_typed_integer(sz_type,
(rpc_void_p_t)&cs_shadow[sz_index].IDL_data,
IDL_msp);
}