typedef struct {
[range(0,10485760),value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(object, ndr->flags))] uint32 __ndr_size;
- [subcontext(4)] drsuapi_DsReplicaObjectIdentifier3 *object;
+ [subcontext(4),subcontext_size(__ndr_size)] drsuapi_DsReplicaObjectIdentifier3 *object;
} drsuapi_DsAttributeValueDNString;
typedef struct {
return \%env;
}
+sub EnvSubstituteValue($$)
+{
+ my ($env,$s) = @_;
+
+ # Substitute the value() values in the env
+ foreach my $e (@{$s->{ELEMENTS}}) {
+ next unless (my $v = has_property($e, "value"));
+
+ $env->{$e->{NAME}} = ParseExpr($v, $env);
+ }
+
+ return $env;
+}
+
sub GenerateFunctionInEnv($)
{
my $fn = shift;
my $env = GenerateStructEnv($struct);
+ EnvSubstituteValue($env, $struct);
+
# save the old relative_base_offset
pidl "uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);" if defined($struct->{PROPERTIES}{relative_base});
my $env = GenerateStructEnv($struct);
+ EnvSubstituteValue($env, $struct);
+
foreach my $e (@{$struct->{ELEMENTS}}) {
DeclareArrayVariables($e);
}
pidl "ndr->depth++;";
my $env = GenerateFunctionInEnv($fn);
+ EnvSubstituteValue($env, $fn);
foreach my $e (@{$fn->{ELEMENTS}}) {
if (grep(/in/,@{$e->{DIRECTION}})) {
my $env = GenerateFunctionInEnv($fn);
+ EnvSubstituteValue($env, $fn);
+
foreach my $e (@{$fn->{ELEMENTS}}) {
if (grep(/in/,@{$e->{DIRECTION}})) {
ParseElementPush($e, "ndr", "r->in.", $env, 1, 1);