[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Fri Nov 27 08:33:08 MST 2009


The branch, master has been updated
       via  23d77be... misc: mark winreg_Data little-endian except for a REG_DWORD_BIG_ENDIAN.
      from  79f8299... pidl: fix handling of output arguments in s3 client stubs.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 23d77be6cb8847cbdad859269faf59fea30b27b8
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 11:18:30 2009 +0100

    misc: mark winreg_Data little-endian except for a REG_DWORD_BIG_ENDIAN.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 librpc/gen_ndr/misc.h     |    2 +-
 librpc/gen_ndr/ndr_misc.c |  357 +++++++++++++++++++++++++++------------------
 librpc/idl/misc.idl       |    4 +-
 3 files changed, 218 insertions(+), 145 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/misc.h b/librpc/gen_ndr/misc.h
index 29ea192..6672c61 100644
--- a/librpc/gen_ndr/misc.h
+++ b/librpc/gen_ndr/misc.h
@@ -89,6 +89,6 @@ union winreg_Data {
 	uint32_t value;/* [case(REG_DWORD)] */
 	const char ** string_array;/* [flag(LIBNDR_FLAG_STR_NULLTERM),case(REG_MULTI_SZ)] */
 	DATA_BLOB data;/* [flag(LIBNDR_FLAG_REMAINING),default] */
-}/* [nodiscriminant,public] */;
+}/* [public,nodiscriminant,flag(LIBNDR_FLAG_LITTLE_ENDIAN)] */;
 
 #endif /* _HEADER_misc */
diff --git a/librpc/gen_ndr/ndr_misc.c b/librpc/gen_ndr/ndr_misc.c
index ff79baa..1f4d0c9 100644
--- a/librpc/gen_ndr/ndr_misc.c
+++ b/librpc/gen_ndr/ndr_misc.c
@@ -213,77 +213,106 @@ _PUBLIC_ void ndr_print_winreg_Type(struct ndr_print *ndr, const char *name, enu
 
 _PUBLIC_ enum ndr_err_code ndr_push_winreg_Data(struct ndr_push *ndr, int ndr_flags, const union winreg_Data *r)
 {
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_union_align(ndr, 4));
-		switch (level) {
-			case REG_NONE: {
-			break; }
-
-			case REG_SZ: {
-				{
-					uint32_t _flags_save_string = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->string));
-					ndr->flags = _flags_save_string;
-				}
-			break; }
-
-			case REG_BINARY: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->binary));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
-
-			case REG_DWORD: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->value));
-			break; }
-
-			case REG_MULTI_SZ: {
-				{
-					uint32_t _flags_save_string_array = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->string_array));
-					ndr->flags = _flags_save_string_array;
-				}
-			break; }
-
-			default: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->data));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
-
+	{
+		uint32_t _flags_save_UNION = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		if (ndr_flags & NDR_SCALARS) {
+			int level = ndr_push_get_switch_value(ndr, r);
+			NDR_CHECK(ndr_push_union_align(ndr, 4));
+			switch (level) {
+				case REG_NONE: {
+				break; }
+
+				case REG_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_EXPAND_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_BINARY: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->binary));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+				case REG_DWORD: {
+					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->value));
+				break; }
+
+				case REG_DWORD_BIG_ENDIAN: {
+					{
+						uint32_t _flags_save_uint32 = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
+						NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->value));
+						ndr->flags = _flags_save_uint32;
+					}
+				break; }
+
+				case REG_MULTI_SZ: {
+					{
+						uint32_t _flags_save_string_array = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->string_array));
+						ndr->flags = _flags_save_string_array;
+					}
+				break; }
+
+				default: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->data));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+			}
 		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case REG_NONE:
-			break;
+		if (ndr_flags & NDR_BUFFERS) {
+			int level = ndr_push_get_switch_value(ndr, r);
+			switch (level) {
+				case REG_NONE:
+				break;
 
-			case REG_SZ:
-			break;
+				case REG_SZ:
+				break;
 
-			case REG_BINARY:
-			break;
+				case REG_EXPAND_SZ:
+				break;
 
-			case REG_DWORD:
-			break;
+				case REG_BINARY:
+				break;
 
-			case REG_MULTI_SZ:
-			break;
+				case REG_DWORD:
+				break;
 
-			default:
-			break;
+				case REG_DWORD_BIG_ENDIAN:
+				break;
 
+				case REG_MULTI_SZ:
+				break;
+
+				default:
+				break;
+
+			}
 		}
