The branch, master has been updated
       via  97ffd709f85ca0ecd101aac614fea19151394677 (commit)
       via  9b3d3e8aebac25c55b2bcfb3daf3ba3d7df9d280 (commit)
       via  f325c342031d11d6133d417bdf57d918f4f10981 (commit)
       via  0393c99302dc12f18f06db83201f096624682ea2 (commit)
      from  81aca44d30783d1c162498a257fc47cc44a649fb (commit)

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


- Log -----------------------------------------------------------------
commit 97ffd709f85ca0ecd101aac614fea19151394677
Author: Günther Deschner <[email protected]>
Date:   Mon Apr 13 15:42:32 2009 +0200

    s3-spoolss: use enumprinterdrivers_level() for level 3 enum.
    
    Guenther

commit 9b3d3e8aebac25c55b2bcfb3daf3ba3d7df9d280
Author: Günther Deschner <[email protected]>
Date:   Mon Apr 13 15:40:39 2009 +0200

    s3-spoolss: use enumprinterdrivers_level() for level 2 enum.
    
    Guenther

commit f325c342031d11d6133d417bdf57d918f4f10981
Author: Günther Deschner <[email protected]>
Date:   Mon Apr 13 15:31:52 2009 +0200

    s3-spoolss: use enumprinterdrivers_level() for level 1 enum.
    
    Guenther

commit 0393c99302dc12f18f06db83201f096624682ea2
Author: Günther Deschner <[email protected]>
Date:   Mon Apr 13 15:27:55 2009 +0200

    s3-spoolss: add generic enumprinterdrivers_level function.
    
    Guenther

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

Summary of changes:
 source3/rpc_server/srv_spoolss_nt.c |  197 +++++++++--------------------------
 1 files changed, 51 insertions(+), 146 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srv_spoolss_nt.c 
b/source3/rpc_server/srv_spoolss_nt.c
index 718f69f..faa155d 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -6609,14 +6609,15 @@ WERROR _spoolss_SetJob(pipes_struct *p,
 }
 
 /****************************************************************************
- Enumerates all printer drivers at level 1.
+ Enumerates all printer drivers by level.
 ****************************************************************************/
 
