spoolss.idl: align spoolss_PrinterEnumValues 'data' based on the type
authorStefan Metzmacher <metze@samba.org>
Tue, 22 Feb 2011 18:23:33 +0000 (19:23 +0100)
committerJeremy Allison <jra@samba.org>
Mon, 28 Feb 2011 23:54:13 +0000 (15:54 -0800)
metze

librpc/idl/spoolss.idl
librpc/ndr/ndr_spoolss_buf.c
librpc/ndr/ndr_spoolss_buf.h

index c74bd69a2fe3d91def3c353effd645e6602884d0..430b538123212f7c0f4f86177e2a36303f4c9738 100644 (file)
@@ -2906,7 +2906,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
                [relative] nstring *value_name;
                [value(2*strlen_m_term(value_name))] uint32 value_name_len;
                winreg_Type type;
-               [relative,subcontext(0),subcontext_size(data_length),flag(NDR_REMAINING)] DATA_BLOB *data;
+               [relative,subcontext(0),subcontext_size(data_length),flag(NDR_REMAINING|ndr_spoolss_PrinterEnumValues_align(r->type))] DATA_BLOB *data;
                [value(data ? data->length : 0)] uint32 data_length;
        } spoolss_PrinterEnumValues;
 
index 2fd9d95d2b99293326c3c2691098f84f1f31df21..d1e4b4157083a46f07f4abd47e67ea8d2788bb26 100644 (file)
@@ -1441,3 +1441,35 @@ _PUBLIC_ void ndr_print_spoolss_Time(struct ndr_print *ndr, const char *name, co
        ndr->depth--;
        talloc_free(str);
 }
+
+_PUBLIC_ uint32_t ndr_spoolss_PrinterEnumValues_align(enum winreg_Type type)
+{
+       switch(type) {
+       case REG_NONE:
+               return 0;
+       case REG_SZ:
+               return LIBNDR_FLAG_ALIGN2;
+       case REG_EXPAND_SZ:
+               return LIBNDR_FLAG_ALIGN2;
+       case REG_BINARY:
+               return 0;
+       case REG_DWORD:
+               return LIBNDR_FLAG_ALIGN4;
+       case REG_DWORD_BIG_ENDIAN:
+               return LIBNDR_FLAG_ALIGN4;
+       case REG_LINK:
+               return 0;
+       case REG_MULTI_SZ:
+               return LIBNDR_FLAG_ALIGN2;
+       case REG_RESOURCE_LIST:
+               return LIBNDR_FLAG_ALIGN2;
+       case REG_FULL_RESOURCE_DESCRIPTOR:
+               return LIBNDR_FLAG_ALIGN4;
+       case REG_RESOURCE_REQUIREMENTS_LIST:
+               return LIBNDR_FLAG_ALIGN2;
+       case REG_QWORD:
+               return LIBNDR_FLAG_ALIGN8;
+       }
+
+       return 0;
+}
index 9db187dc7d9cace69f275a13da7019334eae069a..c5938c00c867fe9a61f131a6395513d75d64e5f1 100644 (file)
@@ -52,6 +52,7 @@ void ndr_print_spoolss_security_descriptor(struct ndr_print *ndr, const char *na
 enum ndr_err_code ndr_pull_spoolss_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r);
 enum ndr_err_code ndr_push_spoolss_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r);
 _PUBLIC_ void ndr_print_spoolss_Time(struct ndr_print *ndr, const char *name, const struct spoolss_Time *r);
+_PUBLIC_ uint32_t ndr_spoolss_PrinterEnumValues_align(enum winreg_Type type);
 
 #undef _PRINTF_ATTRIBUTE
 #define _PRINTF_ATTRIBUTE(a1, a2)