GetPrinter: allow to be called with level argument.
[gd/win32-spoolss/.git] / GetPrinter.c
1 /******************************************************************
2  * SPOOLSS regression testing code for Samba print servers
3  *
4  *****************************************************************/
5
6 #include <windows.h>
7 #include <stdio.h>
8 #include "printlib.h"
9
10 int main (int argc, char* argv[])
11 {
12         DWORD   needed, returned;
13         HANDLE  printer;
14         LPBYTE buffer = NULL;
15         DWORD level = 1;
16
17         if (argc < 2)
18         {
19                 fprintf (stderr, "useage: %s <printername> [level]\n", argv[0]);
20                 exit (-1);
21         }
22
23         if (argc == 3) {
24                 level = atoi(argv[2]);
25         }
26
27         /* open the printer */
28         if (!OpenPrinter (argv[1], &printer, NULL))
29         {
30                 fprintf (stderr, "Unable to open %s!\n", argv[1]);
31                 exit (-1);
32         }
33         else
34         {
35                 printf ("Printer [%s] opened successfully.\n\n", argv[1]);
36         }
37
38         needed = returned = 0;
39         GetPrinter(printer, level, buffer, 0, &needed);
40         if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
41         {
42                 if (needed != 0)
43                         fprintf (stderr, "Error GetPrinter Info Level %d for [%s] using NULL buffer.\n", level, argv[1]);
44                 else
45                         printf ("Info level %d returned no information\n", level);
46         }
47         else
48         {
49                 if ((buffer = malloc(needed)) == NULL)
50                 {
51                         fprintf (stderr, "Unable to malloc memory for buffer!\n");
52                         exit (-1);
53                 }
54                 if (!GetPrinter(printer, level, buffer, needed, &returned))
55                 {
56                         fprintf (stderr, "Error enumerating printers Info Level %d for [%s].\nSize of buffer = %d\n",
57                                         level, argv[1], needed);
58                 }
59
60                 print_printer_info_bylevel(level, buffer, 1);
61                 free (buffer);
62         }
63
64         /* close the printer */
65         if (!ClosePrinter(printer))
66         {
67                 fprintf (stderr, "Error closing printer!\n");
68                 exit (-1);
69         }
70         else
71         {
72                 printf ("Printer [%s] closed successfully.\n", argv[1]);
73         }
74
75         return 0;
76
77 }