xref: /freebsd/contrib/libarchive/libarchive/test/test_read_format_gtar_filename.c (revision b9128a37faafede823eb456aa65a11ac69997284)
1 /*-
2  * Copyright (c) 2011 Michihiro NAKAJIMA
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17  * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 #include "test.h"
26 
27 #include <locale.h>
28 
29 DEFINE_TEST(test_read_format_gtar_filename_eucJP_UTF8)
30 {
31 	const char *refname = "test_read_format_gtar_filename_eucjp.tar.Z";
32 	struct archive *a;
33 	struct archive_entry *ae;
34 
35 	/*
36 	 * Read eucJP filename in en_US.UTF-8 with "hdrcharset=eucJP" option.
37 	 */
38 	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
39 		skipping("en_US.UTF-8 locale not available on this system.");
40 		return;
41 	}
42 	extract_reference_file(refname);
43 
44 	assert((a = archive_read_new()) != NULL);
45 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
46 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
47 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=eucJP")) {
48 		skipping("This system cannot convert character-set"
49 		    " from eucJP to UTF-8.");
50 		goto cleanup;
51 	}
52 	assertEqualIntA(a, ARCHIVE_OK,
53 	    archive_read_open_filename(a, refname, 10240));
54 
55 	/* Verify regular file. */
56 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
57 	assertEqualString("\xe6\xbc\xa2\xe5\xad\x97.txt",
58 	    archive_entry_pathname(ae));
59 	assertEqualInt(8, archive_entry_size(ae));
60 
61 	/* Verify regular file. */
62 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
63 	assertEqualString("\xe8\xa1\xa8.txt", archive_entry_pathname(ae));
64 	assertEqualInt(4, archive_entry_size(ae));
65 	assertEqualInt(archive_entry_is_encrypted(ae), 0);
66 	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
67 
68 
69 	/* End of archive. */
70 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
71 
72 	/* Verify archive format. */
73 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
74 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
75 
76 	/* Close the archive. */
77 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
78 cleanup:
79 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
80 }
81 
82 DEFINE_TEST(test_read_format_gtar_filename_CP866_KOI8R)
83 {
84 	const char *refname = "test_read_format_gtar_filename_cp866.tar.Z";
85 	struct archive *a;
86 	struct archive_entry *ae;
87 
88 	/*
89 	 * Read CP866 filename in ru_RU.KOI8-R with "hdrcharset=CP866" option.
90 	 */
91 	if (NULL == setlocale(LC_ALL, "Russian_Russia.20866") &&
92 	    NULL == setlocale(LC_ALL, "ru_RU.KOI8-R")) {
93 		skipping("ru_RU.KOI8-R locale not available on this system.");
94 		return;
95 	}
96 	extract_reference_file(refname);
97 
98 	assert((a = archive_read_new()) != NULL);
99 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
100 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
101 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) {
102 		skipping("This system cannot convert character-set"
103 		    " from CP866 to KOI8-R.");
104 		goto cleanup;
105 	}
106 	assertEqualIntA(a, ARCHIVE_OK,
107 	    archive_read_open_filename(a, refname, 10240));
108 
109 	/* Verify regular file. */
110 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
111 	assertEqualString("\xf0\xf2\xe9\xf7\xe5\xf4",
112 	    archive_entry_pathname(ae));
113 	assertEqualInt(6, archive_entry_size(ae));
114 
115 	/* Verify regular file. */
116 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
117 	assertEqualString("\xd0\xd2\xc9\xd7\xc5\xd4",
118 	    archive_entry_pathname(ae));
119 	assertEqualInt(6, archive_entry_size(ae));
120 
121 
122 	/* End of archive. */
123 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
124 
125 	/* Verify archive format. */
126 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
127 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
128 
129 	/* Close the archive. */
130 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
131 cleanup:
132 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
133 }
134 
135 DEFINE_TEST(test_read_format_gtar_filename_CP866_UTF8)
136 {
137 	const char *refname = "test_read_format_gtar_filename_cp866.tar.Z";
138 	struct archive *a;
139 	struct archive_entry *ae;
140 
141 	/*
142 	 * Read CP866 filename in en_US.UTF-8 with "hdrcharset=CP866" option.
143 	 */
144 	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
145 		skipping("en_US.UTF-8 locale not available on this system.");
146 		return;
147 	}
148 	extract_reference_file(refname);
149 
150 	assert((a = archive_read_new()) != NULL);
151 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
152 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
153 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) {
154 		skipping("This system cannot convert character-set"
155 		    " from CP866 to UTF-8.");
156 		goto cleanup;
157 	}
158 	assertEqualIntA(a, ARCHIVE_OK,
159 	    archive_read_open_filename(a, refname, 10240));
160 
161 	/* Verify regular file. */
162 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
163 	assertEqualString("\xd0\x9f\xd0\xa0\xd0\x98\xd0\x92\xd0\x95\xd0\xa2",
164 	    archive_entry_pathname(ae));
165 	assertEqualInt(6, archive_entry_size(ae));
166 
167 	/* Verify regular file. */
168 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
169 	assertEqualString("\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82",
170 	    archive_entry_pathname(ae));
171 	assertEqualInt(6, archive_entry_size(ae));
172 
173 
174 	/* End of archive. */
175 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
176 
177 	/* Verify archive format. */
178 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
179 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
180 
181 	/* Close the archive. */
182 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
183 cleanup:
184 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
185 }
186 
187 DEFINE_TEST(test_read_format_gtar_filename_KOI8R_CP866)
188 {
189 	const char *refname = "test_read_format_gtar_filename_koi8r.tar.Z";
190 	struct archive *a;
191 	struct archive_entry *ae;
192 
193 	/*
194 	 * Read KOI8-R filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option.
195 	 */
196 	if (NULL == setlocale(LC_ALL, "Russian_Russia.866") &&
197 	    NULL == setlocale(LC_ALL, "ru_RU.CP866")) {
198 		skipping("ru_RU.CP866 locale not available on this system.");
199 		return;
200 	}
201 	extract_reference_file(refname);
202 
203 	assert((a = archive_read_new()) != NULL);
204 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
205 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
206 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) {
207 		skipping("This system cannot convert character-set"
208 		    " from KOI8-R to CP866.");
209 		goto cleanup;
210 	}
211 	assertEqualIntA(a, ARCHIVE_OK,
212 	    archive_read_open_filename(a, refname, 10240));
213 
214 	/* Verify regular file. */
215 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
216 	assertEqualString("\xaf\xe0\xa8\xa2\xa5\xe2",
217 	    archive_entry_pathname(ae));
218 	assertEqualInt(6, archive_entry_size(ae));
219 
220 	/* Verify regular file. */
221 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
222 	assertEqualString("\x8f\x90\x88\x82\x85\x92",
223 	    archive_entry_pathname(ae));
224 	assertEqualInt(6, archive_entry_size(ae));
225 
226 
227 	/* End of archive. */
228 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
229 
230 	/* Verify archive format. */
231 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
232 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
233 
234 	/* Close the archive. */
235 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
236 cleanup:
237 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
238 }
239 
240 DEFINE_TEST(test_read_format_gtar_filename_KOI8R_UTF8)
241 {
242 	const char *refname = "test_read_format_gtar_filename_koi8r.tar.Z";
243 	struct archive *a;
244 	struct archive_entry *ae;
245 
246 	/*
247 	 * Read KOI8-R filename in en_US.UTF-8 with "hdrcharset=KOI8-R" option.
248 	 */
249 	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
250 		skipping("en_US.UTF-8 locale not available on this system.");
251 		return;
252 	}
253 	extract_reference_file(refname);
254 
255 	assert((a = archive_read_new()) != NULL);
256 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
257 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
258 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) {
259 		skipping("This system cannot convert character-set"
260 		    " from KOI8-R to UTF-8.");
261 		goto cleanup;
262 	}
263 	assertEqualIntA(a, ARCHIVE_OK,
264 	    archive_read_open_filename(a, refname, 10240));
265 
266 	/* Verify regular file. */
267 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
268 	assertEqualString("\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82",
269 	    archive_entry_pathname(ae));
270 	assertEqualInt(6, archive_entry_size(ae));
271 
272 	/* Verify regular file. */
273 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
274 	assertEqualString("\xd0\x9f\xd0\xa0\xd0\x98\xd0\x92\xd0\x95\xd0\xa2",
275 	    archive_entry_pathname(ae));
276 	assertEqualInt(6, archive_entry_size(ae));
277 
278 
279 	/* End of archive. */
280 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
281 
282 	/* Verify archive format. */
283 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
284 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
285 
286 	/* Close the archive. */
287 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
288 cleanup:
289 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
290 }
291 
292 DEFINE_TEST(test_read_format_gtar_filename_eucJP_CP932)
293 {
294 	const char *refname = "test_read_format_gtar_filename_eucjp.tar.Z";
295 	struct archive *a;
296 	struct archive_entry *ae;
297 
298 	/*
299 	 * Read eucJP filename in CP932/SJIS with "hdrcharset=eucJP" option.
300 	 */
301 	if (NULL == setlocale(LC_ALL, "Japanese_Japan") &&
302 	    NULL == setlocale(LC_ALL, "ja_JP.SJIS")) {
303 		skipping("CP932 locale not available on this system.");
304 		return;
305 	}
306 	extract_reference_file(refname);
307 
308 	assert((a = archive_read_new()) != NULL);
309 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
310 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
311 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=eucJP")) {
312 		skipping("This system cannot convert character-set"
313 		    " from eucJP.");
314 		goto cleanup;
315 	}
316 	assertEqualIntA(a, ARCHIVE_OK,
317 	    archive_read_open_filename(a, refname, 10240));
318 
319 	/* Verify regular file. */
320 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
321 	assertEqualString("\x8a\xbf\x8e\x9a.txt", archive_entry_pathname(ae));
322 	assertEqualInt(8, archive_entry_size(ae));
323 
324 	/* Verify regular file. */
325 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
326 	assertEqualString("\x95\x5c.txt", archive_entry_pathname(ae));
327 	assertEqualInt(4, archive_entry_size(ae));
328 
329 
330 	/* End of archive. */
331 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
332 
333 	/* Verify archive format. */
334 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
335 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
336 
337 	/* Close the archive. */
338 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
339 cleanup:
340 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
341 }
342 
343 DEFINE_TEST(test_read_format_gtar_filename_CP866_CP1251)
344 {
345 	const char *refname = "test_read_format_gtar_filename_cp866.tar.Z";
346 	struct archive *a;
347 	struct archive_entry *ae;
348 
349 	/*
350 	 * Read CP866 filename in CP1251 with "hdrcharset=CP866" option.
351 	 */
352 	if (NULL == setlocale(LC_ALL, "Russian_Russia") &&
353 	    NULL == setlocale(LC_ALL, "ru_RU.CP1251")) {
354 		skipping("CP1251 locale not available on this system.");
355 		return;
356 	}
357 	extract_reference_file(refname);
358 
359 	assert((a = archive_read_new()) != NULL);
360 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
361 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
362 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) {
363 		skipping("This system cannot convert character-set"
364 		    " from CP866 to CP1251.");
365 		goto cleanup;
366 	}
367 	assertEqualIntA(a, ARCHIVE_OK,
368 	    archive_read_open_filename(a, refname, 10240));
369 
370 	/* Verify regular file. */
371 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
372 	assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2",
373 	    archive_entry_pathname(ae));
374 	assertEqualInt(6, archive_entry_size(ae));
375 
376 	/* Verify regular file. */
377 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
378 	assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2",
379 	    archive_entry_pathname(ae));
380 	assertEqualInt(6, archive_entry_size(ae));
381 
382 
383 	/* End of archive. */
384 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
385 
386 	/* Verify archive format. */
387 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
388 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
389 
390 	/* Close the archive. */
391 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
392 cleanup:
393 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
394 }
395 
396 /*
397  * This test only for Windows platform because other archiver
398  * applications on Windows translate CP1251 filenames into CP866
399  * filenames and store it in the gtar file and so we should read
400  * it by default on Windows.
401  */
402 DEFINE_TEST(test_read_format_gtar_filename_CP866_CP1251_win)
403 {
404 	const char *refname = "test_read_format_gtar_filename_cp866.tar.Z";
405 	struct archive *a;
406 	struct archive_entry *ae;
407 
408 	/*
409 	 * Read CP866 filename in CP1251 without "hdrcharset=CP866" option.
410 	 */
411 	if (NULL == setlocale(LC_ALL, "Russian_Russia")) {
412 		skipping("Russian_Russia locale not available on this system.");
413 		return;
414 	}
415 	extract_reference_file(refname);
416 
417 	assert((a = archive_read_new()) != NULL);
418 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
419 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
420 	assertEqualIntA(a, ARCHIVE_OK,
421 	    archive_read_open_filename(a, refname, 10240));
422 
423 	/* Verify regular file. */
424 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
425 	assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2",
426 	    archive_entry_pathname(ae));
427 	assertEqualInt(6, archive_entry_size(ae));
428 
429 	/* Verify regular file. */
430 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
431 	assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2",
432 	    archive_entry_pathname(ae));
433 	assertEqualInt(6, archive_entry_size(ae));
434 
435 
436 	/* End of archive. */
437 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
438 
439 	/* Verify archive format. */
440 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
441 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
442 
443 	/* Close the archive. */
444 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
445 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
446 }
447 
448 DEFINE_TEST(test_read_format_gtar_filename_KOI8R_CP1251)
449 {
450 	const char *refname = "test_read_format_gtar_filename_koi8r.tar.Z";
451 	struct archive *a;
452 	struct archive_entry *ae;
453 
454 	/*
455 	 * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option.
456 	 */
457 	if (NULL == setlocale(LC_ALL, "Russian_Russia") &&
458 	    NULL == setlocale(LC_ALL, "ru_RU.CP1251")) {
459 		skipping("CP1251 locale not available on this system.");
460 		return;
461 	}
462 	extract_reference_file(refname);
463 
464 	assert((a = archive_read_new()) != NULL);
465 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
466 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
467 	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) {
468 		skipping("This system cannot convert character-set"
469 		    " from KOI8-R to CP1251.");
470 		goto cleanup;
471 	}
472 	assertEqualIntA(a, ARCHIVE_OK,
473 	    archive_read_open_filename(a, refname, 10240));
474 
475 	/* Verify regular file. */
476 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
477 	assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2",
478 	    archive_entry_pathname(ae));
479 	assertEqualInt(6, archive_entry_size(ae));
480 
481 	/* Verify regular file. */
482 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
483 	assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2",
484 	    archive_entry_pathname(ae));
485 	assertEqualInt(6, archive_entry_size(ae));
486 
487 
488 	/* End of archive. */
489 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
490 
491 	/* Verify archive format. */
492 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
493 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
494 
495 	/* Close the archive. */
496 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
497 cleanup:
498 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
499 }
500 
501