The branch, master has been updated
       via  a319eb9... testprogs: add test_PrinterDataW.
       via  55946dd... testprogs: use dump_data in dump_printer_data.
       via  74ba0b7... testprogs: add print_printer_dataw and dump_data to 
printlib.
       via  66b4463... testprogs: add some multibyte versions of PrinterData 
calls.
      from  6384f45... s3: Rerun genmsg after adding more strings.

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


- Log -----------------------------------------------------------------
commit a319eb9700bb6ae8aa217877181eaa37268e1c3b
Author: Günther Deschner <g...@samba.org>
Date:   Thu Mar 4 01:35:33 2010 +0100

    testprogs: add test_PrinterDataW.
    
    Guenther

commit 55946ddd1db070cc94f8208aaf8f0f10eeef30b6
Author: Günther Deschner <g...@samba.org>
Date:   Thu Mar 4 01:33:06 2010 +0100

    testprogs: use dump_data in dump_printer_data.
    
    Guenther

commit 74ba0b71891ce180079cc801e9fe11b4ea268e84
Author: Günther Deschner <g...@samba.org>
Date:   Thu Mar 4 01:31:30 2010 +0100

    testprogs: add print_printer_dataw and dump_data to printlib.
    
    Guenther

commit 66b4463fc1a8c9aa0caf12765c4899ee0058a2b3
Author: Günther Deschner <g...@samba.org>
Date:   Thu Mar 4 01:29:16 2010 +0100

    testprogs: add some multibyte versions of PrinterData calls.
    
    Guenther

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

Summary of changes:
 testprogs/win32/spoolss/printlib.c       |  120 ++++++++++++++----
 testprogs/win32/spoolss/printlib_proto.h |    1 +
 testprogs/win32/spoolss/spoolss.c        |  211 ++++++++++++++++++++++++++++++
 3 files changed, 309 insertions(+), 23 deletions(-)


Changeset truncated at 500 lines:

diff --git a/testprogs/win32/spoolss/printlib.c 
b/testprogs/win32/spoolss/printlib.c
index f3541c8..829ac40 100644
--- a/testprogs/win32/spoolss/printlib.c
+++ b/testprogs/win32/spoolss/printlib.c
@@ -24,6 +24,10 @@
 #include <assert.h>
 #include <sddl.h>
 
+#ifndef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#endif
+
 void print_devmode(DEVMODE *pDevModeIn)
 {
        if (pDevModeIn == NULL) {
@@ -1158,35 +1162,75 @@ LPSTR reg_type_str(DWORD type)
        }
 }
 
