This commit is contained in:
Chris Brown committed 2025-08-08 20:15:35 -04:00
1 parent da65b39c06
commit fb859e6d3f
3 files changed
+77

No files matched your search

+1
View File
@@ -14,6 +14,7 @@ IF(ENABLE_TAR AND ENABLE_TEST)
test_0.c
test_basic.c
test_copy.c
test_crlf_mtree.c
test_empty_mtree.c
test_extract_tar_Z.c
test_extract_tar_bz2.c
+70
View File
@@ -0,0 +1,70 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2018 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Arshan Khanifar <arshankhanifar@gmail.com>
* under sponsorship from the FreeBSD Foundation.
*/
#include "test.h"
DEFINE_TEST(test_crlf_mtree)
{
char *p0;
size_t s;
int r;
p0 = NULL;
char *content = "#mtree\r\n./foo type=file uname=\\\r\nroot gname=root mode=0755\r\n";
char *filename = "output.tar";
#if defined(_WIN32) && !defined(__CYGWIN__)
char *p;
#endif
/* an absolute path to mtree file */
char *mtree_file = "/METALOG.mtree";
char *absolute_path = malloc(strlen(testworkdir) + strlen(mtree_file) + 1);
strcpy(absolute_path, testworkdir);
strcat(absolute_path, mtree_file );
/* Create an archive using an mtree file. */
assertMakeFile(absolute_path, 0777, content);
assertMakeDir("bar", 0775);
assertMakeFile("bar/foo", 0777, "abc");
#if defined(_WIN32) && !defined(__CYGWIN__)
p = absolute_path;
while(*p != '\0') {
if (*p == '/')
*p = '\\';
p++;
}
r = systemf("%s -cf %s -C bar @%s >step1.out 2>step1.err", testprog, filename, absolute_path);
failure("Error invoking %s -cf %s -C bar @%s", testprog, filename, absolute_path);
#else
r = systemf("%s -cf %s -C bar \"@%s\" >step1.out 2>step1.err", testprog, filename, absolute_path);
failure("Error invoking %s -cf %s -C bar \"@%s\"", testprog, filename, absolute_path);
#endif
assertEqualInt(r, 0);
assertEmptyFile("step1.out");
assertEmptyFile("step1.err");
/* Do validation of the constructed archive. */
p0 = slurpfile(&s, "output.tar");
if (!assert(p0 != NULL))
goto done;
if (!assert(s >= 2048))
goto done;
assertEqualMem(p0 + 0, "./foo", 5);
assertEqualMem(p0 + 512, "abc", 3);
assertEqualMem(p0 + 1024, "\0\0\0\0\0\0\0\0", 8);
assertEqualMem(p0 + 1536, "\0\0\0\0\0\0\0\0", 8);
done:
free(p0);
free(absolute_path);
}
+6
View File
@@ -4094,6 +4094,9 @@ main(int argc, char **argv)
if (testprogfile == NULL)
{
tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1;
#if defined(_WIN32) && !defined(__CYGWIN__)
tmp2_len += 4;
#endif
if ((tmp2 = malloc(tmp2_len)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
@@ -4102,6 +4105,9 @@ main(int argc, char **argv)
strncpy(tmp2, testprogdir, tmp2_len);
strncat(tmp2, "/", tmp2_len);
strncat(tmp2, PROGRAM, tmp2_len);
#if defined(_WIN32) && !defined(__CYGWIN__)
strncat(tmp2, ".exe", tmp2_len);
#endif
testprogfile = tmp2;
}