testprogs: add print_printer_dataw and dump_data to printlib.
authorGünther Deschner <gd@samba.org>
Thu, 4 Mar 2010 00:31:30 +0000 (01:31 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 4 Mar 2010 09:10:02 +0000 (10:10 +0100)
Guenther

testprogs/win32/spoolss/printlib.c
testprogs/win32/spoolss/printlib_proto.h

index f3541c85e19df4f7d39b8acf23dc3b751523bfa9..e0fb6e7a1e11f5a0ef342f78bbb0a230db42a3e5 100644 (file)
 #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,23 +1162,66 @@ 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");
@@ -1209,6 +1256,41 @@ void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE buffe
        }
 }
 
+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);
index 5a439995a144133d7057f2b9f046147073db631d..8e44d3be8611429c8b2616595cba4adc6e5577f0 100644 (file)
@@ -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)