test_read_format_gtar_filename.c revision 302001
1272850Shrs/*- 2272850Shrs * Copyright (c) 2011 Michihiro NAKAJIMA 326206Swpaul * All rights reserved. 4272850Shrs * 5272850Shrs * Redistribution and use in source and binary forms, with or without 6272850Shrs * modification, are permitted provided that the following conditions 726206Swpaul * are met: 8272850Shrs * 1. Redistributions of source code must retain the above copyright 9272850Shrs * notice, this list of conditions and the following disclaimer. 10272850Shrs * 2. Redistributions in binary form must reproduce the above copyright 11272850Shrs * notice, this list of conditions and the following disclaimer in the 12272850Shrs * documentation and/or other materials provided with the distribution. 13272850Shrs * 14272850Shrs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15272850Shrs * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16272850Shrs * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1726206Swpaul * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18272850Shrs * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19272850Shrs * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20272850Shrs * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21272850Shrs * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22272850Shrs * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23272850Shrs * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24272850Shrs */ 25272850Shrs#include "test.h" 26272850Shrs__FBSDID("$FreeBSD"); 27272850Shrs 28272850Shrs#include <locale.h> 29272850Shrs 3026206SwpaulDEFINE_TEST(test_read_format_gtar_filename_eucJP_UTF8) 3126206Swpaul{ 3226206Swpaul const char *refname = "test_read_format_gtar_filename_eucjp.tar.Z"; 33114629Sobrien struct archive *a; 34114629Sobrien struct archive_entry *ae; 3526206Swpaul 3626206Swpaul /* 3726206Swpaul * Read eucJP filename in en_US.UTF-8 with "hdrcharset=eucJP" option. 3826206Swpaul */ 3926206Swpaul if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) { 4026206Swpaul skipping("en_US.UTF-8 locale not available on this system."); 4126206Swpaul return; 4226206Swpaul } 4326206Swpaul extract_reference_file(refname); 4426206Swpaul 4526206Swpaul assert((a = archive_read_new()) != NULL); 4626206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 4726206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 4826206Swpaul if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=eucJP")) { 4926206Swpaul skipping("This system cannot convert character-set" 5026206Swpaul " from eucJP to UTF-8."); 5126206Swpaul goto cleanup; 5226206Swpaul } 5326206Swpaul assertEqualIntA(a, ARCHIVE_OK, 5426206Swpaul archive_read_open_filename(a, refname, 10240)); 5526206Swpaul 5626206Swpaul /* Verify regular file. */ 5726206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 5826206Swpaul assertEqualString("\xe6\xbc\xa2\xe5\xad\x97.txt", 5926206Swpaul archive_entry_pathname(ae)); 6026206Swpaul assertEqualInt(8, archive_entry_size(ae)); 6126206Swpaul 6226206Swpaul /* Verify regular file. */ 6326206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 6426206Swpaul assertEqualString("\xe8\xa1\xa8.txt", archive_entry_pathname(ae)); 6526206Swpaul assertEqualInt(4, archive_entry_size(ae)); 6626206Swpaul assertEqualInt(archive_entry_is_encrypted(ae), 0); 6726206Swpaul assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 6826206Swpaul 6926206Swpaul 7026206Swpaul /* End of archive. */ 7126206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 7226206Swpaul 7326206Swpaul /* Verify archive format. */ 7426206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 7526206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 7626206Swpaul 7726206Swpaul /* Close the archive. */ 7826206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 7926206Swpaulcleanup: 8026206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 8126206Swpaul} 8226206Swpaul 8326206SwpaulDEFINE_TEST(test_read_format_gtar_filename_CP866_KOI8R) 8426206Swpaul{ 8526206Swpaul const char *refname = "test_read_format_gtar_filename_cp866.tar.Z"; 8626206Swpaul struct archive *a; 8726206Swpaul struct archive_entry *ae; 8826206Swpaul 8926206Swpaul /* 9026206Swpaul * Read CP866 filename in ru_RU.KOI8-R with "hdrcharset=CP866" option. 9126206Swpaul */ 9226206Swpaul if (NULL == setlocale(LC_ALL, "Russian_Russia.20866") && 9326206Swpaul NULL == setlocale(LC_ALL, "ru_RU.KOI8-R")) { 9426206Swpaul skipping("ru_RU.KOI8-R locale not available on this system."); 9526206Swpaul return; 9626206Swpaul } 9726206Swpaul extract_reference_file(refname); 9826206Swpaul 9926206Swpaul assert((a = archive_read_new()) != NULL); 10026206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 10126206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 10226206Swpaul if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) { 10326206Swpaul skipping("This system cannot convert character-set" 10426206Swpaul " from CP866 to KOI8-R."); 10526206Swpaul goto cleanup; 10626206Swpaul } 10726206Swpaul assertEqualIntA(a, ARCHIVE_OK, 10826206Swpaul archive_read_open_filename(a, refname, 10240)); 10926206Swpaul 11026206Swpaul /* Verify regular file. */ 11126206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 11226206Swpaul assertEqualString("\xf0\xf2\xe9\xf7\xe5\xf4", 11326206Swpaul archive_entry_pathname(ae)); 11426206Swpaul assertEqualInt(6, archive_entry_size(ae)); 11526206Swpaul 11626206Swpaul /* Verify regular file. */ 11726206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 11826206Swpaul assertEqualString("\xd0\xd2\xc9\xd7\xc5\xd4", 11926206Swpaul archive_entry_pathname(ae)); 12026206Swpaul assertEqualInt(6, archive_entry_size(ae)); 12126206Swpaul 12226206Swpaul 12326206Swpaul /* End of archive. */ 12426206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 12526206Swpaul 12626206Swpaul /* Verify archive format. */ 12726206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 12826206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 12926206Swpaul 13026206Swpaul /* Close the archive. */ 13126206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 13226206Swpaulcleanup: 13326206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 13426206Swpaul} 13526206Swpaul 13626206SwpaulDEFINE_TEST(test_read_format_gtar_filename_CP866_UTF8) 13726206Swpaul{ 13826206Swpaul const char *refname = "test_read_format_gtar_filename_cp866.tar.Z"; 13926206Swpaul struct archive *a; 14026206Swpaul struct archive_entry *ae; 14126206Swpaul 14226206Swpaul /* 14326206Swpaul * Read CP866 filename in en_US.UTF-8 with "hdrcharset=CP866" option. 14426206Swpaul */ 14526206Swpaul if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) { 14626206Swpaul skipping("en_US.UTF-8 locale not available on this system."); 14726206Swpaul return; 14826206Swpaul } 14926206Swpaul extract_reference_file(refname); 15026206Swpaul 15126206Swpaul assert((a = archive_read_new()) != NULL); 15226206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 15326206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 15426206Swpaul if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) { 15526206Swpaul skipping("This system cannot convert character-set" 15626206Swpaul " from CP866 to UTF-8."); 15726206Swpaul goto cleanup; 15826206Swpaul } 15926206Swpaul assertEqualIntA(a, ARCHIVE_OK, 16026206Swpaul archive_read_open_filename(a, refname, 10240)); 16126206Swpaul 16226206Swpaul /* Verify regular file. */ 16326206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 16426206Swpaul assertEqualString("\xd0\x9f\xd0\xa0\xd0\x98\xd0\x92\xd0\x95\xd0\xa2", 16526206Swpaul archive_entry_pathname(ae)); 16626206Swpaul assertEqualInt(6, archive_entry_size(ae)); 16726206Swpaul 16826206Swpaul /* Verify regular file. */ 16926206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 17026206Swpaul assertEqualString("\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82", 17126206Swpaul archive_entry_pathname(ae)); 17226206Swpaul assertEqualInt(6, archive_entry_size(ae)); 17326206Swpaul 17426206Swpaul 17526206Swpaul /* End of archive. */ 17626206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 17726206Swpaul 17826206Swpaul /* Verify archive format. */ 17926206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 18026206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 18126206Swpaul 18226206Swpaul /* Close the archive. */ 18326206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 18426206Swpaulcleanup: 18526206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 18626206Swpaul} 18726206Swpaul 18826206SwpaulDEFINE_TEST(test_read_format_gtar_filename_KOI8R_CP866) 18926206Swpaul{ 19026206Swpaul const char *refname = "test_read_format_gtar_filename_koi8r.tar.Z"; 19126206Swpaul struct archive *a; 19226206Swpaul struct archive_entry *ae; 19326206Swpaul 194108533Sschweikh /* 19526206Swpaul * Read KOI8-R filename in ru_RU.CP866 with "hdrcharset=KOI8-R" option. 196229781Suqs */ 197229781Suqs if (NULL == setlocale(LC_ALL, "Russian_Russia.866") && 19826206Swpaul NULL == setlocale(LC_ALL, "ru_RU.CP866")) { 19926206Swpaul skipping("ru_RU.CP866 locale not available on this system."); 20026206Swpaul return; 20126206Swpaul } 20226206Swpaul extract_reference_file(refname); 20326206Swpaul 20426206Swpaul assert((a = archive_read_new()) != NULL); 20526206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 20626206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 20726206Swpaul if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) { 20826206Swpaul skipping("This system cannot convert character-set" 20926206Swpaul " from KOI8-R to CP866."); 21026206Swpaul goto cleanup; 21126206Swpaul } 21226206Swpaul assertEqualIntA(a, ARCHIVE_OK, 21326206Swpaul archive_read_open_filename(a, refname, 10240)); 21426206Swpaul 21526206Swpaul /* Verify regular file. */ 21626206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 21726206Swpaul assertEqualString("\xaf\xe0\xa8\xa2\xa5\xe2", 21826206Swpaul archive_entry_pathname(ae)); 21926206Swpaul assertEqualInt(6, archive_entry_size(ae)); 22026206Swpaul 22126206Swpaul /* Verify regular file. */ 22226206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 22326206Swpaul assertEqualString("\x8f\x90\x88\x82\x85\x92", 22426206Swpaul archive_entry_pathname(ae)); 22526206Swpaul assertEqualInt(6, archive_entry_size(ae)); 22626206Swpaul 22726206Swpaul 22826206Swpaul /* End of archive. */ 22926206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 23026206Swpaul 23126206Swpaul /* Verify archive format. */ 23226206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 23326206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 23426206Swpaul 23526206Swpaul /* Close the archive. */ 23626206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 23726206Swpaulcleanup: 23826206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 23926206Swpaul} 24026206Swpaul 24126206SwpaulDEFINE_TEST(test_read_format_gtar_filename_KOI8R_UTF8) 24226206Swpaul{ 24326206Swpaul const char *refname = "test_read_format_gtar_filename_koi8r.tar.Z"; 24426206Swpaul struct archive *a; 24526206Swpaul struct archive_entry *ae; 24626206Swpaul 24726206Swpaul /* 24826206Swpaul * Read KOI8-R filename in en_US.UTF-8 with "hdrcharset=KOI8-R" option. 24926206Swpaul */ 25026206Swpaul if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) { 25126206Swpaul skipping("en_US.UTF-8 locale not available on this system."); 25226206Swpaul return; 25326206Swpaul } 25426206Swpaul extract_reference_file(refname); 25526206Swpaul 25626206Swpaul assert((a = archive_read_new()) != NULL); 25726206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 25826206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 25926206Swpaul if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) { 26026206Swpaul skipping("This system cannot convert character-set" 26126206Swpaul " from KOI8-R to UTF-8."); 26226206Swpaul goto cleanup; 26326206Swpaul } 26426206Swpaul assertEqualIntA(a, ARCHIVE_OK, 26526206Swpaul archive_read_open_filename(a, refname, 10240)); 26626206Swpaul 26726206Swpaul /* Verify regular file. */ 26826206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 26926206Swpaul assertEqualString("\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82", 27026206Swpaul archive_entry_pathname(ae)); 27126206Swpaul assertEqualInt(6, archive_entry_size(ae)); 27226206Swpaul 27326206Swpaul /* Verify regular file. */ 27426206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 27526206Swpaul assertEqualString("\xd0\x9f\xd0\xa0\xd0\x98\xd0\x92\xd0\x95\xd0\xa2", 27626206Swpaul archive_entry_pathname(ae)); 27726206Swpaul assertEqualInt(6, archive_entry_size(ae)); 27826206Swpaul 27926206Swpaul 28072089Sasmodai /* End of archive. */ 28126206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 28226206Swpaul 28326206Swpaul /* Verify archive format. */ 28426206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 28526206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 28626206Swpaul 28726206Swpaul /* Close the archive. */ 28826206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 28926206Swpaulcleanup: 29026206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 29126206Swpaul} 29226206Swpaul 29326206SwpaulDEFINE_TEST(test_read_format_gtar_filename_eucJP_CP932) 29426206Swpaul{ 29526206Swpaul const char *refname = "test_read_format_gtar_filename_eucjp.tar.Z"; 29626206Swpaul struct archive *a; 29726206Swpaul struct archive_entry *ae; 29826206Swpaul 29926206Swpaul /* 30026206Swpaul * Read eucJP filename in CP932/SJIS with "hdrcharset=eucJP" option. 30126206Swpaul */ 30226206Swpaul if (NULL == setlocale(LC_ALL, "Japanese_Japan") && 30326206Swpaul NULL == setlocale(LC_ALL, "ja_JP.SJIS")) { 30426206Swpaul skipping("CP932 locale not available on this system."); 30526206Swpaul return; 30626206Swpaul } 30726206Swpaul extract_reference_file(refname); 30826206Swpaul 30926206Swpaul assert((a = archive_read_new()) != NULL); 31026206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 31126206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 31226206Swpaul if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=eucJP")) { 31326206Swpaul skipping("This system cannot convert character-set" 31426206Swpaul " from eucJP."); 31526206Swpaul goto cleanup; 31626206Swpaul } 31726206Swpaul assertEqualIntA(a, ARCHIVE_OK, 31826206Swpaul archive_read_open_filename(a, refname, 10240)); 31926206Swpaul 32026206Swpaul /* Verify regular file. */ 32126206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 32226206Swpaul assertEqualString("\x8a\xbf\x8e\x9a.txt", archive_entry_pathname(ae)); 32326206Swpaul assertEqualInt(8, archive_entry_size(ae)); 32426206Swpaul 32526206Swpaul /* Verify regular file. */ 32626206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 32726206Swpaul assertEqualString("\x95\x5c.txt", archive_entry_pathname(ae)); 32826206Swpaul assertEqualInt(4, archive_entry_size(ae)); 32926206Swpaul 33026206Swpaul 33126206Swpaul /* End of archive. */ 33226206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 33326206Swpaul 33426206Swpaul /* Verify archive format. */ 33526206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 33626206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 33726206Swpaul 33826206Swpaul /* Close the archive. */ 33926206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 34026206Swpaulcleanup: 34126206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 34226206Swpaul} 34326206Swpaul 34426206SwpaulDEFINE_TEST(test_read_format_gtar_filename_CP866_CP1251) 34526206Swpaul{ 34626206Swpaul const char *refname = "test_read_format_gtar_filename_cp866.tar.Z"; 34726206Swpaul struct archive *a; 34826206Swpaul struct archive_entry *ae; 34926206Swpaul 35026206Swpaul /* 35126206Swpaul * Read CP866 filename in CP1251 with "hdrcharset=CP866" option. 35226206Swpaul */ 35326206Swpaul if (NULL == setlocale(LC_ALL, "Russian_Russia") && 35426206Swpaul NULL == setlocale(LC_ALL, "ru_RU.CP1251")) { 35526206Swpaul skipping("CP1251 locale not available on this system."); 35626206Swpaul return; 35726206Swpaul } 35826206Swpaul extract_reference_file(refname); 35926206Swpaul 36026206Swpaul assert((a = archive_read_new()) != NULL); 36126206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 36226206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 36326206Swpaul if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP866")) { 36426206Swpaul skipping("This system cannot convert character-set" 36526206Swpaul " from CP866 to CP1251."); 36626206Swpaul goto cleanup; 36726206Swpaul } 36826206Swpaul assertEqualIntA(a, ARCHIVE_OK, 36926206Swpaul archive_read_open_filename(a, refname, 10240)); 37026206Swpaul 37126206Swpaul /* Verify regular file. */ 37226206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 37326206Swpaul assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2", 37426206Swpaul archive_entry_pathname(ae)); 37526206Swpaul assertEqualInt(6, archive_entry_size(ae)); 37626206Swpaul 37726206Swpaul /* Verify regular file. */ 37826206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 37926206Swpaul assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2", 38026206Swpaul archive_entry_pathname(ae)); 38126206Swpaul assertEqualInt(6, archive_entry_size(ae)); 38226206Swpaul 38326206Swpaul 38426206Swpaul /* End of archive. */ 38526206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 38626206Swpaul 38726206Swpaul /* Verify archive format. */ 38826206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 38926206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 39026206Swpaul 39126206Swpaul /* Close the archive. */ 39226206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 39326206Swpaulcleanup: 39426206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 39526206Swpaul} 39626206Swpaul 39726206Swpaul/* 39826206Swpaul * This test only for Windows platform because other archiver 39926206Swpaul * applications on Windows translate CP1251 filenames into CP866 40026206Swpaul * filenames and store it in the gtar file and so we should read 40126206Swpaul * it by default on Windows. 40226206Swpaul */ 40326206SwpaulDEFINE_TEST(test_read_format_gtar_filename_CP866_CP1251_win) 40426206Swpaul{ 40526206Swpaul const char *refname = "test_read_format_gtar_filename_cp866.tar.Z"; 40626206Swpaul struct archive *a; 40726206Swpaul struct archive_entry *ae; 40826206Swpaul 40926206Swpaul /* 41026206Swpaul * Read CP866 filename in CP1251 without "hdrcharset=CP866" option. 41126206Swpaul */ 41226206Swpaul if (NULL == setlocale(LC_ALL, "Russian_Russia")) { 41326206Swpaul skipping("Russian_Russia locale not available on this system."); 41426206Swpaul return; 41526206Swpaul } 41626206Swpaul extract_reference_file(refname); 41726206Swpaul 41826206Swpaul assert((a = archive_read_new()) != NULL); 41926206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 42026206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 42126206Swpaul assertEqualIntA(a, ARCHIVE_OK, 42226206Swpaul archive_read_open_filename(a, refname, 10240)); 42326206Swpaul 42426206Swpaul /* Verify regular file. */ 42526206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 42626206Swpaul assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2", 42726206Swpaul archive_entry_pathname(ae)); 42826206Swpaul assertEqualInt(6, archive_entry_size(ae)); 42926206Swpaul 43026206Swpaul /* Verify regular file. */ 43126206Swpaul assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 43226206Swpaul assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2", 43326206Swpaul archive_entry_pathname(ae)); 43426206Swpaul assertEqualInt(6, archive_entry_size(ae)); 43526206Swpaul 43626206Swpaul 43726206Swpaul /* End of archive. */ 43826206Swpaul assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 43926206Swpaul 44026206Swpaul /* Verify archive format. */ 44126206Swpaul assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 44226206Swpaul assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 44326206Swpaul 44426206Swpaul /* Close the archive. */ 44526206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 44626206Swpaul assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 44726206Swpaul} 44826206Swpaul 44926206SwpaulDEFINE_TEST(test_read_format_gtar_filename_KOI8R_CP1251) 45026206Swpaul{ 45126206Swpaul const char *refname = "test_read_format_gtar_filename_koi8r.tar.Z"; 45226206Swpaul struct archive *a; 45326206Swpaul struct archive_entry *ae; 45426206Swpaul 45526206Swpaul /* 45626206Swpaul * Read KOI8-R filename in CP1251 with "hdrcharset=KOI8-R" option. 45726206Swpaul */ 45826206Swpaul if (NULL == setlocale(LC_ALL, "Russian_Russia") && 45926206Swpaul NULL == setlocale(LC_ALL, "ru_RU.CP1251")) { 46026206Swpaul skipping("CP1251 locale not available on this system."); 46126206Swpaul return; 46226206Swpaul } 46326206Swpaul extract_reference_file(refname); 46426206Swpaul 46526206Swpaul assert((a = archive_read_new()) != NULL); 466 assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 467 assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 468 if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=KOI8-R")) { 469 skipping("This system cannot convert character-set" 470 " from KOI8-R to CP1251."); 471 goto cleanup; 472 } 473 assertEqualIntA(a, ARCHIVE_OK, 474 archive_read_open_filename(a, refname, 10240)); 475 476 /* Verify regular file. */ 477 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 478 assertEqualString("\xef\xf0\xe8\xe2\xe5\xf2", 479 archive_entry_pathname(ae)); 480 assertEqualInt(6, archive_entry_size(ae)); 481 482 /* Verify regular file. */ 483 assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 484 assertEqualString("\xcf\xd0\xc8\xc2\xc5\xd2", 485 archive_entry_pathname(ae)); 486 assertEqualInt(6, archive_entry_size(ae)); 487 488 489 /* End of archive. */ 490 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 491 492 /* Verify archive format. */ 493 assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 494 assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a)); 495 496 /* Close the archive. */ 497 assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 498cleanup: 499 assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 500} 501 502