xref: /freebsd/contrib/libarchive/cpio/test/test_passthrough_dotdot.c (revision bd66c1b43e33540205dbc1187c2f2a15c58b57ba)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2003-2007 Tim Kientzle
5  * All rights reserved.
6  */
7 #include "test.h"
8 
9 /*
10  * Verify that "cpio -p .." works.
11  */
12 
DEFINE_TEST(test_passthrough_dotdot)13 DEFINE_TEST(test_passthrough_dotdot)
14 {
15 	int r;
16 	FILE *filelist;
17 
18 	assertUmask(0);
19 
20 	/*
21 	 * Create an assortment of files on disk.
22 	 */
23 	filelist = fopen("filelist", "w");
24 
25 	/* Directory. */
26 	assertMakeDir("dir", 0755);
27 	assertChdir("dir");
28 
29 	fprintf(filelist, ".\n");
30 
31 	/* File with 10 bytes content. */
32 	assertMakeFile("file", 0642, "1234567890");
33 	fprintf(filelist, "file\n");
34 
35 	/* All done. */
36 	fclose(filelist);
37 
38 
39 	/*
40 	 * Use cpio passthrough mode to copy files to another directory.
41 	 */
42 	r = systemf("%s -pdvm .. <../filelist >../stdout 2>../stderr",
43 	    testprog);
44 	failure("Error invoking %s -pd ..", testprog);
45 	assertEqualInt(r, 0);
46 
47 	assertChdir("..");
48 
49 	/* Verify stderr and stdout. */
50 	assertTextFileContents("../.\n../file\n1 block\n", "stderr");
51 	assertEmptyFile("stdout");
52 
53 	/* Regular file. */
54 	assertIsReg("file", 0642);
55 	assertFileSize("file", 10);
56 	assertFileNLinks("file", 1);
57 }
58