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 <[email protected]>
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

Reply via email to