⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ndr_refptr.pl

📁 samba最新软件
💻 PL
字号:
#!/usr/bin/perl# Simple tests for pidl's handling of ref pointers, based# on tridge's ref_notes.txt# (C) 2005 Jelmer Vernooij <jelmer@samba.org>.# Published under the GNU General Public License.use strict;use Test::More tests => 22 * 8;use FindBin qw($RealBin);use lib "$RealBin";use Util qw(test_samba4_ndr);test_samba4_ndr("noptr-push", '	typedef struct {		uint16 x;	} xstruct;	[public] uint16 echo_TestRef([in] xstruct foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	uint16_t v = 13;	struct echo_TestRef r;	r.in.foo.x = v; 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r))) {		fprintf(stderr, "push failed\n");		return 1;	}	if (ndr->offset != 2) {		fprintf(stderr, "Offset(%d) != 2\n", ndr->offset);		return 2;	}	if (ndr->data[0] != 13 || ndr->data[1] != 0) {		fprintf(stderr, "Data incorrect\n");		return 3;	}');test_samba4_ndr("ptr-embedded-push", '   typedef struct {		uint16 *x;	} xstruct;	[public] uint16 echo_TestRef([in] xstruct foo);','	uint16_t v = 13;	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo.x = &v; 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 6)		return 2;	if (ndr->data[0] == 0 && ndr->data[1] == 0 && 	    ndr->data[2] == 0 && ndr->data[3] == 0)		return 3;	if (ndr->data[4] != 13 || ndr->data[5] != 0)		return 4;');test_samba4_ndr("ptr-embedded-push-null", '   typedef struct {		uint16 *x;	} xstruct;	[public] uint16 echo_TestRef([in] xstruct foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo.x = NULL; 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 4)		return 2;	if (ndr->data[0] != 0 || ndr->data[1] != 0 || 	    ndr->data[2] != 0 || ndr->data[3] != 0)		return 3;');test_samba4_ndr("refptr-embedded-push", '	typedef struct {		[ref] uint16 *x;	} xstruct;	[public] uint16 echo_TestRef([in] xstruct foo);','	uint16_t v = 13;	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo.x = &v; 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 6)		return 2;	if (ndr->data[0] == 0 && ndr->data[1] == 0 && 	    ndr->data[2] == 0 && ndr->data[3] == 0)		return 3;	if (ndr->data[4] != 13 || ndr->data[5] != 0)		return 4;');test_samba4_ndr("refptr-embedded-push-null", '	typedef struct {		[ref] uint16 *x;	} xstruct;	[public] uint16 echo_TestRef([in] xstruct foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo.x = NULL; 	if (NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	/* Windows gives [client runtime error 0x6f4] */');test_samba4_ndr("ptr-top-push", '	typedef struct {		uint16 x;	} xstruct;	[public] uint16 echo_TestRef([in] xstruct *foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	struct xstruct s;	s.x = 13;	r.in.foo = &s;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 2)		return 2;	if (ndr->data[0] != 13 || ndr->data[1] != 0)		return 3;');test_samba4_ndr("ptr-top-push-null", '	typedef struct {		uint16 x;	} xstruct;	[public] uint16 echo_TestRef([in] xstruct *foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo = NULL;	if (NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	/* Windows gives [client runtime error 0x6f4] */');test_samba4_ndr("refptr-top-push", '	typedef struct {		uint16 x;	} xstruct;	[public] uint16 echo_TestRef([in,ref] xstruct *foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	struct xstruct s;	s.x = 13;	r.in.foo = &s;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 2)		return 2;	if (ndr->data[0] != 13 || ndr->data[1] != 0)		return 3;');test_samba4_ndr("refptr-top-push-null", '	typedef struct {		uint16 x;	} xstruct;	[public] uint16 echo_TestRef([in,ref] xstruct *foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo = NULL;	if (NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	/* Windows gives [client runtime error 0x6f4] */');test_samba4_ndr("uniqueptr-top-push", '	typedef struct {		uint16 x;	} xstruct;	[public] uint16 echo_TestRef([in,unique] xstruct *foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	struct xstruct s;	s.x = 13;	r.in.foo = &s;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 6)		return 2;	if (ndr->data[0] == 0 && ndr->data[1] == 0 && 	    ndr->data[2] == 0 && ndr->data[3] == 0)		return 3;	if (ndr->data[4] != 13 || ndr->data[5] != 0)		return 4;');test_samba4_ndr("uniqueptr-top-push-null", '	typedef struct {		uint16 x;	} xstruct;	[public] uint16 echo_TestRef([in,unique] xstruct *foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo = NULL;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 4)		return 2;	if (ndr->data[0] != 0 || ndr->data[1] != 0 || 	    ndr->data[2] != 0 || ndr->data[3] != 0)		return 3;');test_samba4_ndr("ptr-top-out-pull", '	typedef struct {		uint16 x;	} xstruct;	[public] void echo_TestRef([out] xstruct *foo);','	uint8_t data[] = { 0x0D, 0x00 };	DATA_BLOB b = { data, 2 };	struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL, NULL);	struct xstruct s;	struct echo_TestRef r;	r.out.foo = &s;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))		return 1;	if (!r.out.foo)		return 2;	if (r.out.foo->x != 13)		return 3;');	test_samba4_ndr("ptr-top-out-pull-null", '	typedef struct {		uint16 x;	} xstruct;	[public] void echo_TestRef([out] xstruct *foo);','	uint8_t data[] = { 0x0D, 0x00 };	DATA_BLOB b = { data, 2 };	struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL, NULL);	struct echo_TestRef r;	r.out.foo = NULL;	if (NDR_ERR_CODE_IS_SUCCESS(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))		return 1;		/* Windows gives [client runtime error 0x6f4] */');test_samba4_ndr("refptr-top-out-pull", '	typedef struct {		uint16 x;	} xstruct;	[public] void echo_TestRef([out,ref] xstruct *foo);','	uint8_t data[] = { 0x0D, 0x00 };	DATA_BLOB b = { data, 2 };	struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL, NULL);	struct xstruct s;	struct echo_TestRef r;	r.out.foo = &s;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))		return 1;	if (!r.out.foo)		return 2;	if (r.out.foo->x != 13)		return 3;');	test_samba4_ndr("refptr-top-out-pull-null", '	typedef struct {		uint16 x;	} xstruct;	[public] void echo_TestRef([out,ref] xstruct *foo);','	uint8_t data[] = { 0x0D, 0x00 };	DATA_BLOB b = { data, 2 };	struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL, NULL);	struct echo_TestRef r;	r.out.foo = NULL;	if (NDR_ERR_CODE_IS_SUCCESS(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))		return 1;		/* Windows gives [client runtime error 0x6f4] */');test_samba4_ndr("ptr-top-push-double", '	[public] void echo_TestRef([in] uint16 **foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	uint16_t v = 13;	uint16_t *pv = &v;	r.in.foo = &pv;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 6)		return 2;	if (ndr->data[0] == 0 && ndr->data[1] == 0 && 	    ndr->data[2] == 0 && ndr->data[3] == 0)		return 3;	if (ndr->data[4] != 0x0D || ndr->data[5] != 0x00)		return 4;');SKIP: {	skip "ptr-top-push-double-sndnull is known to fail", 8;test_samba4_ndr("ptr-top-push-double-sndnull", '	[public] void echo_TestRef([in] uint16 **foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	uint16_t *pv = NULL;	r.in.foo = &pv;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 4)		return 2;	if (ndr->data[0] != 0 || ndr->data[1] != 0 || 	    ndr->data[2] != 0 || ndr->data[3] != 0)		return 3;');}test_samba4_ndr("ptr-top-push-double-fstnull", '	[public] void echo_TestRef([in] uint16 **foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo = NULL;	if (NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;		/* Windows gives [client runtime error 0x6f4] */');test_samba4_ndr("refptr-top-push-double", '	[public] void echo_TestRef([in,ref] uint16 **foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	uint16_t v = 13;	uint16_t *pv = &v;	r.in.foo = &pv;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 6)		return 2;	if (ndr->data[0] == 0 && ndr->data[1] == 0 && 	    ndr->data[2] == 0 && ndr->data[3] == 0)		return 3;	if (ndr->data[4] != 0x0D || ndr->data[5] != 0x00)		return 4;');SKIP: {	skip "refptr-top-push-double-sndnull is known to fail", 8;test_samba4_ndr("refptr-top-push-double-sndnull", '	[public] void echo_TestRef([in,ref] uint16 **foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	uint16_t *pv = NULL;	r.in.foo = &pv;	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 4)		return 2;	if (ndr->data[0] != 0 || ndr->data[1] != 0 || 	    ndr->data[2] != 0 || ndr->data[3] != 0)		return 3;');}test_samba4_ndr("refptr-top-push-double-fstnull", '	[public] void echo_TestRef([in,ref] uint16 **foo);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	r.in.foo = NULL;	if (NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;		/* Windows gives [client runtime error 0x6f4] */');SKIP: {	skip "ignore-ptrs are not supported yet", 8;test_samba4_ndr("ignore-ptr", '	[public] void echo_TestRef([in,ignore] uint16 *foo, [in] uint16 *bar);','	struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);	struct echo_TestRef r;	uint16_t v = 10;	r.in.foo = &v; 	r.in.bar = &v;	if (NDR_ERR_CODE_IS_SUCCESS(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))		return 1;	if (ndr->offset != 4)		return 2;');}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -