1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * File test program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright © 2007-2018 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker * Copyright © 1997-2007 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker *
7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more
8*5e7646d2SAndroid Build Coastguard Worker * information.
9*5e7646d2SAndroid Build Coastguard Worker */
10*5e7646d2SAndroid Build Coastguard Worker
11*5e7646d2SAndroid Build Coastguard Worker /*
12*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
13*5e7646d2SAndroid Build Coastguard Worker */
14*5e7646d2SAndroid Build Coastguard Worker
15*5e7646d2SAndroid Build Coastguard Worker #include "string-private.h"
16*5e7646d2SAndroid Build Coastguard Worker #include "debug-private.h"
17*5e7646d2SAndroid Build Coastguard Worker #include "file.h"
18*5e7646d2SAndroid Build Coastguard Worker #include <stdlib.h>
19*5e7646d2SAndroid Build Coastguard Worker #include <time.h>
20*5e7646d2SAndroid Build Coastguard Worker #ifdef _WIN32
21*5e7646d2SAndroid Build Coastguard Worker # include <io.h>
22*5e7646d2SAndroid Build Coastguard Worker #else
23*5e7646d2SAndroid Build Coastguard Worker # include <unistd.h>
24*5e7646d2SAndroid Build Coastguard Worker #endif /* _WIN32 */
25*5e7646d2SAndroid Build Coastguard Worker #include <fcntl.h>
26*5e7646d2SAndroid Build Coastguard Worker
27*5e7646d2SAndroid Build Coastguard Worker
28*5e7646d2SAndroid Build Coastguard Worker /*
29*5e7646d2SAndroid Build Coastguard Worker * Local functions...
30*5e7646d2SAndroid Build Coastguard Worker */
31*5e7646d2SAndroid Build Coastguard Worker
32*5e7646d2SAndroid Build Coastguard Worker static int count_lines(cups_file_t *fp);
33*5e7646d2SAndroid Build Coastguard Worker static int random_tests(void);
34*5e7646d2SAndroid Build Coastguard Worker static int read_write_tests(int compression);
35*5e7646d2SAndroid Build Coastguard Worker
36*5e7646d2SAndroid Build Coastguard Worker
37*5e7646d2SAndroid Build Coastguard Worker /*
38*5e7646d2SAndroid Build Coastguard Worker * 'main()' - Main entry.
39*5e7646d2SAndroid Build Coastguard Worker */
40*5e7646d2SAndroid Build Coastguard Worker
41*5e7646d2SAndroid Build Coastguard Worker int /* O - Exit status */
main(int argc,char * argv[])42*5e7646d2SAndroid Build Coastguard Worker main(int argc, /* I - Number of command-line arguments */
43*5e7646d2SAndroid Build Coastguard Worker char *argv[]) /* I - Command-line arguments */
44*5e7646d2SAndroid Build Coastguard Worker {
45*5e7646d2SAndroid Build Coastguard Worker int status; /* Exit status */
46*5e7646d2SAndroid Build Coastguard Worker char filename[1024]; /* Filename buffer */
47*5e7646d2SAndroid Build Coastguard Worker cups_file_t *fp; /* File pointer */
48*5e7646d2SAndroid Build Coastguard Worker #ifndef _WIN32
49*5e7646d2SAndroid Build Coastguard Worker int fds[2]; /* Open file descriptors */
50*5e7646d2SAndroid Build Coastguard Worker cups_file_t *fdfile; /* File opened with cupsFileOpenFd() */
51*5e7646d2SAndroid Build Coastguard Worker #endif /* !_WIN32 */
52*5e7646d2SAndroid Build Coastguard Worker int count; /* Number of lines in file */
53*5e7646d2SAndroid Build Coastguard Worker
54*5e7646d2SAndroid Build Coastguard Worker
55*5e7646d2SAndroid Build Coastguard Worker if (argc == 1)
56*5e7646d2SAndroid Build Coastguard Worker {
57*5e7646d2SAndroid Build Coastguard Worker /*
58*5e7646d2SAndroid Build Coastguard Worker * Do uncompressed file tests...
59*5e7646d2SAndroid Build Coastguard Worker */
60*5e7646d2SAndroid Build Coastguard Worker
61*5e7646d2SAndroid Build Coastguard Worker status = read_write_tests(0);
62*5e7646d2SAndroid Build Coastguard Worker
63*5e7646d2SAndroid Build Coastguard Worker #ifdef HAVE_LIBZ
64*5e7646d2SAndroid Build Coastguard Worker /*
65*5e7646d2SAndroid Build Coastguard Worker * Do compressed file tests...
66*5e7646d2SAndroid Build Coastguard Worker */
67*5e7646d2SAndroid Build Coastguard Worker
68*5e7646d2SAndroid Build Coastguard Worker putchar('\n');
69*5e7646d2SAndroid Build Coastguard Worker
70*5e7646d2SAndroid Build Coastguard Worker status += read_write_tests(1);
71*5e7646d2SAndroid Build Coastguard Worker #endif /* HAVE_LIBZ */
72*5e7646d2SAndroid Build Coastguard Worker
73*5e7646d2SAndroid Build Coastguard Worker /*
74*5e7646d2SAndroid Build Coastguard Worker * Do uncompressed random I/O tests...
75*5e7646d2SAndroid Build Coastguard Worker */
76*5e7646d2SAndroid Build Coastguard Worker
77*5e7646d2SAndroid Build Coastguard Worker status += random_tests();
78*5e7646d2SAndroid Build Coastguard Worker
79*5e7646d2SAndroid Build Coastguard Worker #ifndef _WIN32
80*5e7646d2SAndroid Build Coastguard Worker /*
81*5e7646d2SAndroid Build Coastguard Worker * Test fdopen and close without reading...
82*5e7646d2SAndroid Build Coastguard Worker */
83*5e7646d2SAndroid Build Coastguard Worker
84*5e7646d2SAndroid Build Coastguard Worker pipe(fds);
85*5e7646d2SAndroid Build Coastguard Worker close(fds[1]);
86*5e7646d2SAndroid Build Coastguard Worker
87*5e7646d2SAndroid Build Coastguard Worker fputs("\ncupsFileOpenFd(fd, \"r\"): ", stdout);
88*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
89*5e7646d2SAndroid Build Coastguard Worker
90*5e7646d2SAndroid Build Coastguard Worker if ((fdfile = cupsFileOpenFd(fds[0], "r")) == NULL)
91*5e7646d2SAndroid Build Coastguard Worker {
92*5e7646d2SAndroid Build Coastguard Worker puts("FAIL");
93*5e7646d2SAndroid Build Coastguard Worker status ++;
94*5e7646d2SAndroid Build Coastguard Worker }
95*5e7646d2SAndroid Build Coastguard Worker else
96*5e7646d2SAndroid Build Coastguard Worker {
97*5e7646d2SAndroid Build Coastguard Worker /*
98*5e7646d2SAndroid Build Coastguard Worker * Able to open file, now close without reading. If we don't return
99*5e7646d2SAndroid Build Coastguard Worker * before the alarm fires, that is a failure and we will crash on the
100*5e7646d2SAndroid Build Coastguard Worker * alarm signal...
101*5e7646d2SAndroid Build Coastguard Worker */
102*5e7646d2SAndroid Build Coastguard Worker
103*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
104*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileClose(no read): ", stdout);
105*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
106*5e7646d2SAndroid Build Coastguard Worker
107*5e7646d2SAndroid Build Coastguard Worker alarm(5);
108*5e7646d2SAndroid Build Coastguard Worker cupsFileClose(fdfile);
109*5e7646d2SAndroid Build Coastguard Worker alarm(0);
110*5e7646d2SAndroid Build Coastguard Worker
111*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
112*5e7646d2SAndroid Build Coastguard Worker }
113*5e7646d2SAndroid Build Coastguard Worker #endif /* !_WIN32 */
114*5e7646d2SAndroid Build Coastguard Worker
115*5e7646d2SAndroid Build Coastguard Worker /*
116*5e7646d2SAndroid Build Coastguard Worker * Count lines in test file, rewind, then count again.
117*5e7646d2SAndroid Build Coastguard Worker */
118*5e7646d2SAndroid Build Coastguard Worker
119*5e7646d2SAndroid Build Coastguard Worker fputs("\ncupsFileOpen(\"testfile.txt\", \"r\"): ", stdout);
120*5e7646d2SAndroid Build Coastguard Worker
121*5e7646d2SAndroid Build Coastguard Worker if ((fp = cupsFileOpen("testfile.txt", "r")) == NULL)
122*5e7646d2SAndroid Build Coastguard Worker {
123*5e7646d2SAndroid Build Coastguard Worker puts("FAIL");
124*5e7646d2SAndroid Build Coastguard Worker status ++;
125*5e7646d2SAndroid Build Coastguard Worker }
126*5e7646d2SAndroid Build Coastguard Worker else
127*5e7646d2SAndroid Build Coastguard Worker {
128*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
129*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileGets: ", stdout);
130*5e7646d2SAndroid Build Coastguard Worker
131*5e7646d2SAndroid Build Coastguard Worker if ((count = count_lines(fp)) != 477)
132*5e7646d2SAndroid Build Coastguard Worker {
133*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got %d lines, expected 477)\n", count);
134*5e7646d2SAndroid Build Coastguard Worker status ++;
135*5e7646d2SAndroid Build Coastguard Worker }
136*5e7646d2SAndroid Build Coastguard Worker else
137*5e7646d2SAndroid Build Coastguard Worker {
138*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
139*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileRewind: ", stdout);
140*5e7646d2SAndroid Build Coastguard Worker
141*5e7646d2SAndroid Build Coastguard Worker if (cupsFileRewind(fp) != 0)
142*5e7646d2SAndroid Build Coastguard Worker {
143*5e7646d2SAndroid Build Coastguard Worker puts("FAIL");
144*5e7646d2SAndroid Build Coastguard Worker status ++;
145*5e7646d2SAndroid Build Coastguard Worker }
146*5e7646d2SAndroid Build Coastguard Worker else
147*5e7646d2SAndroid Build Coastguard Worker {
148*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
149*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileGets: ", stdout);
150*5e7646d2SAndroid Build Coastguard Worker
151*5e7646d2SAndroid Build Coastguard Worker if ((count = count_lines(fp)) != 477)
152*5e7646d2SAndroid Build Coastguard Worker {
153*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got %d lines, expected 477)\n", count);
154*5e7646d2SAndroid Build Coastguard Worker status ++;
155*5e7646d2SAndroid Build Coastguard Worker }
156*5e7646d2SAndroid Build Coastguard Worker else
157*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
158*5e7646d2SAndroid Build Coastguard Worker }
159*5e7646d2SAndroid Build Coastguard Worker }
160*5e7646d2SAndroid Build Coastguard Worker
161*5e7646d2SAndroid Build Coastguard Worker cupsFileClose(fp);
162*5e7646d2SAndroid Build Coastguard Worker }
163*5e7646d2SAndroid Build Coastguard Worker
164*5e7646d2SAndroid Build Coastguard Worker /*
165*5e7646d2SAndroid Build Coastguard Worker * Test path functions...
166*5e7646d2SAndroid Build Coastguard Worker */
167*5e7646d2SAndroid Build Coastguard Worker
168*5e7646d2SAndroid Build Coastguard Worker fputs("\ncupsFileFind: ", stdout);
169*5e7646d2SAndroid Build Coastguard Worker #ifdef _WIN32
170*5e7646d2SAndroid Build Coastguard Worker if (cupsFileFind("notepad.exe", "C:/WINDOWS", 1, filename, sizeof(filename)) &&
171*5e7646d2SAndroid Build Coastguard Worker cupsFileFind("notepad.exe", "C:/WINDOWS;C:/WINDOWS/SYSTEM32", 1, filename, sizeof(filename)))
172*5e7646d2SAndroid Build Coastguard Worker #else
173*5e7646d2SAndroid Build Coastguard Worker if (cupsFileFind("cat", "/bin", 1, filename, sizeof(filename)) &&
174*5e7646d2SAndroid Build Coastguard Worker cupsFileFind("cat", "/bin:/usr/bin", 1, filename, sizeof(filename)))
175*5e7646d2SAndroid Build Coastguard Worker #endif /* _WIN32 */
176*5e7646d2SAndroid Build Coastguard Worker printf("PASS (%s)\n", filename);
177*5e7646d2SAndroid Build Coastguard Worker else
178*5e7646d2SAndroid Build Coastguard Worker {
179*5e7646d2SAndroid Build Coastguard Worker puts("FAIL");
180*5e7646d2SAndroid Build Coastguard Worker status ++;
181*5e7646d2SAndroid Build Coastguard Worker }
182*5e7646d2SAndroid Build Coastguard Worker
183*5e7646d2SAndroid Build Coastguard Worker /*
184*5e7646d2SAndroid Build Coastguard Worker * Summarize the results and return...
185*5e7646d2SAndroid Build Coastguard Worker */
186*5e7646d2SAndroid Build Coastguard Worker
187*5e7646d2SAndroid Build Coastguard Worker if (!status)
188*5e7646d2SAndroid Build Coastguard Worker puts("\nALL TESTS PASSED!");
189*5e7646d2SAndroid Build Coastguard Worker else
190*5e7646d2SAndroid Build Coastguard Worker printf("\n%d TEST(S) FAILED!\n", status);
191*5e7646d2SAndroid Build Coastguard Worker }
192*5e7646d2SAndroid Build Coastguard Worker else
193*5e7646d2SAndroid Build Coastguard Worker {
194*5e7646d2SAndroid Build Coastguard Worker /*
195*5e7646d2SAndroid Build Coastguard Worker * Cat the filename on the command-line...
196*5e7646d2SAndroid Build Coastguard Worker */
197*5e7646d2SAndroid Build Coastguard Worker
198*5e7646d2SAndroid Build Coastguard Worker char line[8192]; /* Line from file */
199*5e7646d2SAndroid Build Coastguard Worker
200*5e7646d2SAndroid Build Coastguard Worker if ((fp = cupsFileOpen(argv[1], "r")) == NULL)
201*5e7646d2SAndroid Build Coastguard Worker {
202*5e7646d2SAndroid Build Coastguard Worker perror(argv[1]);
203*5e7646d2SAndroid Build Coastguard Worker status = 1;
204*5e7646d2SAndroid Build Coastguard Worker }
205*5e7646d2SAndroid Build Coastguard Worker else if (argc == 2)
206*5e7646d2SAndroid Build Coastguard Worker {
207*5e7646d2SAndroid Build Coastguard Worker status = 0;
208*5e7646d2SAndroid Build Coastguard Worker
209*5e7646d2SAndroid Build Coastguard Worker while (cupsFileGets(fp, line, sizeof(line)))
210*5e7646d2SAndroid Build Coastguard Worker puts(line);
211*5e7646d2SAndroid Build Coastguard Worker
212*5e7646d2SAndroid Build Coastguard Worker if (!cupsFileEOF(fp))
213*5e7646d2SAndroid Build Coastguard Worker perror(argv[1]);
214*5e7646d2SAndroid Build Coastguard Worker
215*5e7646d2SAndroid Build Coastguard Worker cupsFileClose(fp);
216*5e7646d2SAndroid Build Coastguard Worker }
217*5e7646d2SAndroid Build Coastguard Worker else
218*5e7646d2SAndroid Build Coastguard Worker {
219*5e7646d2SAndroid Build Coastguard Worker status = 0;
220*5e7646d2SAndroid Build Coastguard Worker ssize_t bytes;
221*5e7646d2SAndroid Build Coastguard Worker
222*5e7646d2SAndroid Build Coastguard Worker while ((bytes = cupsFileRead(fp, line, sizeof(line))) > 0)
223*5e7646d2SAndroid Build Coastguard Worker printf("%s: %d bytes\n", argv[1], (int)bytes);
224*5e7646d2SAndroid Build Coastguard Worker
225*5e7646d2SAndroid Build Coastguard Worker if (cupsFileEOF(fp))
226*5e7646d2SAndroid Build Coastguard Worker printf("%s: EOF\n", argv[1]);
227*5e7646d2SAndroid Build Coastguard Worker else
228*5e7646d2SAndroid Build Coastguard Worker perror(argv[1]);
229*5e7646d2SAndroid Build Coastguard Worker
230*5e7646d2SAndroid Build Coastguard Worker cupsFileClose(fp);
231*5e7646d2SAndroid Build Coastguard Worker }
232*5e7646d2SAndroid Build Coastguard Worker }
233*5e7646d2SAndroid Build Coastguard Worker
234*5e7646d2SAndroid Build Coastguard Worker return (status);
235*5e7646d2SAndroid Build Coastguard Worker }
236*5e7646d2SAndroid Build Coastguard Worker
237*5e7646d2SAndroid Build Coastguard Worker
238*5e7646d2SAndroid Build Coastguard Worker /*
239*5e7646d2SAndroid Build Coastguard Worker * 'count_lines()' - Count the number of lines in a file.
240*5e7646d2SAndroid Build Coastguard Worker */
241*5e7646d2SAndroid Build Coastguard Worker
242*5e7646d2SAndroid Build Coastguard Worker static int /* O - Number of lines */
count_lines(cups_file_t * fp)243*5e7646d2SAndroid Build Coastguard Worker count_lines(cups_file_t *fp) /* I - File to read from */
244*5e7646d2SAndroid Build Coastguard Worker {
245*5e7646d2SAndroid Build Coastguard Worker int count; /* Number of lines */
246*5e7646d2SAndroid Build Coastguard Worker char line[1024]; /* Line buffer */
247*5e7646d2SAndroid Build Coastguard Worker
248*5e7646d2SAndroid Build Coastguard Worker
249*5e7646d2SAndroid Build Coastguard Worker for (count = 0; cupsFileGets(fp, line, sizeof(line)); count ++);
250*5e7646d2SAndroid Build Coastguard Worker
251*5e7646d2SAndroid Build Coastguard Worker return (count);
252*5e7646d2SAndroid Build Coastguard Worker }
253*5e7646d2SAndroid Build Coastguard Worker
254*5e7646d2SAndroid Build Coastguard Worker
255*5e7646d2SAndroid Build Coastguard Worker /*
256*5e7646d2SAndroid Build Coastguard Worker * 'random_tests()' - Do random access tests.
257*5e7646d2SAndroid Build Coastguard Worker */
258*5e7646d2SAndroid Build Coastguard Worker
259*5e7646d2SAndroid Build Coastguard Worker static int /* O - Status */
random_tests(void)260*5e7646d2SAndroid Build Coastguard Worker random_tests(void)
261*5e7646d2SAndroid Build Coastguard Worker {
262*5e7646d2SAndroid Build Coastguard Worker int status, /* Status of tests */
263*5e7646d2SAndroid Build Coastguard Worker pass, /* Current pass */
264*5e7646d2SAndroid Build Coastguard Worker count, /* Number of records read */
265*5e7646d2SAndroid Build Coastguard Worker record, /* Current record */
266*5e7646d2SAndroid Build Coastguard Worker num_records; /* Number of records */
267*5e7646d2SAndroid Build Coastguard Worker off_t pos; /* Position in file */
268*5e7646d2SAndroid Build Coastguard Worker ssize_t expected; /* Expected position in file */
269*5e7646d2SAndroid Build Coastguard Worker cups_file_t *fp; /* File */
270*5e7646d2SAndroid Build Coastguard Worker char buffer[512]; /* Data buffer */
271*5e7646d2SAndroid Build Coastguard Worker
272*5e7646d2SAndroid Build Coastguard Worker
273*5e7646d2SAndroid Build Coastguard Worker /*
274*5e7646d2SAndroid Build Coastguard Worker * Run 4 passes, each time appending to a data file and then reopening the
275*5e7646d2SAndroid Build Coastguard Worker * file for reading to validate random records in the file.
276*5e7646d2SAndroid Build Coastguard Worker */
277*5e7646d2SAndroid Build Coastguard Worker
278*5e7646d2SAndroid Build Coastguard Worker for (status = 0, pass = 0; pass < 4; pass ++)
279*5e7646d2SAndroid Build Coastguard Worker {
280*5e7646d2SAndroid Build Coastguard Worker /*
281*5e7646d2SAndroid Build Coastguard Worker * cupsFileOpen(append)
282*5e7646d2SAndroid Build Coastguard Worker */
283*5e7646d2SAndroid Build Coastguard Worker
284*5e7646d2SAndroid Build Coastguard Worker printf("\ncupsFileOpen(append %d): ", pass);
285*5e7646d2SAndroid Build Coastguard Worker
286*5e7646d2SAndroid Build Coastguard Worker if ((fp = cupsFileOpen("testfile.dat", "a")) == NULL)
287*5e7646d2SAndroid Build Coastguard Worker {
288*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
289*5e7646d2SAndroid Build Coastguard Worker status ++;
290*5e7646d2SAndroid Build Coastguard Worker break;
291*5e7646d2SAndroid Build Coastguard Worker }
292*5e7646d2SAndroid Build Coastguard Worker else
293*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
294*5e7646d2SAndroid Build Coastguard Worker
295*5e7646d2SAndroid Build Coastguard Worker /*
296*5e7646d2SAndroid Build Coastguard Worker * cupsFileTell()
297*5e7646d2SAndroid Build Coastguard Worker */
298*5e7646d2SAndroid Build Coastguard Worker
299*5e7646d2SAndroid Build Coastguard Worker expected = 256 * (ssize_t)sizeof(buffer) * pass;
300*5e7646d2SAndroid Build Coastguard Worker
301*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileTell(): ", stdout);
302*5e7646d2SAndroid Build Coastguard Worker if ((pos = cupsFileTell(fp)) != (off_t)expected)
303*5e7646d2SAndroid Build Coastguard Worker {
304*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (" CUPS_LLFMT " instead of " CUPS_LLFMT ")\n",
305*5e7646d2SAndroid Build Coastguard Worker CUPS_LLCAST pos, CUPS_LLCAST expected);
306*5e7646d2SAndroid Build Coastguard Worker status ++;
307*5e7646d2SAndroid Build Coastguard Worker break;
308*5e7646d2SAndroid Build Coastguard Worker }
309*5e7646d2SAndroid Build Coastguard Worker else
310*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
311*5e7646d2SAndroid Build Coastguard Worker
312*5e7646d2SAndroid Build Coastguard Worker /*
313*5e7646d2SAndroid Build Coastguard Worker * cupsFileWrite()
314*5e7646d2SAndroid Build Coastguard Worker */
315*5e7646d2SAndroid Build Coastguard Worker
316*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileWrite(256 512-byte records): ", stdout);
317*5e7646d2SAndroid Build Coastguard Worker for (record = 0; record < 256; record ++)
318*5e7646d2SAndroid Build Coastguard Worker {
319*5e7646d2SAndroid Build Coastguard Worker memset(buffer, record, sizeof(buffer));
320*5e7646d2SAndroid Build Coastguard Worker if (cupsFileWrite(fp, buffer, sizeof(buffer)) < (ssize_t)sizeof(buffer))
321*5e7646d2SAndroid Build Coastguard Worker break;
322*5e7646d2SAndroid Build Coastguard Worker }
323*5e7646d2SAndroid Build Coastguard Worker
324*5e7646d2SAndroid Build Coastguard Worker if (record < 256)
325*5e7646d2SAndroid Build Coastguard Worker {
326*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d: %s)\n", record, strerror(errno));
327*5e7646d2SAndroid Build Coastguard Worker status ++;
328*5e7646d2SAndroid Build Coastguard Worker break;
329*5e7646d2SAndroid Build Coastguard Worker }
330*5e7646d2SAndroid Build Coastguard Worker else
331*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
332*5e7646d2SAndroid Build Coastguard Worker
333*5e7646d2SAndroid Build Coastguard Worker /*
334*5e7646d2SAndroid Build Coastguard Worker * cupsFileTell()
335*5e7646d2SAndroid Build Coastguard Worker */
336*5e7646d2SAndroid Build Coastguard Worker
337*5e7646d2SAndroid Build Coastguard Worker expected += 256 * (ssize_t)sizeof(buffer);
338*5e7646d2SAndroid Build Coastguard Worker
339*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileTell(): ", stdout);
340*5e7646d2SAndroid Build Coastguard Worker if ((pos = cupsFileTell(fp)) != (off_t)expected)
341*5e7646d2SAndroid Build Coastguard Worker {
342*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (" CUPS_LLFMT " instead of " CUPS_LLFMT ")\n",
343*5e7646d2SAndroid Build Coastguard Worker CUPS_LLCAST pos, CUPS_LLCAST expected);
344*5e7646d2SAndroid Build Coastguard Worker status ++;
345*5e7646d2SAndroid Build Coastguard Worker break;
346*5e7646d2SAndroid Build Coastguard Worker }
347*5e7646d2SAndroid Build Coastguard Worker else
348*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
349*5e7646d2SAndroid Build Coastguard Worker
350*5e7646d2SAndroid Build Coastguard Worker cupsFileClose(fp);
351*5e7646d2SAndroid Build Coastguard Worker
352*5e7646d2SAndroid Build Coastguard Worker /*
353*5e7646d2SAndroid Build Coastguard Worker * cupsFileOpen(read)
354*5e7646d2SAndroid Build Coastguard Worker */
355*5e7646d2SAndroid Build Coastguard Worker
356*5e7646d2SAndroid Build Coastguard Worker printf("\ncupsFileOpen(read %d): ", pass);
357*5e7646d2SAndroid Build Coastguard Worker
358*5e7646d2SAndroid Build Coastguard Worker if ((fp = cupsFileOpen("testfile.dat", "r")) == NULL)
359*5e7646d2SAndroid Build Coastguard Worker {
360*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
361*5e7646d2SAndroid Build Coastguard Worker status ++;
362*5e7646d2SAndroid Build Coastguard Worker break;
363*5e7646d2SAndroid Build Coastguard Worker }
364*5e7646d2SAndroid Build Coastguard Worker else
365*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
366*5e7646d2SAndroid Build Coastguard Worker
367*5e7646d2SAndroid Build Coastguard Worker /*
368*5e7646d2SAndroid Build Coastguard Worker * cupsFileSeek, cupsFileRead
369*5e7646d2SAndroid Build Coastguard Worker */
370*5e7646d2SAndroid Build Coastguard Worker
371*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileSeek(), cupsFileRead(): ", stdout);
372*5e7646d2SAndroid Build Coastguard Worker
373*5e7646d2SAndroid Build Coastguard Worker for (num_records = (pass + 1) * 256, count = (pass + 1) * 256, record = ((int)CUPS_RAND() & 65535) % num_records;
374*5e7646d2SAndroid Build Coastguard Worker count > 0;
375*5e7646d2SAndroid Build Coastguard Worker count --, record = (record + ((int)CUPS_RAND() & 31) - 16 + num_records) % num_records)
376*5e7646d2SAndroid Build Coastguard Worker {
377*5e7646d2SAndroid Build Coastguard Worker /*
378*5e7646d2SAndroid Build Coastguard Worker * The last record is always the first...
379*5e7646d2SAndroid Build Coastguard Worker */
380*5e7646d2SAndroid Build Coastguard Worker
381*5e7646d2SAndroid Build Coastguard Worker if (count == 1)
382*5e7646d2SAndroid Build Coastguard Worker record = 0;
383*5e7646d2SAndroid Build Coastguard Worker
384*5e7646d2SAndroid Build Coastguard Worker /*
385*5e7646d2SAndroid Build Coastguard Worker * Try reading the data for the specified record, and validate the
386*5e7646d2SAndroid Build Coastguard Worker * contents...
387*5e7646d2SAndroid Build Coastguard Worker */
388*5e7646d2SAndroid Build Coastguard Worker
389*5e7646d2SAndroid Build Coastguard Worker expected = (ssize_t)sizeof(buffer) * record;
390*5e7646d2SAndroid Build Coastguard Worker
391*5e7646d2SAndroid Build Coastguard Worker if ((pos = cupsFileSeek(fp, expected)) != expected)
392*5e7646d2SAndroid Build Coastguard Worker {
393*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (" CUPS_LLFMT " instead of " CUPS_LLFMT ")\n",
394*5e7646d2SAndroid Build Coastguard Worker CUPS_LLCAST pos, CUPS_LLCAST expected);
395*5e7646d2SAndroid Build Coastguard Worker status ++;
396*5e7646d2SAndroid Build Coastguard Worker break;
397*5e7646d2SAndroid Build Coastguard Worker }
398*5e7646d2SAndroid Build Coastguard Worker else
399*5e7646d2SAndroid Build Coastguard Worker {
400*5e7646d2SAndroid Build Coastguard Worker if (cupsFileRead(fp, buffer, sizeof(buffer)) != sizeof(buffer))
401*5e7646d2SAndroid Build Coastguard Worker {
402*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
403*5e7646d2SAndroid Build Coastguard Worker status ++;
404*5e7646d2SAndroid Build Coastguard Worker break;
405*5e7646d2SAndroid Build Coastguard Worker }
406*5e7646d2SAndroid Build Coastguard Worker else if ((buffer[0] & 255) != (record & 255) ||
407*5e7646d2SAndroid Build Coastguard Worker memcmp(buffer, buffer + 1, sizeof(buffer) - 1))
408*5e7646d2SAndroid Build Coastguard Worker {
409*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Bad Data - %d instead of %d)\n", buffer[0] & 255,
410*5e7646d2SAndroid Build Coastguard Worker record & 255);
411*5e7646d2SAndroid Build Coastguard Worker status ++;
412*5e7646d2SAndroid Build Coastguard Worker break;
413*5e7646d2SAndroid Build Coastguard Worker }
414*5e7646d2SAndroid Build Coastguard Worker }
415*5e7646d2SAndroid Build Coastguard Worker }
416*5e7646d2SAndroid Build Coastguard Worker
417*5e7646d2SAndroid Build Coastguard Worker if (count == 0)
418*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
419*5e7646d2SAndroid Build Coastguard Worker
420*5e7646d2SAndroid Build Coastguard Worker cupsFileClose(fp);
421*5e7646d2SAndroid Build Coastguard Worker }
422*5e7646d2SAndroid Build Coastguard Worker
423*5e7646d2SAndroid Build Coastguard Worker /*
424*5e7646d2SAndroid Build Coastguard Worker * Remove the test file...
425*5e7646d2SAndroid Build Coastguard Worker */
426*5e7646d2SAndroid Build Coastguard Worker
427*5e7646d2SAndroid Build Coastguard Worker unlink("testfile.dat");
428*5e7646d2SAndroid Build Coastguard Worker
429*5e7646d2SAndroid Build Coastguard Worker /*
430*5e7646d2SAndroid Build Coastguard Worker * Return the test status...
431*5e7646d2SAndroid Build Coastguard Worker */
432*5e7646d2SAndroid Build Coastguard Worker
433*5e7646d2SAndroid Build Coastguard Worker return (status);
434*5e7646d2SAndroid Build Coastguard Worker }
435*5e7646d2SAndroid Build Coastguard Worker
436*5e7646d2SAndroid Build Coastguard Worker
437*5e7646d2SAndroid Build Coastguard Worker /*
438*5e7646d2SAndroid Build Coastguard Worker * 'read_write_tests()' - Perform read/write tests.
439*5e7646d2SAndroid Build Coastguard Worker */
440*5e7646d2SAndroid Build Coastguard Worker
441*5e7646d2SAndroid Build Coastguard Worker static int /* O - Status */
read_write_tests(int compression)442*5e7646d2SAndroid Build Coastguard Worker read_write_tests(int compression) /* I - Use compression? */
443*5e7646d2SAndroid Build Coastguard Worker {
444*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
445*5e7646d2SAndroid Build Coastguard Worker cups_file_t *fp; /* File */
446*5e7646d2SAndroid Build Coastguard Worker int status; /* Exit status */
447*5e7646d2SAndroid Build Coastguard Worker char line[1024], /* Line from file */
448*5e7646d2SAndroid Build Coastguard Worker *value; /* Directive value from line */
449*5e7646d2SAndroid Build Coastguard Worker int linenum; /* Line number */
450*5e7646d2SAndroid Build Coastguard Worker unsigned char readbuf[8192], /* Read buffer */
451*5e7646d2SAndroid Build Coastguard Worker writebuf[8192]; /* Write buffer */
452*5e7646d2SAndroid Build Coastguard Worker int byte; /* Byte from file */
453*5e7646d2SAndroid Build Coastguard Worker ssize_t bytes; /* Number of bytes read/written */
454*5e7646d2SAndroid Build Coastguard Worker off_t length; /* Length of file */
455*5e7646d2SAndroid Build Coastguard Worker static const char *partial_line = "partial line";
456*5e7646d2SAndroid Build Coastguard Worker /* Partial line */
457*5e7646d2SAndroid Build Coastguard Worker
458*5e7646d2SAndroid Build Coastguard Worker
459*5e7646d2SAndroid Build Coastguard Worker /*
460*5e7646d2SAndroid Build Coastguard Worker * No errors so far...
461*5e7646d2SAndroid Build Coastguard Worker */
462*5e7646d2SAndroid Build Coastguard Worker
463*5e7646d2SAndroid Build Coastguard Worker status = 0;
464*5e7646d2SAndroid Build Coastguard Worker
465*5e7646d2SAndroid Build Coastguard Worker /*
466*5e7646d2SAndroid Build Coastguard Worker * Initialize the write buffer with random data...
467*5e7646d2SAndroid Build Coastguard Worker */
468*5e7646d2SAndroid Build Coastguard Worker
469*5e7646d2SAndroid Build Coastguard Worker CUPS_SRAND((unsigned)time(NULL));
470*5e7646d2SAndroid Build Coastguard Worker
471*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < (int)sizeof(writebuf); i ++)
472*5e7646d2SAndroid Build Coastguard Worker writebuf[i] = (unsigned char)CUPS_RAND();
473*5e7646d2SAndroid Build Coastguard Worker
474*5e7646d2SAndroid Build Coastguard Worker /*
475*5e7646d2SAndroid Build Coastguard Worker * cupsFileOpen(write)
476*5e7646d2SAndroid Build Coastguard Worker */
477*5e7646d2SAndroid Build Coastguard Worker
478*5e7646d2SAndroid Build Coastguard Worker printf("cupsFileOpen(write%s): ", compression ? " compressed" : "");
479*5e7646d2SAndroid Build Coastguard Worker
480*5e7646d2SAndroid Build Coastguard Worker fp = cupsFileOpen(compression ? "testfile.dat.gz" : "testfile.dat",
481*5e7646d2SAndroid Build Coastguard Worker compression ? "w9" : "w");
482*5e7646d2SAndroid Build Coastguard Worker if (fp)
483*5e7646d2SAndroid Build Coastguard Worker {
484*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
485*5e7646d2SAndroid Build Coastguard Worker
486*5e7646d2SAndroid Build Coastguard Worker /*
487*5e7646d2SAndroid Build Coastguard Worker * cupsFileCompression()
488*5e7646d2SAndroid Build Coastguard Worker */
489*5e7646d2SAndroid Build Coastguard Worker
490*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileCompression(): ", stdout);
491*5e7646d2SAndroid Build Coastguard Worker
492*5e7646d2SAndroid Build Coastguard Worker if (cupsFileCompression(fp) == compression)
493*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
494*5e7646d2SAndroid Build Coastguard Worker else
495*5e7646d2SAndroid Build Coastguard Worker {
496*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Got %d, expected %d)\n", cupsFileCompression(fp),
497*5e7646d2SAndroid Build Coastguard Worker compression);
498*5e7646d2SAndroid Build Coastguard Worker status ++;
499*5e7646d2SAndroid Build Coastguard Worker }
500*5e7646d2SAndroid Build Coastguard Worker
501*5e7646d2SAndroid Build Coastguard Worker /*
502*5e7646d2SAndroid Build Coastguard Worker * cupsFilePuts()
503*5e7646d2SAndroid Build Coastguard Worker */
504*5e7646d2SAndroid Build Coastguard Worker
505*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFilePuts(): ", stdout);
506*5e7646d2SAndroid Build Coastguard Worker
507*5e7646d2SAndroid Build Coastguard Worker if (cupsFilePuts(fp, "# Hello, World\n") > 0)
508*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
509*5e7646d2SAndroid Build Coastguard Worker else
510*5e7646d2SAndroid Build Coastguard Worker {
511*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
512*5e7646d2SAndroid Build Coastguard Worker status ++;
513*5e7646d2SAndroid Build Coastguard Worker }
514*5e7646d2SAndroid Build Coastguard Worker
515*5e7646d2SAndroid Build Coastguard Worker /*
516*5e7646d2SAndroid Build Coastguard Worker * cupsFilePrintf()
517*5e7646d2SAndroid Build Coastguard Worker */
518*5e7646d2SAndroid Build Coastguard Worker
519*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFilePrintf(): ", stdout);
520*5e7646d2SAndroid Build Coastguard Worker
521*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < 1000; i ++)
522*5e7646d2SAndroid Build Coastguard Worker if (cupsFilePrintf(fp, "TestLine %03d\n", i) < 0)
523*5e7646d2SAndroid Build Coastguard Worker break;
524*5e7646d2SAndroid Build Coastguard Worker
525*5e7646d2SAndroid Build Coastguard Worker if (i >= 1000)
526*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
527*5e7646d2SAndroid Build Coastguard Worker else
528*5e7646d2SAndroid Build Coastguard Worker {
529*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
530*5e7646d2SAndroid Build Coastguard Worker status ++;
531*5e7646d2SAndroid Build Coastguard Worker }
532*5e7646d2SAndroid Build Coastguard Worker
533*5e7646d2SAndroid Build Coastguard Worker /*
534*5e7646d2SAndroid Build Coastguard Worker * cupsFilePutChar()
535*5e7646d2SAndroid Build Coastguard Worker */
536*5e7646d2SAndroid Build Coastguard Worker
537*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFilePutChar(): ", stdout);
538*5e7646d2SAndroid Build Coastguard Worker
539*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < 256; i ++)
540*5e7646d2SAndroid Build Coastguard Worker if (cupsFilePutChar(fp, i) < 0)
541*5e7646d2SAndroid Build Coastguard Worker break;
542*5e7646d2SAndroid Build Coastguard Worker
543*5e7646d2SAndroid Build Coastguard Worker if (i >= 256)
544*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
545*5e7646d2SAndroid Build Coastguard Worker else
546*5e7646d2SAndroid Build Coastguard Worker {
547*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
548*5e7646d2SAndroid Build Coastguard Worker status ++;
549*5e7646d2SAndroid Build Coastguard Worker }
550*5e7646d2SAndroid Build Coastguard Worker
551*5e7646d2SAndroid Build Coastguard Worker /*
552*5e7646d2SAndroid Build Coastguard Worker * cupsFileWrite()
553*5e7646d2SAndroid Build Coastguard Worker */
554*5e7646d2SAndroid Build Coastguard Worker
555*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileWrite(): ", stdout);
556*5e7646d2SAndroid Build Coastguard Worker
557*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < 10000; i ++)
558*5e7646d2SAndroid Build Coastguard Worker if (cupsFileWrite(fp, (char *)writebuf, sizeof(writebuf)) < 0)
559*5e7646d2SAndroid Build Coastguard Worker break;
560*5e7646d2SAndroid Build Coastguard Worker
561*5e7646d2SAndroid Build Coastguard Worker if (i >= 10000)
562*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
563*5e7646d2SAndroid Build Coastguard Worker else
564*5e7646d2SAndroid Build Coastguard Worker {
565*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
566*5e7646d2SAndroid Build Coastguard Worker status ++;
567*5e7646d2SAndroid Build Coastguard Worker }
568*5e7646d2SAndroid Build Coastguard Worker
569*5e7646d2SAndroid Build Coastguard Worker /*
570*5e7646d2SAndroid Build Coastguard Worker * cupsFilePuts() with partial line...
571*5e7646d2SAndroid Build Coastguard Worker */
572*5e7646d2SAndroid Build Coastguard Worker
573*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFilePuts(\"partial line\"): ", stdout);
574*5e7646d2SAndroid Build Coastguard Worker
575*5e7646d2SAndroid Build Coastguard Worker if (cupsFilePuts(fp, partial_line) > 0)
576*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
577*5e7646d2SAndroid Build Coastguard Worker else
578*5e7646d2SAndroid Build Coastguard Worker {
579*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
580*5e7646d2SAndroid Build Coastguard Worker status ++;
581*5e7646d2SAndroid Build Coastguard Worker }
582*5e7646d2SAndroid Build Coastguard Worker
583*5e7646d2SAndroid Build Coastguard Worker /*
584*5e7646d2SAndroid Build Coastguard Worker * cupsFileTell()
585*5e7646d2SAndroid Build Coastguard Worker */
586*5e7646d2SAndroid Build Coastguard Worker
587*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileTell(): ", stdout);
588*5e7646d2SAndroid Build Coastguard Worker
589*5e7646d2SAndroid Build Coastguard Worker if ((length = cupsFileTell(fp)) == 81933283)
590*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
591*5e7646d2SAndroid Build Coastguard Worker else
592*5e7646d2SAndroid Build Coastguard Worker {
593*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (" CUPS_LLFMT " instead of 81933283)\n", CUPS_LLCAST length);
594*5e7646d2SAndroid Build Coastguard Worker status ++;
595*5e7646d2SAndroid Build Coastguard Worker }
596*5e7646d2SAndroid Build Coastguard Worker
597*5e7646d2SAndroid Build Coastguard Worker /*
598*5e7646d2SAndroid Build Coastguard Worker * cupsFileClose()
599*5e7646d2SAndroid Build Coastguard Worker */
600*5e7646d2SAndroid Build Coastguard Worker
601*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileClose(): ", stdout);
602*5e7646d2SAndroid Build Coastguard Worker
603*5e7646d2SAndroid Build Coastguard Worker if (!cupsFileClose(fp))
604*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
605*5e7646d2SAndroid Build Coastguard Worker else
606*5e7646d2SAndroid Build Coastguard Worker {
607*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
608*5e7646d2SAndroid Build Coastguard Worker status ++;
609*5e7646d2SAndroid Build Coastguard Worker }
610*5e7646d2SAndroid Build Coastguard Worker }
611*5e7646d2SAndroid Build Coastguard Worker else
612*5e7646d2SAndroid Build Coastguard Worker {
613*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
614*5e7646d2SAndroid Build Coastguard Worker status ++;
615*5e7646d2SAndroid Build Coastguard Worker }
616*5e7646d2SAndroid Build Coastguard Worker
617*5e7646d2SAndroid Build Coastguard Worker /*
618*5e7646d2SAndroid Build Coastguard Worker * cupsFileOpen(read)
619*5e7646d2SAndroid Build Coastguard Worker */
620*5e7646d2SAndroid Build Coastguard Worker
621*5e7646d2SAndroid Build Coastguard Worker fputs("\ncupsFileOpen(read): ", stdout);
622*5e7646d2SAndroid Build Coastguard Worker
623*5e7646d2SAndroid Build Coastguard Worker fp = cupsFileOpen(compression ? "testfile.dat.gz" : "testfile.dat", "r");
624*5e7646d2SAndroid Build Coastguard Worker if (fp)
625*5e7646d2SAndroid Build Coastguard Worker {
626*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
627*5e7646d2SAndroid Build Coastguard Worker
628*5e7646d2SAndroid Build Coastguard Worker /*
629*5e7646d2SAndroid Build Coastguard Worker * cupsFileGets()
630*5e7646d2SAndroid Build Coastguard Worker */
631*5e7646d2SAndroid Build Coastguard Worker
632*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileGets(): ", stdout);
633*5e7646d2SAndroid Build Coastguard Worker
634*5e7646d2SAndroid Build Coastguard Worker if (cupsFileGets(fp, line, sizeof(line)))
635*5e7646d2SAndroid Build Coastguard Worker {
636*5e7646d2SAndroid Build Coastguard Worker if (line[0] == '#')
637*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
638*5e7646d2SAndroid Build Coastguard Worker else
639*5e7646d2SAndroid Build Coastguard Worker {
640*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Got line \"%s\", expected comment line)\n", line);
641*5e7646d2SAndroid Build Coastguard Worker status ++;
642*5e7646d2SAndroid Build Coastguard Worker }
643*5e7646d2SAndroid Build Coastguard Worker }
644*5e7646d2SAndroid Build Coastguard Worker else
645*5e7646d2SAndroid Build Coastguard Worker {
646*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
647*5e7646d2SAndroid Build Coastguard Worker status ++;
648*5e7646d2SAndroid Build Coastguard Worker }
649*5e7646d2SAndroid Build Coastguard Worker
650*5e7646d2SAndroid Build Coastguard Worker /*
651*5e7646d2SAndroid Build Coastguard Worker * cupsFileCompression()
652*5e7646d2SAndroid Build Coastguard Worker */
653*5e7646d2SAndroid Build Coastguard Worker
654*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileCompression(): ", stdout);
655*5e7646d2SAndroid Build Coastguard Worker
656*5e7646d2SAndroid Build Coastguard Worker if (cupsFileCompression(fp) == compression)
657*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
658*5e7646d2SAndroid Build Coastguard Worker else
659*5e7646d2SAndroid Build Coastguard Worker {
660*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Got %d, expected %d)\n", cupsFileCompression(fp),
661*5e7646d2SAndroid Build Coastguard Worker compression);
662*5e7646d2SAndroid Build Coastguard Worker status ++;
663*5e7646d2SAndroid Build Coastguard Worker }
664*5e7646d2SAndroid Build Coastguard Worker
665*5e7646d2SAndroid Build Coastguard Worker /*
666*5e7646d2SAndroid Build Coastguard Worker * cupsFileGetConf()
667*5e7646d2SAndroid Build Coastguard Worker */
668*5e7646d2SAndroid Build Coastguard Worker
669*5e7646d2SAndroid Build Coastguard Worker linenum = 1;
670*5e7646d2SAndroid Build Coastguard Worker
671*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileGetConf(): ", stdout);
672*5e7646d2SAndroid Build Coastguard Worker
673*5e7646d2SAndroid Build Coastguard Worker for (i = 0, value = NULL; i < 1000; i ++)
674*5e7646d2SAndroid Build Coastguard Worker if (!cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
675*5e7646d2SAndroid Build Coastguard Worker break;
676*5e7646d2SAndroid Build Coastguard Worker else if (_cups_strcasecmp(line, "TestLine") || !value || atoi(value) != i ||
677*5e7646d2SAndroid Build Coastguard Worker linenum != (i + 2))
678*5e7646d2SAndroid Build Coastguard Worker break;
679*5e7646d2SAndroid Build Coastguard Worker
680*5e7646d2SAndroid Build Coastguard Worker if (i >= 1000)
681*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
682*5e7646d2SAndroid Build Coastguard Worker else if (line[0])
683*5e7646d2SAndroid Build Coastguard Worker {
684*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Line %d, directive \"%s\", value \"%s\")\n", linenum,
685*5e7646d2SAndroid Build Coastguard Worker line, value ? value : "(null)");
686*5e7646d2SAndroid Build Coastguard Worker status ++;
687*5e7646d2SAndroid Build Coastguard Worker }
688*5e7646d2SAndroid Build Coastguard Worker else
689*5e7646d2SAndroid Build Coastguard Worker {
690*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
691*5e7646d2SAndroid Build Coastguard Worker status ++;
692*5e7646d2SAndroid Build Coastguard Worker }
693*5e7646d2SAndroid Build Coastguard Worker
694*5e7646d2SAndroid Build Coastguard Worker /*
695*5e7646d2SAndroid Build Coastguard Worker * cupsFileGetChar()
696*5e7646d2SAndroid Build Coastguard Worker */
697*5e7646d2SAndroid Build Coastguard Worker
698*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileGetChar(): ", stdout);
699*5e7646d2SAndroid Build Coastguard Worker
700*5e7646d2SAndroid Build Coastguard Worker for (i = 0, byte = 0; i < 256; i ++)
701*5e7646d2SAndroid Build Coastguard Worker if ((byte = cupsFileGetChar(fp)) != i)
702*5e7646d2SAndroid Build Coastguard Worker break;
703*5e7646d2SAndroid Build Coastguard Worker
704*5e7646d2SAndroid Build Coastguard Worker if (i >= 256)
705*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
706*5e7646d2SAndroid Build Coastguard Worker else if (byte >= 0)
707*5e7646d2SAndroid Build Coastguard Worker {
708*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Got %d, expected %d)\n", byte, i);
709*5e7646d2SAndroid Build Coastguard Worker status ++;
710*5e7646d2SAndroid Build Coastguard Worker }
711*5e7646d2SAndroid Build Coastguard Worker else
712*5e7646d2SAndroid Build Coastguard Worker {
713*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
714*5e7646d2SAndroid Build Coastguard Worker status ++;
715*5e7646d2SAndroid Build Coastguard Worker }
716*5e7646d2SAndroid Build Coastguard Worker
717*5e7646d2SAndroid Build Coastguard Worker /*
718*5e7646d2SAndroid Build Coastguard Worker * cupsFileRead()
719*5e7646d2SAndroid Build Coastguard Worker */
720*5e7646d2SAndroid Build Coastguard Worker
721*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileRead(): ", stdout);
722*5e7646d2SAndroid Build Coastguard Worker
723*5e7646d2SAndroid Build Coastguard Worker for (i = 0, bytes = 0; i < 10000; i ++)
724*5e7646d2SAndroid Build Coastguard Worker if ((bytes = cupsFileRead(fp, (char *)readbuf, sizeof(readbuf))) < 0)
725*5e7646d2SAndroid Build Coastguard Worker break;
726*5e7646d2SAndroid Build Coastguard Worker else if (memcmp(readbuf, writebuf, sizeof(readbuf)))
727*5e7646d2SAndroid Build Coastguard Worker break;
728*5e7646d2SAndroid Build Coastguard Worker
729*5e7646d2SAndroid Build Coastguard Worker if (i >= 10000)
730*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
731*5e7646d2SAndroid Build Coastguard Worker else if (bytes > 0)
732*5e7646d2SAndroid Build Coastguard Worker {
733*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Pass %d, ", i);
734*5e7646d2SAndroid Build Coastguard Worker
735*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < (int)sizeof(readbuf); i ++)
736*5e7646d2SAndroid Build Coastguard Worker if (readbuf[i] != writebuf[i])
737*5e7646d2SAndroid Build Coastguard Worker break;
738*5e7646d2SAndroid Build Coastguard Worker
739*5e7646d2SAndroid Build Coastguard Worker printf("match failed at offset %d - got %02X, expected %02X)\n",
740*5e7646d2SAndroid Build Coastguard Worker i, readbuf[i], writebuf[i]);
741*5e7646d2SAndroid Build Coastguard Worker }
742*5e7646d2SAndroid Build Coastguard Worker else
743*5e7646d2SAndroid Build Coastguard Worker {
744*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
745*5e7646d2SAndroid Build Coastguard Worker status ++;
746*5e7646d2SAndroid Build Coastguard Worker }
747*5e7646d2SAndroid Build Coastguard Worker
748*5e7646d2SAndroid Build Coastguard Worker /*
749*5e7646d2SAndroid Build Coastguard Worker * cupsFileGetChar() with partial line...
750*5e7646d2SAndroid Build Coastguard Worker */
751*5e7646d2SAndroid Build Coastguard Worker
752*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileGetChar(partial line): ", stdout);
753*5e7646d2SAndroid Build Coastguard Worker
754*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < (int)strlen(partial_line); i ++)
755*5e7646d2SAndroid Build Coastguard Worker if ((byte = cupsFileGetChar(fp)) < 0)
756*5e7646d2SAndroid Build Coastguard Worker break;
757*5e7646d2SAndroid Build Coastguard Worker else if (byte != partial_line[i])
758*5e7646d2SAndroid Build Coastguard Worker break;
759*5e7646d2SAndroid Build Coastguard Worker
760*5e7646d2SAndroid Build Coastguard Worker if (!partial_line[i])
761*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
762*5e7646d2SAndroid Build Coastguard Worker else
763*5e7646d2SAndroid Build Coastguard Worker {
764*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got '%c', expected '%c')\n", byte, partial_line[i]);
765*5e7646d2SAndroid Build Coastguard Worker status ++;
766*5e7646d2SAndroid Build Coastguard Worker }
767*5e7646d2SAndroid Build Coastguard Worker
768*5e7646d2SAndroid Build Coastguard Worker /*
769*5e7646d2SAndroid Build Coastguard Worker * cupsFileTell()
770*5e7646d2SAndroid Build Coastguard Worker */
771*5e7646d2SAndroid Build Coastguard Worker
772*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileTell(): ", stdout);
773*5e7646d2SAndroid Build Coastguard Worker
774*5e7646d2SAndroid Build Coastguard Worker if ((length = cupsFileTell(fp)) == 81933283)
775*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
776*5e7646d2SAndroid Build Coastguard Worker else
777*5e7646d2SAndroid Build Coastguard Worker {
778*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (" CUPS_LLFMT " instead of 81933283)\n", CUPS_LLCAST length);
779*5e7646d2SAndroid Build Coastguard Worker status ++;
780*5e7646d2SAndroid Build Coastguard Worker }
781*5e7646d2SAndroid Build Coastguard Worker
782*5e7646d2SAndroid Build Coastguard Worker /*
783*5e7646d2SAndroid Build Coastguard Worker * cupsFileClose()
784*5e7646d2SAndroid Build Coastguard Worker */
785*5e7646d2SAndroid Build Coastguard Worker
786*5e7646d2SAndroid Build Coastguard Worker fputs("cupsFileClose(): ", stdout);
787*5e7646d2SAndroid Build Coastguard Worker
788*5e7646d2SAndroid Build Coastguard Worker if (!cupsFileClose(fp))
789*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
790*5e7646d2SAndroid Build Coastguard Worker else
791*5e7646d2SAndroid Build Coastguard Worker {
792*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
793*5e7646d2SAndroid Build Coastguard Worker status ++;
794*5e7646d2SAndroid Build Coastguard Worker }
795*5e7646d2SAndroid Build Coastguard Worker }
796*5e7646d2SAndroid Build Coastguard Worker else
797*5e7646d2SAndroid Build Coastguard Worker {
798*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", strerror(errno));
799*5e7646d2SAndroid Build Coastguard Worker status ++;
800*5e7646d2SAndroid Build Coastguard Worker }
801*5e7646d2SAndroid Build Coastguard Worker
802*5e7646d2SAndroid Build Coastguard Worker /*
803*5e7646d2SAndroid Build Coastguard Worker * Remove the test file...
804*5e7646d2SAndroid Build Coastguard Worker */
805*5e7646d2SAndroid Build Coastguard Worker
806*5e7646d2SAndroid Build Coastguard Worker if (!status)
807*5e7646d2SAndroid Build Coastguard Worker unlink(compression ? "testfile.dat.gz" : "testfile.dat");
808*5e7646d2SAndroid Build Coastguard Worker
809*5e7646d2SAndroid Build Coastguard Worker /*
810*5e7646d2SAndroid Build Coastguard Worker * Return the test status...
811*5e7646d2SAndroid Build Coastguard Worker */
812*5e7646d2SAndroid Build Coastguard Worker
813*5e7646d2SAndroid Build Coastguard Worker return (status);
814*5e7646d2SAndroid Build Coastguard Worker }
815