-void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE 
buffer, DWORD type)
+void print_asc(const BYTE *buf, DWORD len)
 {
-       DWORD i = 0;
-       LPSTR p = NULL;
-
-       if (keyname) {
-               printf("\tKey Name:\t%s\n", keyname);
+       int i;
+       for (i=0; i<len; i++) {
+               printf("%c", isprint(buf[i])?buf[i]:'.');
        }
+}
 
-       printf("\tValue Name:\t%s\n", valuename);
-       printf("\tSize:\t\t0x%x (%d)\n", size, size);
-       printf("\tType:\t\t%s\n", reg_type_str(type));
+static void dump_data(const BYTE *buf, int len)
+{
+       int i=0;
+       static const BYTE empty[16] = { 0, };
 
-       if (buffer == NULL || size == 0) {
-               return;
+       if (len<=0) return;
+
+       for (i=0; i<len;) {
+
+               if (i%16 == 0) {
+                       if ((i > 0) &&
+                           (len > i+16) &&
+                           (memcmp(&buf[i], &empty, 16) == 0))
+                       {
+                               i +=16;
+                               continue;
+                       }
+
+                       if (i<len)  {
+                               printf("[%04X] ",i);
+                       }
+               }
+
+               printf("%02x ", buf[i]);
+               i++;
+
+               if (i%8 == 0) printf("  ");
+               if (i%16 == 0) {
+                       print_asc(&buf[i-16],8); printf(" ");
+                       print_asc(&buf[i-8],8); printf("\n");
+               }
+       }
+
+       if (i%16) {
+               int n;
+               n = 16 - (i%16);
+               printf(" ");
+               if (n>8) printf(" ");
+               while (n--) printf("   ");
+               n = MIN(8,i%16);
+               print_asc(&buf[i-(i%16)],n); printf( " " );
+               n = (i%16) - n;
+               if (n>0) print_asc(&buf[i-n],n);
+               printf("\n");
        }
+}
+
+static void dump_printer_data(DWORD size, LPBYTE buffer, DWORD type)
+{
+       DWORD i = 0;
+       LPSTR p = NULL;
 
        switch (type) {
        case REG_SZ:
-               printf("\t\t");
-               for (i=0; i < size; i++) {
-                       printf("%c", buffer[i]);
-               }
-               printf("\n");
+               dump_data(buffer, size);
                break;
        case REG_MULTI_SZ:
+               dump_data(buffer, size);
                p = (LPSTR)buffer;
                while (p && *p) {
-                       printf("%s\n", p);
+                       printf("\t\t%s\n", p);
                        for (; *p; p = CharNext(p)) {
                                p = CharNext(p);
                        }
@@ -1197,18 +1241,48 @@ void print_printer_data(LPSTR keyname, LPSTR valuename, 
DWORD size, LPBYTE buffe
                printf("\t\t0x%08x\n", (DWORD)*buffer);
                break;
        case REG_BINARY:
-               for (i=0; i < size; i++) {
-                       printf("\t0x%x", buffer[i]);
-                       if (i%4 == 3) {
-                               printf("\n");
-                       }
-               }
+               dump_data(buffer, size);
                break;
        default:
                break;
        }
 }
 
+void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE 
buffer, DWORD type)
+{
+       if (keyname) {
+               printf("\tKey Name:\t%s\n", keyname);
+       }
+
+       printf("\tValue Name:\t%s\n", valuename);
+       printf("\tSize:\t\t0x%x (%d)\n", size, size);
+       printf("\tType:\t\t%s\n", reg_type_str(type));
+
+       if (buffer == NULL || size == 0) {
+               return;
+       }
+
+       dump_printer_data(size, buffer, type);
+}
+
+void print_printer_dataw(LPCWSTR keyname, LPCWSTR valuename, DWORD size, 
LPBYTE buffer, DWORD type)
+{
+       if (keyname) {
+               printf("\tKey Name:\t%ls\n", keyname);
+       }
+
+       printf("\tValue Name:\t%ls\n", valuename);
+       printf("\tSize:\t\t0x%x (%d)\n", size, size);
+       printf("\tType:\t\t%s\n", reg_type_str(type));
+
+       if (buffer == NULL || size == 0) {
+               return;
+       }
+
+       dump_printer_data(size, buffer, type);
+}
+
+
 void print_printer_enum_values(PRINTER_ENUM_VALUES *info)
 {
        print_printer_data(NULL, info->pValueName, info->cbData, info->pData, 
info->dwType);
diff --git a/testprogs/win32/spoolss/printlib_proto.h 
b/testprogs/win32/spoolss/printlib_proto.h
index 5a43999..8e44d3b 100644
--- a/testprogs/win32/spoolss/printlib_proto.h
+++ b/testprogs/win32/spoolss/printlib_proto.h
@@ -56,6 +56,7 @@ void print_doc_info_1(PDOC_INFO_1 info);
 void print_printer_keys(LPSTR buffer);
 LPSTR reg_type_str(DWORD type);
 void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE 
buffer, DWORD type);
+void print_printer_dataw(LPCWSTR keyname, LPCWSTR valuename, DWORD size, 
LPBYTE buffer, DWORD type);
 void print_printer_enum_values(PRINTER_ENUM_VALUES *info);
 #undef _PRINTF_ATTRIBUTE
 #define _PRINTF_ATTRIBUTE(a1, a2)
diff --git a/testprogs/win32/spoolss/spoolss.c 
b/testprogs/win32/spoolss/spoolss.c
index 7417b7f..c4c5017 100644
--- a/testprogs/win32/spoolss/spoolss.c
+++ b/testprogs/win32/spoolss/spoolss.c
@@ -988,6 +988,7 @@ static BOOL test_OnePrinter(struct torture_context *tctx,
        ret &= test_EnumPrinterDataEx(tctx, printername, "PrinterDriverData", 
handle, NULL, NULL);
        ret &= test_DeviceModes(tctx, printername, handle);
        ret &= test_PrinterData(tctx, printername, handle);
+       ret &= test_PrinterDataW(tctx, printername, handle);
        ret &= test_ClosePrinter(tctx, handle);
 
        return ret;
@@ -1247,6 +1248,60 @@ static BOOL test_GetPrinterDataEx(struct torture_context 
*tctx,
 /****************************************************************************
 ****************************************************************************/
 
+static BOOL test_GetPrinterDataExW(struct torture_context *tctx,
+                                  LPSTR servername,
+                                  LPCWSTR keyname,
+                                  LPCWSTR valuename,
+                                  HANDLE handle,
+                                  DWORD *type_p,
+                                  LPBYTE *buffer_p,
+                                  DWORD *size_p)
+{
+       LPBYTE buffer = NULL;
+       DWORD needed = 0;
+       DWORD type;
+       DWORD err = 0;
+       char tmp[1024];
+
+       torture_comment(tctx, "Testing GetPrinterDataExW(%ls - %ls)", keyname, 
valuename);
+
+       err = GetPrinterDataExW(handle, keyname, valuename, &type, NULL, 0, 
&needed);
+       if (err == ERROR_MORE_DATA) {
+               buffer = (LPBYTE)malloc(needed);
+               torture_assert(tctx, buffer, "malloc failed");
+               err = GetPrinterDataExW(handle, keyname, valuename, &type, 
buffer, needed, &needed);
+       }
+       if (err) {
+               sprintf(tmp, "GetPrinterDataExW(%ls) failed on [%s] (buffer 
size = %d), error: %s\n",
+                       valuename, servername, needed, errstr(err));
+               torture_fail(tctx, tmp);
+       }
+
+       if (tctx->print) {
+               print_printer_dataw(keyname, valuename, needed, buffer, type);
+       }
+
+       if (type_p) {
+               *type_p = type;
+       }
+
+       if (size_p) {
+               *size_p = needed;
+       }
+
+       if (buffer_p) {
+               *buffer_p = buffer;
+       } else {
+               free(buffer);
+       }
+
+       return TRUE;
+}
+
+
+/****************************************************************************
+****************************************************************************/
+
 static BOOL test_DeletePrinterDataEx(struct torture_context *tctx,
                                     LPSTR servername,
                                     LPSTR keyname,
@@ -1271,6 +1326,31 @@ static BOOL test_DeletePrinterDataEx(struct 
torture_context *tctx,
 /****************************************************************************
 ****************************************************************************/
 
+static BOOL test_DeletePrinterDataExW(struct torture_context *tctx,
+                                     LPSTR servername,
+                                     LPCWSTR keyname,
+                                     LPCWSTR valuename,
+                                     HANDLE handle)
+{
+       DWORD err = 0;
+       char tmp[1024];
+
+       torture_comment(tctx, "Testing DeletePrinterDataExW(%ls - %ls)", 
keyname, valuename);
+
+       err = DeletePrinterDataExW(handle, keyname, valuename);
+       if (err) {
+               sprintf(tmp, "DeletePrinterDataExW(%ls - %ls) failed on [%s], 
error: %s\n",
+                       keyname, valuename, servername, errstr(err));
+               torture_fail(tctx, tmp);
+       }
+
+       return TRUE;
+}
+
+
+/****************************************************************************
+****************************************************************************/
+
 static BOOL test_DeletePrinterKey(struct torture_context *tctx,
                                  LPSTR servername,
                                  LPSTR keyname,
@@ -1294,6 +1374,29 @@ static BOOL test_DeletePrinterKey(struct torture_context 
*tctx,
 /****************************************************************************
 ****************************************************************************/
 
+static BOOL test_DeletePrinterKeyW(struct torture_context *tctx,
+                                  LPSTR servername,
+                                  LPCWSTR keyname,
+                                  HANDLE handle)
+{
+       DWORD err = 0;
+       char tmp[1024];
+
+       torture_comment(tctx, "Testing DeletePrinterKeyW(%ls)", keyname);
+
+       err = DeletePrinterKeyW(handle, keyname);
+       if (err) {
+               sprintf(tmp, "DeletePrinterKeyW(%ls) failed on [%s], error: 
%s\n",
+                       keyname, servername, errstr(err));
+               torture_fail(tctx, tmp);
+       }
+
+       return TRUE;
+}
+
+/****************************************************************************
+****************************************************************************/
+
 static BOOL test_SetPrinterDataEx(struct torture_context *tctx,
                                  LPSTR servername,
                                  LPSTR keyname,
@@ -1321,6 +1424,34 @@ static BOOL test_SetPrinterDataEx(struct torture_context 
*tctx,
 /****************************************************************************
 ****************************************************************************/
 
+static BOOL test_SetPrinterDataExW(struct torture_context *tctx,
+                                  LPCSTR servername,
+                                  LPCWSTR keyname,
+                                  LPCWSTR valuename,
+                                  HANDLE handle,
+                                  DWORD type,
+                                  LPBYTE buffer,
+                                  DWORD offered)
+{
+       DWORD err = 0;
+       char tmp[1024];
+
+       torture_comment(tctx, "Testing SetPrinterDataExW(%ls - %ls)", keyname, 
valuename);
+
+       err = SetPrinterDataExW(handle, keyname, valuename, type, buffer, 
offered);
+       if (err) {
+               sprintf(tmp, "SetPrinterDataExW(%ls) failed on [%s] (buffer 
size = %d), error: %s\n",
+                       valuename, servername, offered, errstr(err));
+               torture_fail(tctx, tmp);
+       }
+
+       return TRUE;
+}
+
+
+/****************************************************************************
+****************************************************************************/
+
 static BOOL test_PrinterData_Server(struct torture_context *tctx,
                                    LPSTR servername,
                                    HANDLE handle)
@@ -1407,6 +1538,7 @@ static BOOL test_PrinterData(struct torture_context *tctx,
                        break;
                case REG_DWORD:
                        buffer = malloc(4);
+                       memcpy(buffer, &value, 4);
                        size = 4;
                        break;
                case REG_SZ:
@@ -1449,6 +1581,85 @@ static BOOL test_PrinterData(struct torture_context 
*tctx,
 /****************************************************************************
 ****************************************************************************/
 
+static BOOL test_PrinterDataW(struct torture_context *tctx,
+                             LPSTR printername,
+                             HANDLE handle)
+{
+       char tmp[1024];
+       LPCWSTR keyname = L"torture_key";
+       LPCWSTR valuename = L"torture_value";
+       BOOL ret = TRUE;
+       DWORD types[] = {
+               REG_SZ,
+               REG_DWORD,
+               REG_BINARY
+       };
+       DWORD value = 12345678;
+       LPSTR str = "abcdefghijklmnopqrstuvwxzy";
+       DWORD t, s;
+
+       for (t=0; t < ARRAY_SIZE(types); t++) {
+       for (s=0; s < strlen(str); s++) {
+
+               DWORD type, type_ex;
+               LPBYTE buffer, buffer_ex;
+               DWORD size, size_ex;
+
+               if (types[t] == REG_DWORD) {
+                       s = 0xffff;
+               }
+
+               switch (types[t]) {
+               case REG_BINARY:
+                       buffer = malloc(s);
+                       memcpy(buffer, str, s);
+                       size = s;
+                       break;
+               case REG_DWORD:
+                       buffer = malloc(4);
+                       memcpy(buffer, &value, 4);
+                       size = 4;
+                       break;
+               case REG_SZ:
+                       buffer = malloc(s);
+                       memcpy(buffer, str, s);
+                       size = s;
+                       break;
+               default:
+                       sprintf(tmp, "type %d untested\n", types[t]);
+                       torture_fail(tctx, tmp);
+                       break;
+               }
+
+               type = types[t];
+
+               torture_comment(tctx, "Testing PrinterDataW (type: %s, size: 
0x%08x)", reg_type_str(type), size);
+
+               torture_assert(tctx,
+                       test_SetPrinterDataExW(tctx, printername, keyname, 
valuename, handle, type, buffer, size),
+                       "failed to call SetPrinterDataExW");
+               torture_assert(tctx,
+                       test_GetPrinterDataExW(tctx, printername, keyname, 
valuename, handle, &type_ex, &buffer_ex, &size_ex),
+                       "failed to call GetPrinterDataExW");
+
+               if (!PrinterDataEqual(tctx, type_ex, type, size_ex, size, 
buffer_ex, buffer)) {
+                       torture_warning(tctx, "GetPrinterDataExW does not 
return the same info as we set with SetPrinterDataExW");
+                       ret = FALSE;
+               }
+               ret &= test_DeletePrinterDataExW(tctx, printername, keyname, 
valuename, handle);
+               ret &= test_DeletePrinterKeyW(tctx, printername, keyname, 
handle);
+
+               free(buffer);
+               free(buffer_ex);
+       }
+       }
+
+       return ret;
+}
+
+/****************************************************************************
+****************************************************************************/
+
 const char *get_string_param(const char *str)
 {
        const char *p;


-- 
Samba Shared Repository

Reply via email to