2008-09-16 04:27:33 +04:00
/*
Unix SMB / CIFS implementation .
routines for marshalling / unmarshalling DCOM string arrays
Copyright ( C ) Jelmer Vernooij 2004
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
//#define NDR_CHECK_DEBUG
# include "includes.h"
# include "librpc/gen_ndr/ndr_dcom.h"
# include "librpc/gen_ndr/ndr_wmi.h"
2011-06-14 13:31:43 +04:00
# include "librpc/ndr/ndr_wmi.h"
2008-09-16 04:27:33 +04:00
// Just for debugging
int NDR_CHECK_depth = 0 ;
int NDR_CHECK_shift = 0x18 ;
enum ndr_err_code ndr_push_BSTR ( struct ndr_push * ndr , int ndr_flags , const struct BSTR * r )
{
uint32_t len ;
uint32_t flags ;
enum ndr_err_code status ;
len = strlen ( r - > data ) ;
2010-12-28 19:33:30 +03:00
if ( ndr_flags & NDR_SCALARS ) {
NDR_CHECK ( ndr_push_align ( ndr , 4 ) ) ;
NDR_CHECK ( ndr_push_uint32 ( ndr , NDR_SCALARS , 0x72657355 ) ) ;
NDR_CHECK ( ndr_push_uint32 ( ndr , NDR_SCALARS , len ) ) ;
NDR_CHECK ( ndr_push_uint32 ( ndr , NDR_SCALARS , 2 * len ) ) ;
2008-09-16 04:27:33 +04:00
flags = ndr - > flags ;
ndr_set_flags ( & ndr - > flags , LIBNDR_FLAG_STR_NOTERM | LIBNDR_FLAG_STR_SIZE4 ) ;
status = ndr_push_string ( ndr , NDR_SCALARS , r - > data ) ;
ndr - > flags = flags ;
return status ;
2010-12-28 19:33:30 +03:00
}
return NDR_ERR_SUCCESS ;
2008-09-16 04:27:33 +04:00
}
enum ndr_err_code ndr_pull_BSTR ( struct ndr_pull * ndr , int ndr_flags , struct BSTR * r )
{
return NDR_ERR_BAD_SWITCH ;
}
void ndr_print_BSTR ( struct ndr_print * ndr , const char * name , const struct BSTR * r )
{
ndr - > print ( ndr , " %-25s: BSTR( \" %s \" ) " , name , r - > data ) ;
}