Update README to say GPLv2 or later and remove references to bzr.
[jerry/slag.git] / win32 / spoolss / GetPrinterDriver.c
1 /******************************************************************\r
2  * SPOOLSS regression testing code for Samba print servers\r
3  * \r
4  *****************************************************************/\r
5 \r
6 #include <windows.h>\r
7 #include <stdio.h>\r
8 #include "printlib.h"\r
9 \r
10 #define NUM_ARCH        5\r
11 const LPTSTR arch [NUM_ARCH] = {        "Windows 4.0",\r
12                                                         "Windows NT x86",\r
13                                                         "Windows NT R4000",\r
14                                                         "Windows NT PowerPC",\r
15                                                         "Windows NT Alpha_AXP"  };\r
16 \r
17 \r
18 int main (int argc, char* argv[])\r
19 {\r
20         \r
21         HANDLE                  printer;\r
22         DWORD                   returned, needed, i;\r
23         PDRIVER_INFO_1  buffer1 = NULL;\r
24         PDRIVER_INFO_2  buffer2 = NULL;\r
25         PDRIVER_INFO_3  buffer3 = NULL;\r
26         PDRIVER_INFO_4  buffer4 = NULL;\r
27         PDRIVER_INFO_5  buffer5 = NULL;\r
28         PDRIVER_INFO_6  buffer6 = NULL;\r
29 \r
30         /* printf ("argc = %d\n", argc);*/\r
31 \r
32         if (argc < 2)\r
33         {\r
34                 fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
35                 exit (-1);\r
36         }\r
37 \r
38         /* open the printer */\r
39         if (!OpenPrinter (argv[1], &printer, NULL))\r
40         {\r
41                 PrintLastError();\r
42                 exit (-1);\r
43         }\r
44         else\r
45         {\r
46                 printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
47         }\r
48 \r
49         for (i=0; i<NUM_ARCH; i++)\r
50         {       \r
51                 printf ("Environment = [%s]\n\n", arch[i]);\r
52 \r
53                 /* INFO LEVEL 1 */\r
54                 GetPrinterDriver(printer, arch[i], 1, (LPBYTE)buffer1, 0, &needed);\r
55                 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
56                 {\r
57                         fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
58                         PrintLastError();\r
59                         continue;\r
60 \r
61                 }\r
62 \r
63                 if ((buffer1 = (LPBYTE)malloc(needed*1024)) == NULL)\r
64                 {\r
65                         fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_1 buffer!\n");\r
66                         exit (-1);\r
67                 }\r
68                 needed *= 1024;\r
69                 if (!GetPrinterDriver(printer, arch[i], 1, (LPBYTE)buffer1, needed, &returned))\r
70                 {\r
71                         fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
72                                      argv[1], needed);\r
73                         PrintLastError();\r
74                         continue;\r
75                 }\r
76 \r
77                 printf ("Printer Driver Info Level 1:\n");\r
78                 print_driver_info_1 (buffer1);\r
79                 free (buffer1);\r
80 \r
81                 /* INFO LEVEL 2 */\r
82                 GetPrinterDriver(printer, arch[i], 2, (LPBYTE)buffer2, 0, &needed);\r
83                 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
84                 {\r
85                         fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
86                         PrintLastError();\r
87                         continue;\r
88                 }\r
89 \r
90                 if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
91                 {\r
92                         fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_2 buffer!\n");\r
93                         exit (-1);\r
94                 }\r
95                 if (!GetPrinterDriver(printer, arch[i], 2, (LPBYTE)buffer2, needed, &returned))\r
96                 {\r
97                         fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
98                                      argv[1], needed);\r
99                         PrintLastError();\r
100                         continue;\r
101                 }\r
102 \r
103                 printf ("Printer Driver Info Level 2:\n");\r
104                 print_driver_info_2 (buffer2);\r
105                 free (buffer2);\r
106 \r
107 \r
108                 /* INFO LEVEL 3 */\r
109                 GetPrinterDriver(printer, arch[i], 3, (LPBYTE)buffer3, 0, &needed);\r
110                 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
111                 {\r
112                         fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
113                         PrintLastError();\r
114                         continue;\r
115                 }\r
116 \r
117                 if ((buffer3 = (LPBYTE)malloc(needed)) == NULL)\r
118                 {\r
119                 fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_3 buffer!\n");\r
120                         exit (-1);\r
121                 }\r
122                 if (!GetPrinterDriver(printer, arch[i], 3, (LPBYTE)buffer3, needed, &returned))\r
123                 {\r
124                         fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
125                                      argv[1], needed);\r
126                         PrintLastError();\r
127                         continue;\r
128                 }\r
129 \r
130                 printf ("Printer Driver Info Level 3:\n");\r
131                 print_driver_info_3 (buffer3);\r
132                 printf ("\n");\r
133                 free (buffer3);\r
134 \r
135                 /* INFO LEVEL 6 */\r
136                 GetPrinterDriver(printer, arch[i], 6, (LPBYTE)buffer6, 0, &needed);\r
137                 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
138                 {\r
139                         fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
140                         PrintLastError();\r
141                         continue;\r
142                 }\r
143 \r
144                 if ((buffer6 = (LPBYTE)malloc(needed)) == NULL)\r
145                 {\r
146                         fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_6 buffer!\n");\r
147                         exit (-1);\r
148                 }\r
149                 if (!GetPrinterDriver(printer, arch[i], 6, (LPBYTE)buffer6, needed, &returned))\r
150                 {\r
151                         fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
152                                      argv[1], needed);\r
153                         PrintLastError();\r
154                         continue;\r
155                 }\r
156 \r
157                 printf ("Printer Driver Info Level 6:\n");\r
158                 print_driver_info_6 (buffer6);\r
159                 printf ("\n");\r
160                 free (buffer6);\r
161 \r
162         }\r
163 \r
164 \r
165         /* close the printer */\r
166         if (!ClosePrinter(printer))\r
167         {\r
168                 PrintLastError();\r
169         }\r
170         else\r
171         {\r
172                 printf ("Printer [%s] closed successfully.\n", argv[1]);\r
173         }\r
174 \r
175         return 0;\r
176 \r
177 }