+		ndr->flags = _flags_save_UNION;
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -291,109 +320,151 @@ _PUBLIC_ enum ndr_err_code ndr_push_winreg_Data(struct ndr_push *ndr, int ndr_fl
 _PUBLIC_ enum ndr_err_code ndr_pull_winreg_Data(struct ndr_pull *ndr, int ndr_flags, union winreg_Data *r)
 {
 	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_union_align(ndr, 4));
-		switch (level) {
-			case REG_NONE: {
-			break; }
-
-			case REG_SZ: {
-				{
-					uint32_t _flags_save_string = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->string));
-					ndr->flags = _flags_save_string;
-				}
-			break; }
-
-			case REG_BINARY: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->binary));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
-
-			case REG_DWORD: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value));
-			break; }
-
-			case REG_MULTI_SZ: {
-				{
-					uint32_t _flags_save_string_array = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_pull_string_array(ndr, NDR_SCALARS, &r->string_array));
-					ndr->flags = _flags_save_string_array;
-				}
-			break; }
-
-			default: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->data));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
+	{
+		uint32_t _flags_save_UNION = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		level = ndr_pull_get_switch_value(ndr, r);
+		if (ndr_flags & NDR_SCALARS) {
+			NDR_CHECK(ndr_pull_union_align(ndr, 4));
+			switch (level) {
+				case REG_NONE: {
+				break; }
+
+				case REG_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_EXPAND_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_BINARY: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->binary));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+				case REG_DWORD: {
+					NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value));
+				break; }
+
+				case REG_DWORD_BIG_ENDIAN: {
+					{
+						uint32_t _flags_save_uint32 = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
+						NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value));
+						ndr->flags = _flags_save_uint32;
+					}
+				break; }
+
+				case REG_MULTI_SZ: {
+					{
+						uint32_t _flags_save_string_array = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_pull_string_array(ndr, NDR_SCALARS, &r->string_array));
+						ndr->flags = _flags_save_string_array;
+					}
+				break; }
+
+				default: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->data));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+			}
+		}
+		if (ndr_flags & NDR_BUFFERS) {
+			switch (level) {
+				case REG_NONE:
+				break;
+
+				case REG_SZ:
+				break;
+
+				case REG_EXPAND_SZ:
+				break;
+
+				case REG_BINARY:
+				break;
+
+				case REG_DWORD:
+				break;
 
+				case REG_DWORD_BIG_ENDIAN:
+				break;
+
+				case REG_MULTI_SZ:
+				break;
+
+				default:
+				break;
+
+			}
 		}
+		ndr->flags = _flags_save_UNION;
 	}
-	if (ndr_flags & NDR_BUFFERS) {
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_winreg_Data(struct ndr_print *ndr, const char *name, const union winreg_Data *r)
+{
+	int level;
+	{
+		uint32_t _flags_save_UNION = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		level = ndr_print_get_switch_value(ndr, r);
+		ndr_print_union(ndr, name, level, "winreg_Data");
 		switch (level) {
 			case REG_NONE:
 			break;
 
 			case REG_SZ:
+				ndr_print_string(ndr, "string", r->string);
+			break;
+
+			case REG_EXPAND_SZ:
+				ndr_print_string(ndr, "string", r->string);
 			break;
 
 			case REG_BINARY:
+				ndr_print_DATA_BLOB(ndr, "binary", r->binary);
 			break;
 
 			case REG_DWORD:
+				ndr_print_uint32(ndr, "value", r->value);
+			break;
+
+			case REG_DWORD_BIG_ENDIAN:
+				ndr_print_uint32(ndr, "value", r->value);
 			break;
 
 			case REG_MULTI_SZ:
+				ndr_print_string_array(ndr, "string_array", r->string_array);
 			break;
 
 			default:
+				ndr_print_DATA_BLOB(ndr, "data", r->data);
 			break;
 
 		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_Data(struct ndr_print *ndr, const char *name, const union winreg_Data *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "winreg_Data");
-	switch (level) {
-		case REG_NONE:
-		break;
-
-		case REG_SZ:
-			ndr_print_string(ndr, "string", r->string);
-		break;
-
-		case REG_BINARY:
-			ndr_print_DATA_BLOB(ndr, "binary", r->binary);
-		break;
-
-		case REG_DWORD:
-			ndr_print_uint32(ndr, "value", r->value);
-		break;
-
-		case REG_MULTI_SZ:
-			ndr_print_string_array(ndr, "string_array", r->string_array);
-		break;
-
-		default:
-			ndr_print_DATA_BLOB(ndr, "data", r->data);
-		break;
-
+		ndr->flags = _flags_save_UNION;
 	}
 }
 
diff --git a/librpc/idl/misc.idl b/librpc/idl/misc.idl
index 5a2bf75..adaac9a 100644
--- a/librpc/idl/misc.idl
+++ b/librpc/idl/misc.idl
@@ -61,11 +61,13 @@ interface misc
 		REG_QWORD                      = 11
 	} winreg_Type;
 
-	typedef [nodiscriminant,public] union {
+	typedef [nodiscriminant,public,flag(NDR_LITTLE_ENDIAN)] union {
 		[case(REG_NONE)];
 		[case(REG_SZ)] nstring string;
+		[case(REG_EXPAND_SZ)] nstring string;
 		[case(REG_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary;
 		[case(REG_DWORD)] uint32 value;
+		[case(REG_DWORD_BIG_ENDIAN),flag(NDR_BIG_ENDIAN)] uint32 value;
 		[case(REG_MULTI_SZ)] nstring_array string_array;
 		[default,flag(NDR_REMAINING)] DATA_BLOB data;
 	} winreg_Data;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list