mirror of
https://github.com/samba-team/samba.git
synced 2025-03-29 02:50:28 +03:00
librpc/ndr: handle NOALIGN flag for relative pointers and alignment DATA_BLOBs
metze Autobuild-User: Stefan Metzmacher <metze@samba.org> Autobuild-Date: Tue Mar 1 17:11:03 CET 2011 on sn-devel-104
This commit is contained in:
parent
0b5719f5fc
commit
ef224aa004
@ -1191,7 +1191,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, co
|
||||
|
||||
relative_offset = ndr->offset - ndr->relative_base_offset;
|
||||
|
||||
if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
|
||||
align = 1;
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
align = 2;
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
|
||||
align = 4;
|
||||
@ -1270,7 +1272,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, cons
|
||||
/* the reversed offset is at the end of the main buffer */
|
||||
correct_offset = ndr->relative_end_offset - len;
|
||||
|
||||
if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
|
||||
align = 1;
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
align = 2;
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
|
||||
align = 4;
|
||||
|
@ -1218,8 +1218,11 @@ _PUBLIC_ void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_
|
||||
_PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flags, DATA_BLOB blob)
|
||||
{
|
||||
if (ndr->flags & LIBNDR_FLAG_REMAINING) {
|
||||
/* nothing to do */
|
||||
} else if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
|
||||
if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
|
||||
blob.length = 0;
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
blob.length = NDR_ALIGN(ndr, 2);
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
|
||||
blob.length = NDR_ALIGN(ndr, 4);
|
||||
@ -1228,7 +1231,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flag
|
||||
}
|
||||
NDR_PUSH_ALLOC_SIZE(ndr, blob.data, blob.length);
|
||||
data_blob_clear(&blob);
|
||||
} else if (!(ndr->flags & LIBNDR_FLAG_REMAINING)) {
|
||||
} else {
|
||||
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, blob.length));
|
||||
}
|
||||
NDR_CHECK(ndr_push_bytes(ndr, blob.data, blob.length));
|
||||
@ -1245,7 +1248,9 @@ _PUBLIC_ enum ndr_err_code ndr_pull_DATA_BLOB(struct ndr_pull *ndr, int ndr_flag
|
||||
if (ndr->flags & LIBNDR_FLAG_REMAINING) {
|
||||
length = ndr->data_size - ndr->offset;
|
||||
} else if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
|
||||
if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
|
||||
length = 0;
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
length = NDR_ALIGN(ndr, 2);
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
|
||||
length = NDR_ALIGN(ndr, 4);
|
||||
|
Loading…
x
Reference in New Issue
Block a user