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