summaryrefslogtreecommitdiff
path: root/librpc/ndr
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2016-09-24 02:51:20 +0200
committerAndreas Schneider <asn@cryptomilk.org>2016-11-24 20:24:26 +0100
commit983dac44f282cc570fb4a576416bd851c18eddd0 (patch)
tree37892d8728243eac187c300ee81b267a582660df /librpc/ndr
parent59ae0e5f3423d08c30af990199bb23411949e82a (diff)
downloadsamba-983dac44f282cc570fb4a576416bd851c18eddd0.tar.gz
librpc: Add autogenerated file offset calculation for Cabinet files
Guenther Signed-off-by: Guenther Deschner <gd@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'librpc/ndr')
-rw-r--r--librpc/ndr/ndr_cab.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/librpc/ndr/ndr_cab.c b/librpc/ndr/ndr_cab.c
index f90adbf7546..3923aece6d0 100644
--- a/librpc/ndr/ndr_cab.c
+++ b/librpc/ndr/ndr_cab.c
@@ -148,13 +148,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_cab_file(struct ndr_push *ndr, int ndr_flags
ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX|LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_FLAG_NOALIGN);
NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
if (ndr_flags & NDR_SCALARS) {
+ uint32_t next_offset = 0;
NDR_CHECK(ndr_push_align(ndr, 4));
NDR_CHECK(ndr_push_CFHEADER(ndr, NDR_SCALARS, &r->cfheader));
for (cntr_cffolders_0 = 0; cntr_cffolders_0 < (r->cfheader.cFolders); cntr_cffolders_0++) {
NDR_CHECK(ndr_push_CFFOLDER(ndr, NDR_SCALARS, &r->cffolders[cntr_cffolders_0]));
}
for (cntr_cffiles_0 = 0; cntr_cffiles_0 < (r->cfheader.cFiles); cntr_cffiles_0++) {
+ uint32_t offset = ndr->offset + 4;
NDR_CHECK(ndr_push_CFFILE(ndr, NDR_SCALARS, &r->cffiles[cntr_cffiles_0]));
+ if (cntr_cffiles_0 > 0) {
+ next_offset += r->cffiles[cntr_cffiles_0 - 1].cbFile;
+ }
+ SIVAL(ndr->data, offset, next_offset);
}
#if 0
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_count_cfdata(r)));