summaryrefslogtreecommitdiff
path: root/source3/rpc_parse/parse_prs.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/rpc_parse/parse_prs.c')
-rw-r--r--source3/rpc_parse/parse_prs.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/source3/rpc_parse/parse_prs.c b/source3/rpc_parse/parse_prs.c
index 24eff1b779..5d0ea832c8 100644
--- a/source3/rpc_parse/parse_prs.c
+++ b/source3/rpc_parse/parse_prs.c
@@ -150,15 +150,13 @@ BOOL prs_grow(prs_struct *ps, uint32 extra_space)
(unsigned int)extra_space));
return False;
}
-
+
/*
* Decide how much extra space we really need.
*/
extra_space -= (ps->buffer_size - ps->data_offset);
-
if(ps->buffer_size == 0) {
-
/*
* Ensure we have at least a PDU's length, or extra_space, whichever
* is greater.
@@ -172,21 +170,18 @@ BOOL prs_grow(prs_struct *ps, uint32 extra_space)
}
memset(new_data, '\0', new_size );
} else {
-
/*
* If the current buffer size is bigger than the space needed, just
* double it, else add extra_space.
*/
+ new_size = MAX(ps->buffer_size*2, ps->buffer_size + extra_space);
- new_size = MAX(ps->buffer_size*2, ps->buffer_size + extra_space);
-
- if((new_data = Realloc(ps->data_p, new_size)) == NULL) {
+ if ((new_data = Realloc(ps->data_p, new_size)) == NULL) {
DEBUG(0,("prs_grow: Realloc failure for size %u.\n",
(unsigned int)new_size));
return False;
}
}
-
ps->buffer_size = new_size;
ps->data_p = new_data;
@@ -286,12 +281,12 @@ BOOL prs_append_prs_data(prs_struct *dst, prs_struct *src)
Append some data from one parse_struct into another.
********************************************************************/
-BOOL prs_append_some_prs_data(prs_struct *dst, prs_struct *src, uint32 len)
-{
+BOOL prs_append_some_prs_data(prs_struct *dst, prs_struct *src, int32 start, uint32 len)
+{
if(!prs_grow(dst, len))
return False;
-
- memcpy(&dst->data_p[dst->data_offset], prs_data_p(src), (size_t)len);
+
+ memcpy(&dst->data_p[dst->data_offset], prs_data_p(src)+start, (size_t)len);
dst->data_offset += len;
return True;