1231200Smm/*-
2231200Smm * Copyright (c) 2011 Michihiro NAKAJIMA
3231200Smm * All rights reserved.
4231200Smm *
5231200Smm * Redistribution and use in source and binary forms, with or without
6231200Smm * modification, are permitted provided that the following conditions
7231200Smm * are met:
8231200Smm * 1. Redistributions of source code must retain the above copyright
9231200Smm *    notice, this list of conditions and the following disclaimer.
10231200Smm * 2. Redistributions in binary form must reproduce the above copyright
11231200Smm *    notice, this list of conditions and the following disclaimer in the
12231200Smm *    documentation and/or other materials provided with the distribution.
13231200Smm *
14231200Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15231200Smm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16231200Smm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17231200Smm * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18231200Smm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19231200Smm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20231200Smm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21231200Smm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22231200Smm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23231200Smm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24231200Smm */
25231200Smm#include "test.h"
26231200Smm__FBSDID("$FreeBSD");
27231200Smm
28231200Smm#include <locale.h>
29231200Smm
30231200Smmstatic void
31231200Smmtest_read_format_cpio_filename_eucJP_UTF8(const char *refname)
32231200Smm{
33231200Smm	struct archive *a;
34231200Smm	struct archive_entry *ae;
35231200Smm
36231200Smm	/*
37231200Smm	 * Read eucJP filename in en_US.UTF-8 with "hdrcharset=eucJP" option.
38231200Smm	 */
39231200Smm	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
40231200Smm		skipping("en_US.UTF-8 locale not available on this system.");
41231200Smm		return;
42231200Smm	}
43231200Smm
44231200Smm	assert((a = archive_read_new()) != NULL);
45231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
46231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
47231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=eucJP")) {
48231200Smm		skipping("This system cannot convert character-set"
49231200Smm		    " from eucJP to UTF-8.");
50231200Smm		goto cleanup;
51231200Smm	}
52231200Smm	assertEqualIntA(a, ARCHIVE_OK,
53231200Smm	    archive_read_open_filename(a, refname, 10240));
54231200Smm
55231200Smm	/* Verify regular file. */
56231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
57231200Smm	assertEqualString("\xe6\xbc\xa2\xe5\xad\x97.txt",
58231200Smm	    archive_entry_pathname(ae));
59231200Smm	assertEqualInt(8, archive_entry_size(ae));
60231200Smm
61231200Smm	/* Verify regular file. */
62231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
63231200Smm	assertEqualString("\xe8\xa1\xa8.txt", archive_entry_pathname(ae));
64231200Smm	assertEqualInt(4, archive_entry_size(ae));
65231200Smm
66231200Smm
67231200Smm	/* End of archive. */
68231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
69231200Smm
70231200Smm	/* Verify archive format. */
71248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
72231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
73231200Smm
74231200Smm	/* Close the archive. */
75231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
76231200Smmcleanup:
77231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
78231200Smm}
79231200Smm
80231200Smmstatic void
81231200Smmtest_read_format_cpio_filename_UTF8_eucJP(const char *refname)
82231200Smm{
83231200Smm	struct archive *a;
84231200Smm	struct archive_entry *ae;
85231200Smm
86231200Smm	/*
87231200Smm	 * Read UTF-8 filename in ja_JP.eucJP with "hdrcharset=UTF-8" option.
88231200Smm	 */
89231200Smm	if (NULL == setlocale(LC_ALL, "ja_JP.eucJP")) {
90231200Smm		skipping("ja_JP.eucJP locale not available on this system.");
91231200Smm		return;
92231200Smm	}
93231200Smm	assert((a = archive_read_new()) != NULL);
94231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
95231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
96231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=UTF-8")) {
97231200Smm		skipping("This system cannot convert character-set"
98231200Smm		    " from UTF-8 to eucJP.");
99231200Smm		goto cleanup;
100231200Smm	}
101231200Smm
102231200Smm	assertEqualIntA(a, ARCHIVE_OK,
103231200Smm	    archive_read_open_filename(a, refname, 10240));
104231200Smm
105231200Smm	/* Verify regular file. */
106231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
107231200Smm	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
108231200Smm	assertEqualString("\xb4\xc1\xbb\xfa.txt", archive_entry_pathname(ae));
109231200Smm	assertEqualInt(8, archive_entry_size(ae));
110231200Smm
111231200Smm	/* Verify regular file. */
112231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
113231200Smm	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
114231200Smm	assertEqualString("\xc9\xbd.txt", archive_entry_pathname(ae));
115231200Smm	assertEqualInt(4, archive_entry_size(ae));
116231200Smm
117231200Smm
118231200Smm	/* End of archive. */
119231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
120231200Smm
121231200Smm	/* Verify archive format. */
122248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
123231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
124231200Smm
125231200Smm	/* Close the archive. */
126231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
127231200Smmcleanup:
128231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
129231200Smm}
130231200Smm
131231200Smmstatic void
132231200Smmtest_read_format_cpio_filename_UTF8_UTF8_jp(const char *refname)
133231200Smm{
134231200Smm	struct archive *a;
135231200Smm	struct archive_entry *ae;
136231200Smm
137231200Smm	/*
138231200Smm	 * Read UTF-8 filename in en_US.UTF-8 without "hdrcharset=UTF-8" option.
139231200Smm	 */
140231200Smm	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
141231200Smm		skipping("en_US.UTF-8 locale not available on this system.");
142231200Smm		return;
143231200Smm	}
144231200Smm
145231200Smm	assert((a = archive_read_new()) != NULL);
146231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
147231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
148231200Smm	assertEqualIntA(a, ARCHIVE_OK,
149231200Smm	    archive_read_open_filename(a, refname, 10240));
150231200Smm
151231200Smm	/* Verify regular file. */
152231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
153231200Smm	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
154231200Smm	assertEqualString("\xe6\xbc\xa2\xe5\xad\x97.txt",
155231200Smm	    archive_entry_pathname(ae));
156231200Smm	assertEqualInt(8, archive_entry_size(ae));
157231200Smm
158231200Smm	/* Verify regular file. */
159231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
160231200Smm	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
161231200Smm	assertEqualString("\xe8\xa1\xa8.txt", archive_entry_pathname(ae));
162231200Smm	assertEqualInt(4, archive_entry_size(ae));
163231200Smm
164231200Smm
165231200Smm	/* End of archive. */
166231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
167231200Smm
168231200Smm	/* Verify archive format. */
169248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
170231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
171231200Smm
172231200Smm	/* Close the archive. */
173231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
174231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
175231200Smm}
176231200Smm
177231200Smmstatic void
178231200Smmtest_read_format_cpio_filename_CP866_KOI8R(const char *refname)
179231200Smm{
180231200Smm	struct archive *a;
181231200Smm	struct archive_entry *ae;
182231200Smm
183231200Smm	/*
184231200Smm	 * Read CP866 filename in ru_RU.KOI8-R with "hdrcharset=CP866" option.
185231200Smm	 */
186231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia.20866") &&
187231200Smm	    NULL == setlocale(LC_ALL, "ru_RU.KOI8-R")) {
188231200Smm		skipping("ru_RU.KOI8-R locale not available on this system.");
189231200Smm		return;
190231200Smm	}
191231200Smm
192231200Smm	assert((a = archive_read_new()) != NULL);
193231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
194231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
195231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) {
196231200Smm		skipping("This system cannot convert character-set"
197231200Smm		    " from CP866 to KOI8-R.");
198231200Smm		goto cleanup;
199231200Smm	}
200231200Smm	assertEqualIntA(a, ARCHIVE_OK,
201231200Smm	    archive_read_open_filename(a, refname, 10240));
202231200Smm
203231200Smm	/* Verify regular file. */
204231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
205231200Smm	assertEqualString("\xf0\xf2\xe9\xf7\xe5\xf4",
206231200Smm	    archive_entry_pathname(ae));
207231200Smm	assertEqualInt(6, archive_entry_size(ae));
208231200Smm
209231200Smm	/* Verify regular file. */
210231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
211231200Smm	assertEqualString("\xd0\xd2\xc9\xd7\xc5\xd4",
212231200Smm	    archive_entry_pathname(ae));
213231200Smm	assertEqualInt(6, archive_entry_size(ae));
214231200Smm
215231200Smm
216231200Smm	/* End of archive. */
217231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
218231200Smm
219231200Smm	/* Verify archive format. */
220248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
221231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
222231200Smm
223231200Smm	/* Close the archive. */
224231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
225231200Smmcleanup:
226231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
227231200Smm}
228231200Smm
229231200Smmstatic void
230231200Smmtest_read_format_cpio_filename_CP866_UTF8(const char *refname)
231231200Smm{
232231200Smm	struct archive *a;
233231200Smm	struct archive_entry *ae;
234231200Smm
235231200Smm	/*
236231200Smm	 * Read CP866 filename in en_US.UTF-8 with "hdrcharset=CP866" option.
237231200Smm	 */
238231200Smm	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
239231200Smm		skipping("en_US.UTF-8 locale not available on this system.");
240231200Smm		return;
241231200Smm	}
242231200Smm
243231200Smm	assert((a = archive_read_new()) != NULL);
244231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
245231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
246231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) {
247231200Smm		skipping("This system cannot convert character-set"
248231200Smm		    " from CP866 to UTF-8.");
249231200Smm		goto cleanup;
250231200Smm	}
251231200Smm	assertEqualIntA(a, ARCHIVE_OK,
252231200Smm	    archive_read_open_filename(a, refname, 10240));
253231200Smm
254231200Smm	/* Verify regular file. */
255231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
256231200Smm	assertEqualString("\xd0\x9f\xd0\xa0\xd0\x98\xd0\x92\xd0\x95\xd0\xa2",
257231200Smm	    archive_entry_pathname(ae));
258231200Smm	assertEqualInt(6, archive_entry_size(ae));
259231200Smm
260231200Smm	/* Verify regular file. */
261231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
262231200Smm	assertEqualString("\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82",
263231200Smm	    archive_entry_pathname(ae));
264231200Smm	assertEqualInt(6, archive_entry_size(ae));
265231200Smm
266231200Smm
267231200Smm	/* End of archive. */
268231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
269231200Smm
270231200Smm	/* Verify archive format. */
271248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
272231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
273231200Smm
274231200Smm	/* Close the archive. */
275231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
276231200Smmcleanup:
277231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
278231200Smm}
279231200Smm
280231200Smmstatic void
281231200Smmtest_read_format_cpio_filename_KOI8R_CP866(const char *refname)
282231200Smm{
283231200Smm	struct archive *a;
284231200Smm	struct archive_entry *ae;
285231200Smm
286231200Smm	/*
287231200Smm	 * Read KOI8-R filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option.
288231200Smm	 */
289231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia.866") &&
290231200Smm	    NULL == setlocale(LC_ALL, "ru_RU.CP866")) {
291231200Smm		skipping("ru_RU.CP866 locale not available on this system.");
292231200Smm		return;
293231200Smm	}
294231200Smm
295231200Smm	assert((a = archive_read_new()) != NULL);
296231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
297231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
298231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) {
299231200Smm		skipping("This system cannot convert character-set"
300231200Smm		    " from KOI8-R to CP866.");
301231200Smm		goto cleanup;
302231200Smm	}
303231200Smm	assertEqualIntA(a, ARCHIVE_OK,
304231200Smm	    archive_read_open_filename(a, refname, 10240));
305231200Smm
306231200Smm	/* Verify regular file. */
307231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
308231200Smm	assertEqualString("\x8f\x90\x88\x82\x85\x92",
309231200Smm	    archive_entry_pathname(ae));
310231200Smm	assertEqualInt(6, archive_entry_size(ae));
311231200Smm
312231200Smm	/* Verify regular file. */
313231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
314231200Smm	assertEqualString("\xaf\xe0\xa8\xa2\xa5\xe2",
315231200Smm	    archive_entry_pathname(ae));
316231200Smm	assertEqualInt(6, archive_entry_size(ae));
317231200Smm
318231200Smm
319231200Smm	/* End of archive. */
320231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
321231200Smm
322231200Smm	/* Verify archive format. */
323248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
324231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
325231200Smm
326231200Smm	/* Close the archive. */
327231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
328231200Smmcleanup:
329231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
330231200Smm}
331231200Smm
332231200Smmstatic void
333231200Smmtest_read_format_cpio_filename_KOI8R_UTF8(const char *refname)
334231200Smm{
335231200Smm	struct archive *a;
336231200Smm	struct archive_entry *ae;
337231200Smm
338231200Smm	/*
339231200Smm	 * Read KOI8-R filename in en_US.UTF-8 with "hdrcharset=KOI8-R" option.
340231200Smm	 */
341231200Smm	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
342231200Smm		skipping("en_US.UTF-8 locale not available on this system.");
343231200Smm		return;
344231200Smm	}
345231200Smm
346231200Smm	assert((a = archive_read_new()) != NULL);
347231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
348231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
349231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) {
350231200Smm		skipping("This system cannot convert character-set"
351231200Smm		    " from KOI8-R to UTF-8.");
352231200Smm		goto cleanup;
353231200Smm	}
354231200Smm	assertEqualIntA(a, ARCHIVE_OK,
355231200Smm	    archive_read_open_filename(a, refname, 10240));
356231200Smm
357231200Smm	/* Verify regular file. */
358231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
359231200Smm	assertEqualString("\xd0\x9f\xd0\xa0\xd0\x98\xd0\x92\xd0\x95\xd0\xa2",
360231200Smm	    archive_entry_pathname(ae));
361231200Smm	assertEqualInt(6, archive_entry_size(ae));
362231200Smm
363231200Smm	/* Verify regular file. */
364231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
365231200Smm	assertEqualString("\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82",
366231200Smm	    archive_entry_pathname(ae));
367231200Smm	assertEqualInt(6, archive_entry_size(ae));
368231200Smm
369231200Smm
370231200Smm	/* End of archive. */
371231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
372231200Smm
373231200Smm	/* Verify archive format. */
374248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
375231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
376231200Smm
377231200Smm	/* Close the archive. */
378231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
379231200Smmcleanup:
380231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
381231200Smm}
382231200Smm
383231200Smmstatic void
384231200Smmtest_read_format_cpio_filename_UTF8_KOI8R(const char *refname)
385231200Smm{
386231200Smm	struct archive *a;
387231200Smm	struct archive_entry *ae;
388231200Smm
389231200Smm	/*
390231200Smm	 * Read UTF-8 filename in ru_RU.KOI8-R with "hdrcharset=UTF-8" option.
391231200Smm	 */
392231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia.20866") &&
393231200Smm	    NULL == setlocale(LC_ALL, "ru_RU.KOI8-R")) {
394231200Smm		skipping("ru_RU.KOI8-R locale not available on this system.");
395231200Smm		return;
396231200Smm	}
397231200Smm
398231200Smm	assert((a = archive_read_new()) != NULL);
399231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
400231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
401231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=UTF-8")) {
402231200Smm		skipping("This system cannot convert character-set"
403231200Smm		    " from UTF-8 to KOI8-R.");
404231200Smm		goto cleanup;
405231200Smm	}
406231200Smm	assertEqualIntA(a, ARCHIVE_OK,
407231200Smm	    archive_read_open_filename(a, refname, 10240));
408231200Smm
409231200Smm	/* Verify regular file. */
410231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
411231200Smm	assertEqualString("\xf0\xf2\xe9\xf7\xe5\xf4",
412231200Smm	    archive_entry_pathname(ae));
413231200Smm	assertEqualInt(6, archive_entry_size(ae));
414231200Smm
415231200Smm	/* Verify regular file. */
416231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
417231200Smm	assertEqualString("\xd0\xd2\xc9\xd7\xc5\xd4",
418231200Smm	    archive_entry_pathname(ae));
419231200Smm	assertEqualInt(6, archive_entry_size(ae));
420231200Smm
421231200Smm
422231200Smm	/* End of archive. */
423231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
424231200Smm
425231200Smm	/* Verify archive format. */
426248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
427231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
428231200Smm
429231200Smm	/* Close the archive. */
430231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
431231200Smmcleanup:
432231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
433231200Smm}
434231200Smm
435231200Smmstatic void
436231200Smmtest_read_format_cpio_filename_UTF8_CP866(const char *refname)
437231200Smm{
438231200Smm	struct archive *a;
439231200Smm	struct archive_entry *ae;
440231200Smm
441231200Smm	/*
442231200Smm	 * Read UTF-8 filename in ru_RU.CP866 with "hdrcharset=UTF-8" option.
443231200Smm	 */
444231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia.866") &&
445231200Smm		NULL == setlocale(LC_ALL, "ru_RU.CP866")) {
446231200Smm		skipping("ru_RU.CP866 locale not available on this system.");
447231200Smm		return;
448231200Smm	}
449231200Smm
450231200Smm	assert((a = archive_read_new()) != NULL);
451231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
452231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
453231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=UTF-8")) {
454231200Smm		skipping("This system cannot convert character-set"
455231200Smm		    " from UTF-8 to CP866.");
456231200Smm		goto cleanup;
457231200Smm	}
458231200Smm	assertEqualIntA(a, ARCHIVE_OK,
459231200Smm	    archive_read_open_filename(a, refname, 10240));
460231200Smm
461231200Smm	/* Verify regular file. */
462231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
463231200Smm	assertEqualString("\x8f\x90\x88\x82\x85\x92",
464231200Smm	    archive_entry_pathname(ae));
465231200Smm	assertEqualInt(6, archive_entry_size(ae));
466231200Smm
467231200Smm	/* Verify regular file. */
468231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
469231200Smm	assertEqualString("\xaf\xe0\xa8\xa2\xa5\xe2",
470231200Smm	    archive_entry_pathname(ae));
471231200Smm	assertEqualInt(6, archive_entry_size(ae));
472231200Smm
473231200Smm
474231200Smm	/* End of archive. */
475231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
476231200Smm
477231200Smm	/* Verify archive format. */
478248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
479231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
480231200Smm
481231200Smm	/* Close the archive. */
482231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
483231200Smmcleanup:
484231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
485231200Smm}
486231200Smm
487231200Smmstatic void
488231200Smmtest_read_format_cpio_filename_UTF8_UTF8_ru(const char *refname)
489231200Smm{
490231200Smm	struct archive *a;
491231200Smm	struct archive_entry *ae;
492231200Smm
493231200Smm	/*
494231200Smm	 * Read UTF-8 filename in en_US.UTF-8 without "hdrcharset=UTF-8" option.
495231200Smm	 */
496231200Smm	if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
497231200Smm		skipping("en_US.UTF-8 locale not available on this system.");
498231200Smm		return;
499231200Smm	}
500231200Smm
501231200Smm	assert((a = archive_read_new()) != NULL);
502231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
503231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
504231200Smm	assertEqualIntA(a, ARCHIVE_OK,
505231200Smm	    archive_read_open_filename(a, refname, 10240));
506231200Smm
507231200Smm	/* Verify regular file. */
508231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
509231200Smm	assertEqualString("\xd0\x9f\xd0\xa0\xd0\x98\xd0\x92\xd0\x95\xd0\xa2",
510231200Smm	    archive_entry_pathname(ae));
511231200Smm	assertEqualInt(6, archive_entry_size(ae));
512231200Smm
513231200Smm	/* Verify regular file. */
514231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
515231200Smm	assertEqualString("\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82",
516231200Smm	    archive_entry_pathname(ae));
517231200Smm	assertEqualInt(6, archive_entry_size(ae));
518231200Smm
519231200Smm
520231200Smm	/* End of archive. */
521231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
522231200Smm
523231200Smm	/* Verify archive format. */
524248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
525231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
526231200Smm
527231200Smm	/* Close the archive. */
528231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
529231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
530231200Smm}
531231200Smm
532231200Smmstatic void
533231200Smmtest_read_format_cpio_filename_eucJP_CP932(const char *refname)
534231200Smm{
535231200Smm	struct archive *a;
536231200Smm	struct archive_entry *ae;
537231200Smm
538231200Smm	/*
539231200Smm	 * Read eucJP filename in CP932/SJIS with "hdrcharset=eucJP" option.
540231200Smm	 */
541231200Smm	if (NULL == setlocale(LC_ALL, "Japanese_Japan") &&
542231200Smm	    NULL == setlocale(LC_ALL, "ja_JP.SJIS")) {
543231200Smm		skipping("CP932 locale not available on this system.");
544231200Smm		return;
545231200Smm	}
546231200Smm
547231200Smm	assert((a = archive_read_new()) != NULL);
548231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
549231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
550231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=eucJP")) {
551231200Smm		skipping("This system cannot convert character-set"
552231200Smm		    " from eucJP.");
553231200Smm		goto cleanup;
554231200Smm	}
555231200Smm	assertEqualIntA(a, ARCHIVE_OK,
556231200Smm	    archive_read_open_filename(a, refname, 10240));
557231200Smm
558231200Smm	/* Verify regular file. */
559231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
560231200Smm	assertEqualString("\x8a\xbf\x8e\x9a.txt", archive_entry_pathname(ae));
561231200Smm	assertEqualInt(8, archive_entry_size(ae));
562231200Smm
563231200Smm	/* Verify regular file. */
564231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
565231200Smm	assertEqualString("\x95\x5c.txt", archive_entry_pathname(ae));
566231200Smm	assertEqualInt(4, archive_entry_size(ae));
567231200Smm
568231200Smm
569231200Smm	/* End of archive. */
570231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
571231200Smm
572231200Smm	/* Verify archive format. */
573248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
574231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
575231200Smm
576231200Smm	/* Close the archive. */
577231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
578231200Smmcleanup:
579231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
580231200Smm}
581231200Smm
582231200Smmstatic void
583231200Smmtest_read_format_cpio_filename_UTF8_CP932(const char *refname)
584231200Smm{
585231200Smm	struct archive *a;
586231200Smm	struct archive_entry *ae;
587231200Smm
588231200Smm	/*
589231200Smm	 * Read UTF-8 filename in CP932/SJIS with "hdrcharset=UTF-8" option.
590231200Smm	 */
591231200Smm	if (NULL == setlocale(LC_ALL, "Japanese_Japan") &&
592231200Smm	    NULL == setlocale(LC_ALL, "ja_JP.SJIS")) {
593231200Smm		skipping("CP932 locale not available on this system.");
594231200Smm		return;
595231200Smm	}
596231200Smm
597231200Smm	assert((a = archive_read_new()) != NULL);
598231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
599231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
600231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=UTF-8")) {
601231200Smm		skipping("This system cannot convert character-set"
602231200Smm		    " from UTF-8 to CP932.");
603231200Smm		goto cleanup;
604231200Smm	}
605231200Smm	assertEqualIntA(a, ARCHIVE_OK,
606231200Smm	    archive_read_open_filename(a, refname, 10240));
607231200Smm
608231200Smm	/* Verify regular file. */
609231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
610231200Smm	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
611231200Smm	assertEqualString("\x8a\xbf\x8e\x9a.txt", archive_entry_pathname(ae));
612231200Smm	assertEqualInt(8, archive_entry_size(ae));
613231200Smm
614231200Smm	/* Verify regular file. */
615231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
616231200Smm	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
617231200Smm	assertEqualString("\x95\x5c.txt", archive_entry_pathname(ae));
618231200Smm	assertEqualInt(4, archive_entry_size(ae));
619231200Smm
620231200Smm	/* End of archive. */
621231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
622231200Smm
623231200Smm	/* Verify archive format. */
624248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
625231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
626231200Smm
627231200Smm	/* Close the archive. */
628231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
629231200Smmcleanup:
630231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
631231200Smm}
632231200Smm
633231200Smmstatic void
634231200Smmtest_read_format_cpio_filename_CP866_CP1251(const char *refname)
635231200Smm{
636231200Smm	struct archive *a;
637231200Smm	struct archive_entry *ae;
638231200Smm
639231200Smm	/*
640231200Smm	 * Read CP866 filename in CP1251 with "hdrcharset=CP866" option.
641231200Smm	 */
642231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia") &&
643231200Smm	    NULL == setlocale(LC_ALL, "ru_RU.CP1251")) {
644231200Smm		skipping("CP1251 locale not available on this system.");
645231200Smm		return;
646231200Smm	}
647231200Smm
648231200Smm	assert((a = archive_read_new()) != NULL);
649231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
650231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
651231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) {
652231200Smm		skipping("This system cannot convert character-set"
653231200Smm		    " from CP866 to CP1251.");
654231200Smm		goto cleanup;
655231200Smm	}
656231200Smm	assertEqualIntA(a, ARCHIVE_OK,
657231200Smm	    archive_read_open_filename(a, refname, 10240));
658231200Smm
659231200Smm	/* Verify regular file. */
660231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
661231200Smm	assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2",
662231200Smm	    archive_entry_pathname(ae));
663231200Smm	assertEqualInt(6, archive_entry_size(ae));
664231200Smm
665231200Smm	/* Verify regular file. */
666231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
667231200Smm	assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2",
668231200Smm	    archive_entry_pathname(ae));
669231200Smm	assertEqualInt(6, archive_entry_size(ae));
670231200Smm
671231200Smm
672231200Smm	/* End of archive. */
673231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
674231200Smm
675231200Smm	/* Verify archive format. */
676248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
677231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
678231200Smm
679231200Smm	/* Close the archive. */
680231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
681231200Smmcleanup:
682231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
683231200Smm}
684231200Smm
685231200Smm/*
686231200Smm * This test only for Windows platform because other archiver
687231200Smm * applications on Windows translate CP1251 filenames into CP866
688231200Smm * filenames and store it in the cpio file and so we should read
689231200Smm * it by default on Windows.
690231200Smm */
691231200Smmstatic void
692231200Smmtest_read_format_cpio_filename_CP866_CP1251_win(const char *refname)
693231200Smm{
694231200Smm	struct archive *a;
695231200Smm	struct archive_entry *ae;
696231200Smm
697231200Smm	/*
698231200Smm	 * Read CP866 filename in CP1251 without "hdrcharset=CP866" option.
699231200Smm	 */
700231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia")) {
701231200Smm		skipping("Russian_Russia locale not available on this system.");
702231200Smm		return;
703231200Smm	}
704231200Smm
705231200Smm	assert((a = archive_read_new()) != NULL);
706231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
707231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
708231200Smm	assertEqualIntA(a, ARCHIVE_OK,
709231200Smm	    archive_read_open_filename(a, refname, 10240));
710231200Smm
711231200Smm	/* Verify regular file. */
712231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
713231200Smm	assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2",
714231200Smm	    archive_entry_pathname(ae));
715231200Smm	assertEqualInt(6, archive_entry_size(ae));
716231200Smm
717231200Smm	/* Verify regular file. */
718231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
719231200Smm	assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2",
720231200Smm	    archive_entry_pathname(ae));
721231200Smm	assertEqualInt(6, archive_entry_size(ae));
722231200Smm
723231200Smm
724231200Smm	/* End of archive. */
725231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
726231200Smm
727231200Smm	/* Verify archive format. */
728248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
729231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
730231200Smm
731231200Smm	/* Close the archive. */
732231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
733231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
734231200Smm}
735231200Smm
736231200Smmstatic void
737231200Smmtest_read_format_cpio_filename_KOI8R_CP1251(const char *refname)
738231200Smm{
739231200Smm	struct archive *a;
740231200Smm	struct archive_entry *ae;
741231200Smm
742231200Smm	/*
743231200Smm	 * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option.
744231200Smm	 */
745231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia") &&
746231200Smm	    NULL == setlocale(LC_ALL, "ru_RU.CP1251")) {
747231200Smm		skipping("CP1251 locale not available on this system.");
748231200Smm		return;
749231200Smm	}
750231200Smm
751231200Smm	assert((a = archive_read_new()) != NULL);
752231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
753231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
754231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) {
755231200Smm		skipping("This system cannot convert character-set"
756231200Smm		    " from KOI8-R to CP1251.");
757231200Smm		goto cleanup;
758231200Smm	}
759231200Smm	assertEqualIntA(a, ARCHIVE_OK,
760231200Smm	    archive_read_open_filename(a, refname, 10240));
761231200Smm
762231200Smm	/* Verify regular file. */
763231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
764231200Smm	assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2",
765231200Smm	    archive_entry_pathname(ae));
766231200Smm	assertEqualInt(6, archive_entry_size(ae));
767231200Smm
768231200Smm	/* Verify regular file. */
769231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
770231200Smm	assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2",
771231200Smm	    archive_entry_pathname(ae));
772231200Smm	assertEqualInt(6, archive_entry_size(ae));
773231200Smm
774231200Smm
775231200Smm	/* End of archive. */
776231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
777231200Smm
778231200Smm	/* Verify archive format. */
779248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
780231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
781231200Smm
782231200Smm	/* Close the archive. */
783231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
784231200Smmcleanup:
785231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
786231200Smm}
787231200Smm
788231200Smmstatic void
789231200Smmtest_read_format_cpio_filename_UTF8_CP1251(const char *refname)
790231200Smm{
791231200Smm	struct archive *a;
792231200Smm	struct archive_entry *ae;
793231200Smm
794231200Smm	/*
795231200Smm	 * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option.
796231200Smm	 */
797231200Smm	if (NULL == setlocale(LC_ALL, "Russian_Russia") &&
798231200Smm	    NULL == setlocale(LC_ALL, "ru_RU.CP1251")) {
799231200Smm		skipping("CP1251 locale not available on this system.");
800231200Smm		return;
801231200Smm	}
802231200Smm
803231200Smm	assert((a = archive_read_new()) != NULL);
804231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
805231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
806231200Smm	if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=UTF-8")) {
807231200Smm		skipping("This system cannot convert character-set"
808231200Smm		    " from UTF-8 to CP1251.");
809231200Smm		goto cleanup;
810231200Smm	}
811231200Smm	assertEqualIntA(a, ARCHIVE_OK,
812231200Smm	    archive_read_open_filename(a, refname, 10240));
813231200Smm
814231200Smm	/* Verify regular file. */
815231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
816231200Smm	assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2",
817231200Smm	    archive_entry_pathname(ae));
818231200Smm	assertEqualInt(6, archive_entry_size(ae));
819231200Smm
820231200Smm	/* Verify regular file. */
821231200Smm	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
822231200Smm	assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2",
823231200Smm	    archive_entry_pathname(ae));
824231200Smm	assertEqualInt(6, archive_entry_size(ae));
825231200Smm
826231200Smm
827231200Smm	/* End of archive. */
828231200Smm	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
829231200Smm
830231200Smm	/* Verify archive format. */
831248616Smm	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
832231200Smm	assertEqualIntA(a, ARCHIVE_FORMAT_CPIO_POSIX, archive_format(a));
833231200Smm
834231200Smm	/* Close the archive. */
835231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
836231200Smmcleanup:
837231200Smm	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
838231200Smm}
839231200Smm
840231200Smm
841231200SmmDEFINE_TEST(test_read_format_cpio_filename)
842231200Smm{
843231200Smm	const char *refname1 = "test_read_format_cpio_filename_eucjp.cpio";
844231200Smm	const char *refname2 = "test_read_format_cpio_filename_utf8_jp.cpio";
845231200Smm	const char *refname3 = "test_read_format_cpio_filename_cp866.cpio";
846231200Smm	const char *refname4 = "test_read_format_cpio_filename_koi8r.cpio";
847231200Smm	const char *refname5 = "test_read_format_cpio_filename_utf8_ru.cpio";
848231200Smm
849231200Smm	extract_reference_file(refname1);
850231200Smm	test_read_format_cpio_filename_eucJP_UTF8(refname1);
851231200Smm	test_read_format_cpio_filename_eucJP_CP932(refname1);
852231200Smm
853231200Smm	extract_reference_file(refname2);
854231200Smm	test_read_format_cpio_filename_UTF8_eucJP(refname2);
855231200Smm	test_read_format_cpio_filename_UTF8_UTF8_jp(refname2);
856231200Smm	test_read_format_cpio_filename_UTF8_CP932(refname2);
857231200Smm
858231200Smm	extract_reference_file(refname3);
859231200Smm	test_read_format_cpio_filename_CP866_KOI8R(refname3);
860231200Smm	test_read_format_cpio_filename_CP866_UTF8(refname3);
861231200Smm	test_read_format_cpio_filename_CP866_CP1251(refname3);
862231200Smm	test_read_format_cpio_filename_CP866_CP1251_win(refname3);
863231200Smm
864231200Smm	extract_reference_file(refname4);
865231200Smm	test_read_format_cpio_filename_KOI8R_CP866(refname4);
866231200Smm	test_read_format_cpio_filename_KOI8R_UTF8(refname4);
867231200Smm	test_read_format_cpio_filename_KOI8R_CP1251(refname4);
868231200Smm
869231200Smm	extract_reference_file(refname5);
870231200Smm	test_read_format_cpio_filename_UTF8_KOI8R(refname5);
871231200Smm	test_read_format_cpio_filename_UTF8_CP866(refname5);
872231200Smm	test_read_format_cpio_filename_UTF8_UTF8_ru(refname5);
873231200Smm	test_read_format_cpio_filename_UTF8_CP1251(refname5);
874231200Smm}
875