diff options
Diffstat (limited to 'librpc/ndr/ndr_basic.c')
-rw-r--r-- | librpc/ndr/ndr_basic.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index 82d2f3cfae6..e239cfb27d9 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -805,18 +805,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_unique_ptr(struct ndr_push *ndr, const void */ _PUBLIC_ enum ndr_err_code ndr_push_full_ptr(struct ndr_push *ndr, const void *p) { + enum ndr_err_code ret = NDR_ERR_SUCCESS; uint32_t ptr = 0; if (p) { /* Check if the pointer already exists and has an id */ - ptr = ndr_token_peek(&ndr->full_ptr_list, p); - if (ptr == 0) { - enum ndr_err_code ret = NDR_ERR_SUCCESS; + ret = ndr_token_peek(&ndr->full_ptr_list, p, &ptr); + if (ret == NDR_ERR_TOKEN) { ndr->ptr_count++; ptr = ndr->ptr_count; ret = ndr_token_store(ndr, &ndr->full_ptr_list, p, ptr); if (ret != NDR_ERR_SUCCESS) { return ret; } + } else if (ret != NDR_ERR_SUCCESS) { + return ret; } } return ndr_push_uint3264(ndr, NDR_SCALARS, ptr); |