Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : 4 : routines for marshalling/unmarshalling preg structures 5 : 6 : Copyright (C) Guenther Deschner 2010 7 : 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. 12 : 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. 17 : 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/>. 20 : */ 21 : 22 : #include "includes.h" 23 : #include "librpc/gen_ndr/ndr_preg.h" 24 : 25 204 : _PUBLIC_ enum ndr_err_code ndr_push_preg_file(struct ndr_push *ndr, ndr_flags_type ndr_flags, const struct preg_file *r) 26 : { 27 0 : uint32_t cntr_entries_0; 28 : { 29 204 : libndr_flags _flags_save_STRUCT = ndr->flags; 30 204 : ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 31 204 : if (ndr_flags & NDR_SCALARS) { 32 204 : NDR_CHECK(ndr_push_align(ndr, 4)); 33 204 : NDR_CHECK(ndr_push_preg_header(ndr, NDR_SCALARS, &r->header)); 34 7152 : for (cntr_entries_0 = 0; cntr_entries_0 < r->num_entries; cntr_entries_0++) { 35 6948 : NDR_CHECK(ndr_push_preg_entry(ndr, NDR_SCALARS, &r->entries[cntr_entries_0])); 36 : } 37 204 : NDR_CHECK(ndr_push_trailer_align(ndr, 4)); 38 : } 39 204 : if (ndr_flags & NDR_BUFFERS) { 40 0 : } 41 204 : ndr->flags = _flags_save_STRUCT; 42 : } 43 204 : return NDR_ERR_SUCCESS; 44 : } 45 : 46 2124 : _PUBLIC_ enum ndr_err_code ndr_pull_preg_file(struct ndr_pull *ndr, ndr_flags_type ndr_flags, struct preg_file *r) 47 : { 48 : { 49 2124 : libndr_flags _flags_save_STRUCT = ndr->flags; 50 2124 : ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 51 2124 : if (ndr_flags & NDR_SCALARS) { 52 2124 : NDR_CHECK(ndr_pull_align(ndr, 4)); 53 2124 : NDR_CHECK(ndr_pull_preg_header(ndr, NDR_SCALARS, &r->header)); 54 2124 : r->num_entries = 0; 55 2124 : NDR_PULL_ALLOC_N(ndr, r->entries, r->num_entries); 56 32146 : while (ndr->offset + 12 <= ndr->data_size) { 57 30022 : r->entries = talloc_realloc(ndr, r->entries, struct preg_entry, r->num_entries + 1); 58 30022 : NDR_ERR_HAVE_NO_MEMORY(r->entries); 59 30022 : NDR_CHECK(ndr_pull_preg_entry(ndr, NDR_SCALARS, &r->entries[r->num_entries])); 60 30022 : r->num_entries++; 61 : } 62 2124 : NDR_CHECK(ndr_pull_trailer_align(ndr, 4)); 63 : } 64 2124 : if (ndr_flags & NDR_BUFFERS) { 65 0 : } 66 2124 : ndr->flags = _flags_save_STRUCT; 67 : } 68 2124 : return NDR_ERR_SUCCESS; 69 : }