add SetPrinterDataExW.exe.
[gd/win32-spoolss/.git] / GetJob.c
1 /******************************************************************
2  * SPOOLSS regression testing code for Samba print servers
3  *
4  *****************************************************************/
5
6 #include <windows.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include "printlib.h"
10
11 #define START_JOB       0
12 #define MAX_JOBS        100
13
14 int main (int argc, char* argv[])
15 {
16
17         HANDLE                  printer;
18         DWORD                   returned, needed, i;
19         PJOB_INFO_1             buffer1 = NULL;
20         PJOB_INFO_2             buffer2 = NULL;
21         DWORD                   dJob = 0;
22
23
24         if (argc < 3)
25         {
26                 fprintf (stderr, "useage: %s <printername> <job id>\n", argv[0]);
27                 exit (-1);
28         }
29         dJob = atoi(argv[2]);
30
31         /* open the printer */
32         if (!OpenPrinter (argv[1], &printer, NULL))
33         {
34                 fprintf (stderr, "Unable to open %s!\n", argv[1]);
35                 exit (-1);
36         }
37         else
38         {
39                 printf ("Printer [%s] opened successfully.\n\n", argv[1]);
40         }
41
42         /* INFO LEVEL 1 */
43         EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, 0, &needed, &returned);
44         if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
45         {
46                 if (needed != 0)
47                 {
48                         fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);
49                         exit (-1);
50                 }
51                 else
52                 {
53                         printf ("No jobs returned for [%s]\n", argv[1]);
54                         ClosePrinter (printer);
55                         exit (0);
56                 }
57         }
58
59         if ((buffer1 = (PJOB_INFO_1)malloc(needed)) == NULL)
60         {
61                 fprintf (stderr, "Unable to malloc memory for JOB_INFO_1 buffer!\n");
62                 exit (-1);
63         }
64         if (!EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, needed, &needed, &returned))
65         {
66                 fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n",
67                              argv[2], needed);
68                 exit (-1);
69         }
70
71         printf ("Job Info Level 1:\n");
72         for (i=0; i<returned; i++)
73         {
74                 print_job_info_1 (&buffer1[i]);
75         }
76         printf ("\n");
77         free (buffer1);
78
79
80         /* INFO LEVEL 2 */
81         GetJob(printer, dJob, 2, (LPBYTE)buffer2, 0, &needed);
82         if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
83         {
84                 if (needed != 0)
85                 {
86                         fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);
87                         exit (-1);
88                 }
89                 else
90                 {
91                         printf ("No jobs returned for [%s]\n", argv[1]);
92                         ClosePrinter (printer);
93                         exit (0);
94                 }
95         }
96
97         if ((buffer2 = (PJOB_INFO_2)malloc(needed)) == NULL)
98         {
99                 fprintf (stderr, "Unable to malloc memory for JOB_INFO_2 buffer!\n");
100                 exit (-1);
101         }
102         if (!GetJob(printer, dJob, 2, (LPBYTE)buffer2, needed, &needed))
103         {
104                 fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n",
105                              argv[2], needed);
106                 exit (-1);
107         }
108
109         printf ("Job Info Level 2:\n");
110         for (i=0; i<returned; i++)
111         {
112                 print_job_info_2 (&buffer2[i]);
113         }
114         printf ("\n");
115         free (buffer2);
116
117
118         /* close the printer */
119         if (!ClosePrinter(printer))
120         {
121                 fprintf (stderr, "Error closing printer!\n");
122                 exit (-1);
123         }
124         else
125         {
126                 printf ("Printer [%s] closed successfully.\n", argv[1]);
127         }
128
129         return 0;
130
131 }