spoolss: use ndr_push_spoolss_PrinterInfo2 hand-marshalled version (moves devmode...
authorGünther Deschner <gd@samba.org>
Sat, 13 Feb 2010 02:45:25 +0000 (03:45 +0100)
committerKarolin Seeger <kseeger@samba.org>
Fri, 19 Feb 2010 11:30:25 +0000 (12:30 +0100)
Guenther

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

index 712c9078e59668955c1de24427ed74dc6e7a8952..cca1b12680d936617b346bc804ff61b1dbd8431f 100644 (file)
@@ -990,242 +990,6 @@ _PUBLIC_ void ndr_print_spoolss_PrinterAttributes(struct ndr_print *ndr, const c
        ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo2 *r)
-{
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_push_align(ndr, 4));
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->servername));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printername));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sharename));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->portname));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->drivername));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->comment));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
-                       ndr->flags = _flags_save_spoolss_DeviceMode;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sepfile));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printprocessor));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->datatype));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
-                       ndr->flags = _flags_save_spoolss_security_descriptor;
-               }
-               NDR_CHECK(ndr_push_spoolss_PrinterAttributes(ndr, NDR_SCALARS, r->attributes));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->defaultpriority));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->starttime));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->untiltime));
-               NDR_CHECK(ndr_push_spoolss_PrinterStatus(ndr, NDR_SCALARS, r->status));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cjobs));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->averageppm));
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->servername) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->printername) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->sharename) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->portname) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->drivername) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->comment) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->location) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       if (r->devmode) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode));
-                               {
-                                       struct ndr_push *_ndr_devmode;
-                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_devmode, 0, -1));
-                                       NDR_CHECK(ndr_push_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
-                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_devmode, 0, -1));
-                               }
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode));
-                       }
-                       ndr->flags = _flags_save_spoolss_DeviceMode;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->sepfile) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->printprocessor) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->datatype) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->parameters) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       if (r->secdesc) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
-                               {
-                                       struct ndr_push *_ndr_secdesc;
-                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
-                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
-                               }
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
-                       }
-                       ndr->flags = _flags_save_spoolss_security_descriptor;
-               }
-       }
-       return NDR_ERR_SUCCESS;
-}
-
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PrinterInfo2 *r)
 {
        uint32_t _ptr_servername;
index bc0b104ef35a617ac6d8e4e195367760cfdff10d..a2487b283e2e9509395baaacbedcc72ad10afa29 100644 (file)
@@ -344,7 +344,7 @@ struct spoolss_PrinterInfo2 {
        uint32_t status;
        uint32_t cjobs;
        uint32_t averageppm;
-}/* [gensize,public] */;
+}/* [gensize,public,nopush] */;
 
 struct spoolss_PrinterInfo3 {
        struct spoolss_security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */
index b55def0846c52e6b96db849df5839f1a02a26381..0201cba61e37eb994cdc3834a856a31393fff728 100644 (file)
@@ -277,7 +277,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
                PRINTER_ATTRIBUTE_TS                    = 0x00008000
        } spoolss_PrinterAttributes;
 
-       typedef [public,gensize] struct {
+       typedef [public,gensize,nopush] struct {
                [relative] nstring *servername;
                [relative] nstring *printername;
                [relative] nstring *sharename;
index b86f434fa405df96fc8d2a9e15c1820a86c7af12..2ce347714b79338aa57d365f544be826618e33b4 100644 (file)
@@ -1276,3 +1276,239 @@ enum ndr_err_code ndr_push_spoolss_security_descriptor(struct ndr_push *ndr, int
        }
        return NDR_ERR_SUCCESS;
 }
+
+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo2 *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->servername));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printername));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sharename));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->portname));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->drivername));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->comment));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sepfile));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printprocessor));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->datatype));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters));
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
+               }
+               NDR_CHECK(ndr_push_spoolss_PrinterAttributes(ndr, NDR_SCALARS, r->attributes));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->defaultpriority));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->starttime));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->untiltime));
+               NDR_CHECK(ndr_push_spoolss_PrinterStatus(ndr, NDR_SCALARS, r->status));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cjobs));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->averageppm));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->servername) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->printername) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->sharename) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->portname) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->drivername) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->comment) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->location) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->sepfile) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->printprocessor) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->datatype) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->parameters) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters));
+                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters));
+                       }
+                       ndr->flags = _flags_save_string;
+               }
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       if (r->devmode) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode));
+                               {
+                                       struct ndr_push *_ndr_devmode;
+                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_devmode, 0, -1));
+                                       NDR_CHECK(ndr_push_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
+                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_devmode, 0, -1));
+                               }
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode));
+                       }
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
+               }
+               {
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       if (r->secdesc) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
+                               {
+                                       struct ndr_push *_ndr_secdesc;
+                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
+                                       NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
+                               }
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
+                       }
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}