2 Unix SMB/CIFS implementation.
4 helper routines for BKUP Blobs marshalling
6 Copyright (C) Matthieu Patou <mat@matws.net> 2011
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "librpc/gen_ndr/ndr_bkupblobs.h"
26 _PUBLIC_
enum ndr_err_code
ndr_push_bkup_NTBackupFile(struct ndr_push
*ndr
, ndr_flags_type ndr_flags
, const struct bkup_NTBackupFile
*r
)
28 uint32_t cntr_streams_0
;
30 libndr_flags _flags_save_STRUCT
= ndr
->flags
;
31 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_NOALIGN
);
32 if (ndr_flags
& NDR_SCALARS
) {
33 NDR_CHECK(ndr_push_align(ndr
, 2));
34 for (cntr_streams_0
= 0; cntr_streams_0
< r
->num_stream
; cntr_streams_0
++) {
35 NDR_CHECK(ndr_push_bkup_Win32StreamId(ndr
, NDR_SCALARS
, &r
->streams
[cntr_streams_0
]));
37 NDR_CHECK(ndr_push_trailer_align(ndr
, 8));
39 if (ndr_flags
& NDR_BUFFERS
) {
41 ndr
->flags
= _flags_save_STRUCT
;
43 return NDR_ERR_SUCCESS
;
46 #define _TMP_PULL_REALLOC_N(ndr, s, t, n) do { \
47 _NDR_PULL_FIX_CURRENT_MEM_CTX(ndr);\
48 (s) = talloc_realloc(ndr->current_mem_ctx, (s), t, n); \
50 return ndr_pull_error(ndr, NDR_ERR_ALLOC, \
51 "Alloc %u * %s failed: %s\n", \
52 (unsigned)n, # s, __location__); \
56 _PUBLIC_
enum ndr_err_code
ndr_pull_bkup_NTBackupFile(struct ndr_pull
*ndr
, ndr_flags_type ndr_flags
, struct bkup_NTBackupFile
*r
)
58 uint32_t cntr_streams_0
;
60 libndr_flags _flags_save_STRUCT
= ndr
->flags
;
61 ndr_set_flags(&ndr
->flags
, LIBNDR_FLAG_NOALIGN
);
62 if (ndr_flags
& NDR_SCALARS
) {
63 uint32_t remaining
= ndr
->data_size
- ndr
->offset
;
66 for (cntr_streams_0
= 0; remaining
> 0; cntr_streams_0
++) {
68 _TMP_PULL_REALLOC_N(ndr
, r
->streams
,
69 struct bkup_Win32StreamId
,
71 NDR_CHECK(ndr_pull_bkup_Win32StreamId(ndr
,
73 &r
->streams
[cntr_streams_0
]));
74 remaining
= ndr
->data_size
- ndr
->offset
;
77 if (ndr_flags
& NDR_BUFFERS
) {
79 ndr
->flags
= _flags_save_STRUCT
;
81 return NDR_ERR_SUCCESS
;