1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

librpc/ndr: ndr align relative pointers based on the given flags

We used to do this only for the reverse relative pointers
and now we always do it.

metze
This commit is contained in:
Stefan Metzmacher 2011-02-22 15:45:44 +01:00 committed by Jeremy Allison
parent 6c3a49ced3
commit 84b884eb4b

View File

@ -1179,6 +1179,32 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, co
return NDR_ERR_SUCCESS;
}
if (!(ndr->flags & LIBNDR_FLAG_RELATIVE_REVERSE)) {
uint32_t relative_offset;
size_t pad;
/* TODO: remove this hack and let the idl use FLAG_ALIGN2 explicit */
size_t align = 2;
if (ndr->offset < ndr->relative_base_offset) {
return ndr_push_error(ndr, NDR_ERR_BUFSIZE,
"ndr_push_relative_ptr2_start ndr->offset(%u) < ndr->relative_base_offset(%u)",
ndr->offset, ndr->relative_base_offset);
}
relative_offset = ndr->offset - ndr->relative_base_offset;
if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
align = 2;
} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
align = 4;
} else if (ndr->flags & LIBNDR_FLAG_ALIGN8) {
align = 8;
}
pad = ndr_align_size(relative_offset, align);
if (pad) {
NDR_CHECK(ndr_push_zero(ndr, pad));
}
return ndr_push_relative_ptr2(ndr, p);
}
if (ndr->relative_end_offset == -1) {