my $flags = util::has_property($e, "flag");
if (defined $flags) {
pidl "\t{ uint32_t _flags_save_$e->{TYPE} = ndr->flags;\n";
- pidl "\tndr->flags |= $flags;\n";
+ pidl "\tndr_set_flags(&ndr->flags, $flags);\n";
}
}
typedef struct {
} epm_rhs_ncalrpc;
- typedef [nodiscriminant] union {
+ typedef [flag(NDR_BIG_ENDIAN),nodiscriminant] union {
[case(EPM_PROTOCOL_DNET_NSP)] epm_rhs_dnet_nsp dnet_nsp;
[case(EPM_PROTOCOL_OSI_TP4)] epm_rhs_osi_tp4 osi_tp4;
[case(EPM_PROTOCOL_OSI_CLNS)] epm_rhs_osi_clns osi_clns;
/* this flag is used to force a section of IDL as little endian. It is
needed for the epmapper IDL, which is defined as always being LE */
#define NDR_LITTLE_ENDIAN LIBNDR_FLAG_LITTLE_ENDIAN
+#define NDR_BIG_ENDIAN LIBNDR_FLAG_BIGENDIAN
/*
talloc_free(ndr);
}
+void ndr_set_flags(uint32_t *pflags, uint32_t new_flags)
+{
+ /* the big/little endian flags are inter-dependent */
+ if (new_flags & LIBNDR_FLAG_LITTLE_ENDIAN) {
+ (*pflags) &= ~LIBNDR_FLAG_BIGENDIAN;
+ }
+ if (new_flags & LIBNDR_FLAG_BIGENDIAN) {
+ (*pflags) &= ~LIBNDR_FLAG_LITTLE_ENDIAN;
+ }
+ (*pflags) |= new_flags;
+}
static NTSTATUS ndr_map_error(enum ndr_err_code err)
{