-static WERROR enumprinterdrivers_level1(TALLOC_CTX *mem_ctx,
-                                       const char *servername,
-                                       const char *architecture,
-                                       union spoolss_DriverInfo **info_p,
-                                       uint32_t *count)
+static WERROR enumprinterdrivers_level(TALLOC_CTX *mem_ctx,
+                                      const char *servername,
+                                      const char *architecture,
+                                      uint32_t level,
+                                      union spoolss_DriverInfo **info_p,
+                                      uint32_t *count_p)
 {
        int i;
        int ndrivers;
@@ -6624,9 +6625,11 @@ static WERROR enumprinterdrivers_level1(TALLOC_CTX 
*mem_ctx,
        fstring *list = NULL;
        NT_PRINTER_DRIVER_INFO_LEVEL driver;
        union spoolss_DriverInfo *info = NULL;
+       uint32_t count = 0;
        WERROR result = WERR_OK;
 
-       *count = 0;
+       *count_p = 0;
+       *info_p = NULL;
 
        for (version=0; version<DRIVER_MAX_VERSION; version++) {
                list = NULL;
@@ -6642,7 +6645,7 @@ static WERROR enumprinterdrivers_level1(TALLOC_CTX 
*mem_ctx,
                if (ndrivers != 0) {
                        info = TALLOC_REALLOC_ARRAY(mem_ctx, info,
                                                    union spoolss_DriverInfo,
-                                                   *count + ndrivers);
+                                                   count + ndrivers);
                        if (!info) {
                                DEBUG(0,("enumprinterdrivers_level1: "
                                        "failed to enlarge driver info 
buffer!\n"));
@@ -6659,9 +6662,26 @@ static WERROR enumprinterdrivers_level1(TALLOC_CTX 
*mem_ctx,
                        if (!W_ERROR_IS_OK(result)) {
                                goto out;
                        }
-                       result = fill_printer_driver_info1(info, 
&info[*count+i].info1,
-                                                          &driver, servername,
-                                                          architecture);
+
+                       switch (level) {
+                       case 1:
+                               result = fill_printer_driver_info1(info, 
&info[count+i].info1,
+                                                                  &driver, 
servername,
+                                                                  
architecture);
+                               break;
+                       case 2:
+                               result = fill_printer_driver_info2(info, 
&info[count+i].info2,
+                                                                  &driver, 
servername);
+                               break;
+                       case 3:
+                               result = fill_printer_driver_info3(info, 
&info[count+i].info3,
+                                                                  &driver, 
servername);
+                               break;
+                       default:
+                               result = WERR_UNKNOWN_LEVEL;
+                               break;
+                       }
+
                        if (!W_ERROR_IS_OK(result)) {
                                free_a_printer_driver(driver, 3);
                                goto out;
@@ -6669,7 +6689,7 @@ static WERROR enumprinterdrivers_level1(TALLOC_CTX 
*mem_ctx,
                        free_a_printer_driver(driver, 3);
                }
 
-               *count += ndrivers;
+               count += ndrivers;
                SAFE_FREE(list);
        }
 
@@ -6678,91 +6698,41 @@ static WERROR enumprinterdrivers_level1(TALLOC_CTX 
*mem_ctx,
 
        if (!W_ERROR_IS_OK(result)) {
                TALLOC_FREE(info);
-               *count = 0;
                return result;
        }
 
        *info_p = info;
+       *count_p = count;
 
        return WERR_OK;
 }
 
 /****************************************************************************
- Enumerates all printer drivers at level 2.
+ Enumerates all printer drivers at level 1.
 ****************************************************************************/
 
-static WERROR enumprinterdrivers_level2(TALLOC_CTX *mem_ctx,
+static WERROR enumprinterdrivers_level1(TALLOC_CTX *mem_ctx,
                                        const char *servername,
                                        const char *architecture,
                                        union spoolss_DriverInfo **info_p,
                                        uint32_t *count)
 {
-       int i;
-       int ndrivers;
-       uint32_t version;
-       fstring *list = NULL;
-       NT_PRINTER_DRIVER_INFO_LEVEL driver;
-       union spoolss_DriverInfo *info = NULL;
-       WERROR result = WERR_OK;
-
-       *count = 0;
-
-       for (version=0; version<DRIVER_MAX_VERSION; version++) {
-               list = NULL;
-               ndrivers = get_ntdrivers(&list, architecture, version);
-               DEBUGADD(4,("we have:[%d] drivers in environment [%s] and 
version [%d]\n",
-                       ndrivers, architecture, version));
-
-               if (ndrivers == -1) {
-                       result = WERR_NOMEM;
-                       goto out;
-               }
-
-               if (ndrivers != 0) {
-                       info = TALLOC_REALLOC_ARRAY(mem_ctx, info,
-                                                   union spoolss_DriverInfo,
-                                                   *count + ndrivers);
-                       if (!info) {
-                               DEBUG(0,("enumprinterdrivers_level2: "
-                                       "failed to enlarge driver info 
buffer!\n"));
-                               result = WERR_NOMEM;
-                               goto out;
-                       }
-               }
-
-               for (i=0; i<ndrivers; i++) {
-                       DEBUGADD(5,("\tdriver: [%s]\n", list[i]));
-                       ZERO_STRUCT(driver);
-                       result = get_a_printer_driver(&driver, 3, list[i],
-                                                     architecture, version);
-                       if (!W_ERROR_IS_OK(result)) {
-                               goto out;
-                       }
-                       result = fill_printer_driver_info2(info, 
&info[*count+i].info2,
-                                                          &driver, servername);
-                       if (!W_ERROR_IS_OK(result)) {
-                               free_a_printer_driver(driver, 3);
-                               goto out;
-                       }
-                       free_a_printer_driver(driver, 3);
-               }
-
-               *count += ndrivers;
-               SAFE_FREE(list);
-       }
-
- out:
-       SAFE_FREE(list);
-
-       if (!W_ERROR_IS_OK(result)) {
-               TALLOC_FREE(info);
-               *count = 0;
-               return result;
-       }
+       return enumprinterdrivers_level(mem_ctx, servername, architecture, 1,
+                                       info_p, count);
+}
 
-       *info_p = info;
+/****************************************************************************
+ Enumerates all printer drivers at level 2.
+****************************************************************************/
 
-       return WERR_OK;
+static WERROR enumprinterdrivers_level2(TALLOC_CTX *mem_ctx,
+                                       const char *servername,
+                                       const char *architecture,
+                                       union spoolss_DriverInfo **info_p,
+                                       uint32_t *count)
+{
+       return enumprinterdrivers_level(mem_ctx, servername, architecture, 2,
+                                       info_p, count);
 }
 
 /****************************************************************************
@@ -6775,73 +6745,8 @@ static WERROR enumprinterdrivers_level3(TALLOC_CTX 
*mem_ctx,
                                        union spoolss_DriverInfo **info_p,
                                        uint32_t *count)
 {
-       int i;
-       int ndrivers;
-       uint32_t version;
-       fstring *list = NULL;
-       union spoolss_DriverInfo *info = NULL;
-       NT_PRINTER_DRIVER_INFO_LEVEL driver;
-       WERROR result = WERR_OK;
-
-       *count = 0;
-
-       for (version=0; version<DRIVER_MAX_VERSION; version++) {
-               list = NULL;
-               ndrivers = get_ntdrivers(&list, architecture, version);
-               DEBUGADD(4,("we have:[%d] drivers in environment [%s] and 
version [%d]\n",
-                       ndrivers, architecture, version));
-
-               if (ndrivers == -1) {
-                       result = WERR_NOMEM;
-                       goto out;
-               }
-
-               if (ndrivers != 0) {
-                       info = TALLOC_REALLOC_ARRAY(mem_ctx, info,
-                                                   union spoolss_DriverInfo,
-                                                   *count + ndrivers);
-                       if (!info) {
-                               DEBUG(0,("enumprinterdrivers_level3: "
-                                       "failed to enlarge driver info 
buffer!\n"));
-                               result = WERR_NOMEM;
-                               goto out;
-                       }
-               }
-
-               for (i=0; i<ndrivers; i++) {
-                       DEBUGADD(5,("\tdriver: [%s]\n", list[i]));
-                       ZERO_STRUCT(driver);
-                       result = get_a_printer_driver(&driver, 3, list[i],
-                                                     architecture, version);
-                       if (!W_ERROR_IS_OK(result)) {
-                               goto out;
-                       }
-                       result = fill_printer_driver_info3(info, 
&info[*count+i].info3,
-                                                          &driver, servername);
-                       if (!W_ERROR_IS_OK(result)) {
-                               free_a_printer_driver(driver, 3);
-                               goto out;
-                       }
-
-                       free_a_printer_driver(driver, 3);
-               }
-
-               *count += ndrivers;
-               SAFE_FREE(list);
-       }
-
- out:
-       SAFE_FREE(list);
-
-       if (!W_ERROR_IS_OK(result)) {
-               TALLOC_FREE(info);
-               *count = 0;
-               return result;
-       }
-
-       *info_p = info;
-
-       return WERR_OK;
+       return enumprinterdrivers_level(mem_ctx, servername, architecture, 3,
+                                       info_p, count);
 }
 
 /****************************************************************


-- 
Samba Shared Repository

Reply via email to