Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : 4 : routines for marshalling/unmarshalling DCOM string arrays 5 : 6 : Copyright (C) Jelmer Vernooij 2004 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 2 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, write to the Free Software 20 : Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21 : */ 22 : //#define NDR_CHECK_DEBUG 23 : #include "includes.h" 24 : #include "librpc/gen_ndr/ndr_dcom.h" 25 : #include "librpc/gen_ndr/ndr_wmi.h" 26 : #include "librpc/ndr/ndr_wmi.h" 27 : 28 : // Just for debugging 29 : int NDR_CHECK_depth = 0; 30 : int NDR_CHECK_shift = 0x18; 31 : 32 0 : enum ndr_err_code ndr_push_BSTR(struct ndr_push *ndr, int ndr_flags, const struct BSTR *r) 33 : { 34 : uint32_t len; 35 : uint32_t flags; 36 : enum ndr_err_code status; 37 0 : len = strlen(r->data); 38 0 : if (ndr_flags & NDR_SCALARS) { 39 0 : NDR_CHECK(ndr_push_align(ndr, 4)); 40 0 : NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0x72657355)); 41 0 : NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, len)); 42 0 : NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2*len)); 43 0 : flags = ndr->flags; 44 0 : ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NOTERM | LIBNDR_FLAG_STR_SIZE4); 45 0 : status = ndr_push_string(ndr, NDR_SCALARS, r->data); 46 0 : ndr->flags = flags; 47 0 : return status; 48 : } 49 0 : return NDR_ERR_SUCCESS; 50 : } 51 : 52 0 : enum ndr_err_code ndr_pull_BSTR(struct ndr_pull *ndr, int ndr_flags, struct BSTR *r) 53 : { 54 0 : return NDR_ERR_BAD_SWITCH; 55 : } 56 : 57 0 : void ndr_print_BSTR(struct ndr_print *ndr, const char *name, const struct BSTR *r) 58 : { 59 0 : ndr->print(ndr, "%-25s: BSTR(\"%s\")", name, r->data); 60 0 : }