16c95142eSMartin Matuska /*-
2*bd66c1b4SMartin Matuska * SPDX-License-Identifier: BSD-2-Clause
3*bd66c1b4SMartin Matuska *
46c95142eSMartin Matuska * Copyright (c) 2003-2010 Tim Kientzle
56c95142eSMartin Matuska * All rights reserved.
66c95142eSMartin Matuska */
76c95142eSMartin Matuska #include "test.h"
86c95142eSMartin Matuska
DEFINE_TEST(test_option_0)96c95142eSMartin Matuska DEFINE_TEST(test_option_0)
106c95142eSMartin Matuska {
116c95142eSMartin Matuska FILE *filelist;
126c95142eSMartin Matuska int r;
136c95142eSMartin Matuska
146c95142eSMartin Matuska assertUmask(0);
156c95142eSMartin Matuska
166c95142eSMartin Matuska /* Create a few files. */
176c95142eSMartin Matuska assertMakeFile("file1", 0644, "1234567890");
186c95142eSMartin Matuska assertMakeFile("file2", 0644, "1234567890");
196c95142eSMartin Matuska assertMakeFile("file3", 0644, "1234567890");
206c95142eSMartin Matuska assertMakeFile("file4", 0644, "1234567890");
216c95142eSMartin Matuska
226c95142eSMartin Matuska /* Create a file list of filenames with varying end-of-line. */
236c95142eSMartin Matuska filelist = fopen("filelist", "wb");
246c95142eSMartin Matuska assertEqualInt(fwrite("file1\x0a", 1, 6, filelist), 6);
256c95142eSMartin Matuska assertEqualInt(fwrite("file2\x0d", 1, 6, filelist), 6);
266c95142eSMartin Matuska assertEqualInt(fwrite("file3\x0a\x0d", 1, 7, filelist), 7);
276c95142eSMartin Matuska assertEqualInt(fwrite("file4", 1, 5, filelist), 5);
286c95142eSMartin Matuska fclose(filelist);
296c95142eSMartin Matuska
306c95142eSMartin Matuska /* Create a file list of null-delimited names. */
316c95142eSMartin Matuska filelist = fopen("filelistNull", "wb");
326c95142eSMartin Matuska assertEqualInt(fwrite("file1\0", 1, 6, filelist), 6);
336c95142eSMartin Matuska assertEqualInt(fwrite("file2\0", 1, 6, filelist), 6);
346c95142eSMartin Matuska assertEqualInt(fwrite("file3\0", 1, 6, filelist), 6);
356c95142eSMartin Matuska assertEqualInt(fwrite("file4", 1, 5, filelist), 5);
366c95142eSMartin Matuska fclose(filelist);
376c95142eSMartin Matuska
386c95142eSMartin Matuska assertUmask(022);
396c95142eSMartin Matuska
406c95142eSMartin Matuska /* Pack up using the file list with text line endings. */
416c95142eSMartin Matuska r = systemf("%s -o < filelist > archive 2> stderr1.txt", testprog);
426c95142eSMartin Matuska assertEqualInt(r, 0);
436c95142eSMartin Matuska
446c95142eSMartin Matuska /* Extract into a new dir. */
456c95142eSMartin Matuska assertMakeDir("copy", 0775);
466c95142eSMartin Matuska assertChdir("copy");
476c95142eSMartin Matuska r = systemf("%s -i < ../archive > stdout3.txt 2> stderr3.txt", testprog);
486c95142eSMartin Matuska assertEqualInt(r, 0);
496c95142eSMartin Matuska
506c95142eSMartin Matuska /* Verify the files. */
516c95142eSMartin Matuska assertIsReg("file1", 0644);
526c95142eSMartin Matuska assertIsReg("file2", 0644);
536c95142eSMartin Matuska assertIsReg("file3", 0644);
546c95142eSMartin Matuska assertIsReg("file4", 0644);
556c95142eSMartin Matuska
566c95142eSMartin Matuska assertChdir("..");
576c95142eSMartin Matuska
586c95142eSMartin Matuska /* Pack up using the file list with nulls. */
596c95142eSMartin Matuska r = systemf("%s -o0 < filelistNull > archiveNull 2> stderr2.txt", testprog);
606c95142eSMartin Matuska assertEqualInt(r, 0);
616c95142eSMartin Matuska
626c95142eSMartin Matuska /* Extract into a new dir. */
636c95142eSMartin Matuska assertMakeDir("copyNull", 0775);
646c95142eSMartin Matuska assertChdir("copyNull");
656c95142eSMartin Matuska r = systemf("%s -i < ../archiveNull > stdout4.txt 2> stderr4.txt", testprog);
666c95142eSMartin Matuska assertEqualInt(r, 0);
676c95142eSMartin Matuska
686c95142eSMartin Matuska /* Verify the files. */
696c95142eSMartin Matuska assertIsReg("file1", 0644);
706c95142eSMartin Matuska assertIsReg("file2", 0644);
716c95142eSMartin Matuska assertIsReg("file3", 0644);
726c95142eSMartin Matuska assertIsReg("file4", 0644);
736c95142eSMartin Matuska }
74