Path: blob/main/contrib/libarchive/tar/test/test_option_T_upper.c
39507 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2003-2008 Tim Kientzle4* All rights reserved.5*/6#include "test.h"78static int9tryMakeFile(const char *fn)10{11FILE *f = fopen(fn, "w");12if (f == NULL)13return (0);14fclose(f);15return (1);16}1718DEFINE_TEST(test_option_T_upper)19{20FILE *f;21int r;22int gnarlyFilesSupported;2324/* Create a simple dir hierarchy; bail if anything fails. */25if (!assertMakeDir("d1", 0755)) return;26if (!assertMakeDir("d1/d2", 0755)) return;27if (!assertMakeFile("f", 0644, "")) return;28if (!assertMakeFile("d1/f1", 0644, "")) return;29if (!assertMakeFile("d1/f2", 0644, "")) return;30if (!assertMakeFile("d1/d2/f3", 0644, "")) return;31if (!assertMakeFile("d1/d2/f4", 0644, "")) return;32if (!assertMakeFile("d1/d2/f5", 0644, "")) return;33if (!assertMakeFile("d1/d2/f6", 0644, "")) return;34/* Some platforms don't permit such things; just skip it. */35gnarlyFilesSupported = tryMakeFile("d1/d2/f\x0a");3637/* Populate a file list */38f = fopen("filelist", "w+");39if (!assert(f != NULL))40return;41/* Use a variety of text line endings. */42fprintf(f, "f\x0d"); /* CR */43fprintf(f, "d1/f1\x0d\x0a"); /* CRLF */44fprintf(f, "d1/d2/f4\x0a"); /* NL */45fprintf(f, "d1/d2/f6"); /* EOF */46fclose(f);4748/* Populate a second file list */49f = fopen("filelist2", "w+");50if (!assert(f != NULL))51return;52/* Use null-terminated names. */53fprintf(f, "d1/d2/f3");54assertEqualInt(1, fwrite("\0", 1, 1, f));55fprintf(f, "d1/d2/f5");56assertEqualInt(1, fwrite("\0", 1, 1, f));57if (gnarlyFilesSupported) {58fprintf(f, "d1/d2/f\x0a");59assertEqualInt(1, fwrite("\0", 1, 1, f));60}61fclose(f);6263/* Use -c -T to archive up the files. */64r = systemf("%s -c -f test1.tar -T filelist > test1.out 2> test1.err",65testprog);66assert(r == 0);67assertEmptyFile("test1.out");68assertEmptyFile("test1.err");6970/* Use -x -T to dearchive the files */71if (!assertMakeDir("test1", 0755)) return;72systemf("%s -x -f test1.tar -T filelist -C test1"73" > test1b.out 2> test1b.err", testprog);74assertEmptyFile("test1b.out");75assertEmptyFile("test1b.err");7677/* Verify the files were extracted. */78assertFileExists("test1/f");79assertFileExists("test1/d1/f1");80assertFileNotExists("test1/d1/f2");81assertFileNotExists("test1/d1/d2/f3");82assertFileExists("test1/d1/d2/f4");83assertFileNotExists("test1/d1/d2/f5");84assertFileExists("test1/d1/d2/f6");85if (gnarlyFilesSupported) {86assertFileNotExists("test1/d1/d2/f\x0a");87}8889/* Use -r -T to add more files to the archive. */90systemf("%s -r -f test1.tar --null -T filelist2 > test2.out 2> test2.err",91testprog);92assertEmptyFile("test2.out");93assertEmptyFile("test2.err");9495/* Use -x without -T to dearchive the files (ensure -r worked) */96if (!assertMakeDir("test3", 0755)) return;97systemf("%s -x -f test1.tar -C test3"98" > test3.out 2> test3.err", testprog);99assertEmptyFile("test3.out");100assertEmptyFile("test3.err");101/* Verify the files were extracted.*/102assertFileExists("test3/f");103assertFileExists("test3/d1/f1");104assertFileNotExists("test3/d1/f2");105assertFileExists("test3/d1/d2/f3");106assertFileExists("test3/d1/d2/f4");107assertFileExists("test3/d1/d2/f5");108assertFileExists("test3/d1/d2/f6");109if (gnarlyFilesSupported) {110assertFileExists("test3/d1/d2/f\x0a");111}112113/* Use -x -T to dearchive the files (verify -x -T together) */114if (!assertMakeDir("test2", 0755)) return;115systemf("%s -x -f test1.tar -T filelist -C test2"116" > test2b.out 2> test2b.err", testprog);117assertEmptyFile("test2b.out");118assertEmptyFile("test2b.err");119/* Verify the files were extracted.*/120assertFileExists("test2/f");121assertFileExists("test2/d1/f1");122assertFileNotExists("test2/d1/f2");123assertFileNotExists("test2/d1/d2/f3");124assertFileExists("test2/d1/d2/f4");125assertFileNotExists("test2/d1/d2/f5");126assertFileExists("test2/d1/d2/f6");127if (gnarlyFilesSupported) {128assertFileNotExists("test2/d1/d2/f\x0a");129}130131assertMakeDir("test4", 0755);132assertMakeDir("test4_out", 0755);133assertMakeDir("test4_out2", 0755);134assertMakeDir("test4/d1", 0755);135assertMakeFile("test4/d1/foo", 0644, "");136137138/* TODO: Include some use of -C directory-changing within the filelist. */139/* I'm pretty sure -C within the filelist is broken on extract. */140}141142143