summaryrefslogtreecommitdiffstats
path: root/lib/libarchive/test/test_tar_filenames.c
diff options
context:
space:
mode:
authorkientzle <kientzle@FreeBSD.org>2007-06-11 05:17:30 +0000
committerkientzle <kientzle@FreeBSD.org>2007-06-11 05:17:30 +0000
commit38906e07a0380901105855d09ef8d45bfb5402d7 (patch)
tree7be2e12a244988cd91c7f96d20f26ae1a7efeee9 /lib/libarchive/test/test_tar_filenames.c
parent1f5ee5cc4f4a98060ee7b74f237169570dcda597 (diff)
downloadFreeBSD-src-38906e07a0380901105855d09ef8d45bfb5402d7.zip
FreeBSD-src-38906e07a0380901105855d09ef8d45bfb5402d7.tar.gz
Don't lose leading '/' for pathnames exactly 101 bytes long.
Also, update the test harness to exercise this case.
Diffstat (limited to 'lib/libarchive/test/test_tar_filenames.c')
-rw-r--r--lib/libarchive/test/test_tar_filenames.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/libarchive/test/test_tar_filenames.c b/lib/libarchive/test/test_tar_filenames.c
index fb15a96..b534174 100644
--- a/lib/libarchive/test/test_tar_filenames.c
+++ b/lib/libarchive/test/test_tar_filenames.c
@@ -31,8 +31,8 @@ __FBSDID("$FreeBSD$");
* filenames into prefix/suffix.
*/
-static void
-test_filename(int dlen, int flen)
+static
+test_filename(const char *prefix, int dlen, int flen)
{
char buff[8192];
char filename[400];
@@ -40,12 +40,17 @@ test_filename(int dlen, int flen)
struct archive_entry *ae;
struct archive *a;
size_t used;
- int i;
+ size_t prefix_length = 0;
+ int i = 0;
- for (i = 0; i < dlen; i++)
+ if (prefix) {
+ strcpy(filename, prefix);
+ i = prefix_length = strlen(prefix);
+ }
+ for (; i < prefix_length + dlen; i++)
filename[i] = 'a';
filename[i++] = '/';
- for (; i < dlen + flen + 1; i++)
+ for (; i < prefix_length + dlen + flen + 1; i++)
filename[i] = 'b';
filename[i++] = '\0';
@@ -111,7 +116,7 @@ test_filename(int dlen, int flen)
assertA(0 == archive_read_next_header(a, &ae));
failure("Pathname %d/%d: %s", dlen, flen, archive_entry_pathname(ae));
assertEqualString(filename, archive_entry_pathname(ae));
- assert((S_IFREG | 0755) == archive_entry_mode(ae));
+ assertEqualInt((S_IFREG | 0755), archive_entry_mode(ae));
/*
* Read the two dirs and check the names.
@@ -147,13 +152,15 @@ DEFINE_TEST(test_tar_filenames)
/* Repeat the following for a variety of dir/file lengths. */
for (dlen = 40; dlen < 60; dlen++) {
for (flen = 40; flen < 60; flen++) {
- test_filename(dlen, flen);
+ test_filename(NULL, dlen, flen);
+ test_filename("/", dlen, flen);
}
}
for (dlen = 140; dlen < 160; dlen++) {
for (flen = 90; flen < 110; flen++) {
- test_filename(dlen, flen);
+ test_filename(NULL, dlen, flen);
+ test_filename("/", dlen, flen);
}
}
}
OpenPOWER on IntegriCloud