Date: Mon, 12 Dec 2016 02:11:30 +0000 (UTC) From: Ngie Cooper <ngie@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r309864 - vendor/libarchive/dist/tar/test Message-ID: <201612120211.uBC2BUJM063541@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ngie Date: Mon Dec 12 02:11:30 2016 New Revision: 309864 URL: https://svnweb.freebsd.org/changeset/base/309864 Log: Merge PR to address tar/test coverity issues Obtained from: libarchive (fd0ea220635939ffe4b9ffb5cacaaa526a25b5ae) Modified: vendor/libarchive/dist/tar/test/main.c vendor/libarchive/dist/tar/test/test_leading_slash.c vendor/libarchive/dist/tar/test/test_option_a.c vendor/libarchive/dist/tar/test/test_option_b.c vendor/libarchive/dist/tar/test/test_option_b64encode.c vendor/libarchive/dist/tar/test/test_option_gid_gname.c vendor/libarchive/dist/tar/test/test_option_grzip.c vendor/libarchive/dist/tar/test/test_option_j.c vendor/libarchive/dist/tar/test/test_option_lrzip.c vendor/libarchive/dist/tar/test/test_option_lz4.c vendor/libarchive/dist/tar/test/test_option_lzma.c vendor/libarchive/dist/tar/test/test_option_lzop.c vendor/libarchive/dist/tar/test/test_option_r.c vendor/libarchive/dist/tar/test/test_option_uid_uname.c vendor/libarchive/dist/tar/test/test_option_uuencode.c vendor/libarchive/dist/tar/test/test_option_xz.c vendor/libarchive/dist/tar/test/test_option_z.c vendor/libarchive/dist/tar/test/test_stdio.c vendor/libarchive/dist/tar/test/test_version.c Modified: vendor/libarchive/dist/tar/test/main.c ============================================================================== --- vendor/libarchive/dist/tar/test/main.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/main.c Mon Dec 12 02:11:30 2016 (r309864) @@ -1060,7 +1060,7 @@ assertion_file_contains_lines_any_order( char **expected = NULL; char *p, **actual = NULL; char c; - int expected_failure = 0, actual_failure = 0; + int expected_failure = 0, actual_failure = 0, retval = 0; assertion_count(file, line); @@ -1081,8 +1081,7 @@ assertion_file_contains_lines_any_order( if (expected == NULL) { failure_start(pathname, line, "Can't allocate memory"); failure_finish(NULL); - free(expected); - return (0); + goto done; } for (i = 0; lines[i] != NULL; ++i) { expected[i] = strdup(lines[i]); @@ -1103,8 +1102,7 @@ assertion_file_contains_lines_any_order( if (actual == NULL) { failure_start(pathname, line, "Can't allocate memory"); failure_finish(NULL); - free(expected); - return (0); + goto done; } for (j = 0, p = buff; p < buff + buff_size; p += 1 + strlen(p)) { @@ -1141,27 +1139,27 @@ assertion_file_contains_lines_any_order( ++actual_failure; } if (expected_failure == 0 && actual_failure == 0) { - free(buff); - free(expected); - free(actual); - return (1); + retval = 1; + goto done; } failure_start(file, line, "File doesn't match: %s", pathname); for (i = 0; i < expected_count; ++i) { - if (expected[i] != NULL) { + if (expected[i] != NULL) logprintf(" Expected but not present: %s\n", expected[i]); - free(expected[i]); - } } for (j = 0; j < actual_count; ++j) { if (actual[j] != NULL) logprintf(" Present but not expected: %s\n", actual[j]); } failure_finish(NULL); +done: + free(actual); free(buff); + for (i = 0; i < expected_count; ++i) + free(expected[i]); free(expected); - free(actual); - return (0); + + return (retval); } /* Verify that a text file does not contains the specified strings */ @@ -1590,7 +1588,7 @@ is_symlink(const char *file, int line, * really not much point in bothering with this. */ return (0); #else - char buff[300]; + char buff[301]; struct stat st; ssize_t linklen; int r; @@ -1607,7 +1605,7 @@ is_symlink(const char *file, int line, return (0); if (contents == NULL) return (1); - linklen = readlink(pathname, buff, sizeof(buff)); + linklen = readlink(pathname, buff, sizeof(buff) - 1); if (linklen < 0) { failure_start(file, line, "Can't read symlink %s", pathname); failure_finish(NULL); @@ -2324,7 +2322,7 @@ extract_reference_file(const char *name) for (;;) { if (fgets(buff, sizeof(buff), in) == NULL) { /* TODO: This is a failure. */ - return; + goto done; } if (memcmp(buff, "begin ", 6) == 0) break; @@ -2365,6 +2363,7 @@ extract_reference_file(const char *name) } } fclose(out); +done: fclose(in); } @@ -2958,8 +2957,8 @@ main(int argc, char **argv) strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp), "%Y-%m-%dT%H.%M.%S", localtime(&now)); - sprintf(tmpdir, "%s/%s.%s-%03d", tmp, progname, - tmpdir_timestamp, i); + snprintf(tmpdir, sizeof(tmpdir), "%s/%s.%s-%03d", tmp, + progname, tmpdir_timestamp, i); if (assertMakeDir(tmpdir,0755)) break; if (i >= 999) { Modified: vendor/libarchive/dist/tar/test/test_leading_slash.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_leading_slash.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_leading_slash.c Mon Dec 12 02:11:30 2016 (r309864) @@ -44,6 +44,7 @@ DEFINE_TEST(test_leading_slash) if (assertFileExists("test.err")) { errfile = slurpfile(&errfile_size, "test.err"); assert(strstr(errfile, expected_errmsg) != NULL); + free(errfile); } } Modified: vendor/libarchive/dist/tar/test/test_option_a.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_a.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_a.c Mon Dec 12 02:11:30 2016 (r309864) @@ -43,6 +43,7 @@ DEFINE_TEST(test_option_a) assert(s > 2); failure("The archive should be compressed"); assertEqualMem(p, "\x1f\x9d", 2); + free(p); /* Test2: archive it with .taZ suffix. */ assertEqualInt(0, @@ -53,6 +54,7 @@ DEFINE_TEST(test_option_a) assert(s > 2); failure("The archive should be compressed"); assertEqualMem(p, "\x1f\x9d", 2); + free(p); /* Test3: archive it with .tar.Z.uu suffix. */ assertEqualInt(0, @@ -63,6 +65,7 @@ DEFINE_TEST(test_option_a) assert(s > 12); failure("The archive should be uuencoded"); assertEqualMem(p, "begin 644 -\n", 12); + free(p); /* Test4: archive it with .zip suffix. */ assertEqualInt(0, @@ -73,6 +76,7 @@ DEFINE_TEST(test_option_a) assert(s > 4); failure("The archive should be zipped"); assertEqualMem(p, "\x50\x4b\x03\x04", 4); + free(p); /* Test5: archive it with .tar.Z suffix and --uuencode option. */ assertEqualInt(0, @@ -84,6 +88,7 @@ DEFINE_TEST(test_option_a) assert(s > 2); failure("The archive should be compressed, ignoring --uuencode option"); assertEqualMem(p, "\x1f\x9d", 2); + free(p); /* Test6: archive it with .xxx suffix(unknown suffix) and * --uuencode option. */ @@ -96,6 +101,7 @@ DEFINE_TEST(test_option_a) assert(s > 12); failure("The archive should be uuencoded"); assertEqualMem(p, "begin 644 -\n", 12); + free(p); /* Test7: archive it with .tar.Z suffix using a long-name option. */ assertEqualInt(0, @@ -107,4 +113,5 @@ DEFINE_TEST(test_option_a) assert(s > 2); failure("The archive should be compressed"); assertEqualMem(p, "\x1f\x9d", 2); + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_b.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_b.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_b.c Mon Dec 12 02:11:30 2016 (r309864) @@ -78,4 +78,6 @@ DEFINE_TEST(test_option_b) * Note: It's not possible to verify at this level that blocks * are getting written with the */ + + free(testprog_ustar); } Modified: vendor/libarchive/dist/tar/test/test_option_b64encode.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_b64encode.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_b64encode.c Mon Dec 12 02:11:30 2016 (r309864) @@ -42,6 +42,7 @@ DEFINE_TEST(test_option_b64encode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin-base64 644", 16); + free(p); /* Archive it with uuencode only. */ assertEqualInt(0, @@ -51,4 +52,5 @@ DEFINE_TEST(test_option_b64encode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin-base64 644", 16); + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_gid_gname.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_gid_gname.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_gid_gname.c Mon Dec 12 02:11:30 2016 (r309864) @@ -53,6 +53,7 @@ DEFINE_TEST(test_option_gid_gname) /* Should force gid and gname fields in ustar header. */ assertEqualMem(data + 116, "000021 \0", 8); assertEqualMem(data + 297, "foofoofoo\0", 10); + free(data); /* Again with just --gname */ failure("Error invoking %s c", testprog); @@ -65,6 +66,8 @@ DEFINE_TEST(test_option_gid_gname) /* Gid should be unchanged from original reference. */ assertEqualMem(data + 116, reference + 116, 8); assertEqualMem(data + 297, "foofoofoo\0", 10); + free(data); + free(reference); /* Again with --gid and force gname to empty. */ failure("Error invoking %s c", testprog); @@ -77,6 +80,7 @@ DEFINE_TEST(test_option_gid_gname) assertEqualMem(data + 116, "000021 \0", 8); /* Gname field in ustar header should be empty. */ assertEqualMem(data + 297, "\0", 1); + free(data); /* TODO: It would be nice to verify that --gid= by itself * will look up the associated gname and use that, but Modified: vendor/libarchive/dist/tar/test/test_option_grzip.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_grzip.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_grzip.c Mon Dec 12 02:11:30 2016 (r309864) @@ -45,8 +45,11 @@ DEFINE_TEST(test_option_grzip) testprog)); p = slurpfile(&s, "archive.err"); p[s] = '\0'; + free(p); + /* Check that the archive file has an grzip signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "GRZipII\x00\x02\x04:)", 12); + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_j.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_j.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_j.c Mon Dec 12 02:11:30 2016 (r309864) @@ -42,15 +42,18 @@ DEFINE_TEST(test_option_j) if (r != 0) { if (!canBzip2()) { skipping("bzip2 is not supported on this platform"); - return; + goto done; } failure("-j option is broken"); assertEqualInt(r, 0); - return; + goto done; } + free(p); assertEmptyFile("archive.err"); /* Check that the archive file has a bzip2 signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "BZh9", 4); +done: + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_lrzip.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_lrzip.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_lrzip.c Mon Dec 12 02:11:30 2016 (r309864) @@ -45,8 +45,10 @@ DEFINE_TEST(test_option_lrzip) testprog)); p = slurpfile(&s, "archive.err"); p[s] = '\0'; + free(p); /* Check that the archive file has an lzma signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "LRZI\x00", 5); + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_lz4.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_lz4.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_lz4.c Mon Dec 12 02:11:30 2016 (r309864) @@ -43,7 +43,7 @@ DEFINE_TEST(test_option_lz4) if (strstr(p, "Unsupported compression") != NULL) { skipping("This version of bsdtar was compiled " "without lz4 support"); - return; + goto done; } /* POSIX permits different handling of the spawnp * system call used to launch the subsidiary @@ -52,7 +52,7 @@ DEFINE_TEST(test_option_lz4) if (strstr(p, "Can't launch") != NULL && !canLz4()) { skipping("This version of bsdtar uses an external lz4 program " "but no such program is available on this system."); - return; + goto done; } /* Some systems successfully spawn the new process, * but fail to exec a program within that process. @@ -61,14 +61,18 @@ DEFINE_TEST(test_option_lz4) if (strstr(p, "Can't write") != NULL && !canLz4()) { skipping("This version of bsdtar uses an external lz4 program " "but no such program is available on this system."); - return; + goto done; } failure("--lz4 option is broken: %s", p); assertEqualInt(r, 0); - return; + goto done; } + free(p); /* Check that the archive file has an lz4 signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\x04\x22\x4d\x18", 4); + +done: + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_lzma.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_lzma.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_lzma.c Mon Dec 12 02:11:30 2016 (r309864) @@ -48,10 +48,13 @@ DEFINE_TEST(test_option_lzma) } failure("--lzma option is broken"); assertEqualInt(r, 0); - return; + goto done; } + free(p); /* Check that the archive file has an lzma signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\x5d\00\00", 3); +done: + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_lzop.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_lzop.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_lzop.c Mon Dec 12 02:11:30 2016 (r309864) @@ -42,14 +42,17 @@ DEFINE_TEST(test_option_lzop) if (r != 0) { if (!canLzop()) { skipping("lzop is not supported on this platform"); - return; + goto done; } failure("--lzop option is broken"); assertEqualInt(r, 0); - return; + goto done; } + free(p); /* Check that the archive file has an lzma signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a", 9); +done: + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_r.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_r.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_r.c Mon Dec 12 02:11:30 2016 (r309864) @@ -36,6 +36,10 @@ DEFINE_TEST(test_option_r) size_t s, buff_size_rounded; int r, i; + buff = NULL; + p0 = NULL; + p1 = NULL; + /* Create an archive with one file. */ assertMakeFile("f1", 0644, "abc"); r = systemf("%s cf archive.tar --format=ustar f1 >step1.out 2>step1.err", testprog); @@ -47,11 +51,9 @@ DEFINE_TEST(test_option_r) /* Do some basic validation of the constructed archive. */ p0 = slurpfile(&s, "archive.tar"); if (!assert(p0 != NULL)) - return; - if (!assert(s >= 2048)) { - free(p0); - return; - } + goto done; + if (!assert(s >= 2048)) + goto done; assertEqualMem(p0 + 0, "f1", 3); assertEqualMem(p0 + 512, "abc", 3); assertEqualMem(p0 + 1024, "\0\0\0\0\0\0\0\0", 8); @@ -60,10 +62,8 @@ DEFINE_TEST(test_option_r) /* Edit that file with a lot more data and update the archive with a new copy. */ buff = malloc(buff_size); assert(buff != NULL); - if (buff == NULL) { - free(p0); - return; - } + if (buff == NULL) + goto done; for (i = 0; i < (int)buff_size; ++i) buff[i] = "abcdefghijklmnopqrstuvwxyz"[rand() % 26]; @@ -77,10 +77,8 @@ DEFINE_TEST(test_option_r) /* The constructed archive should just have the new entry appended. */ p1 = slurpfile(&s, "archive.tar"); - if (!assert(p1 != NULL)) { - free(p0); - return; - } + if (!assert(p1 != NULL)) + goto done; buff_size_rounded = ((buff_size + 511) / 512) * 512; assert(s >= 2560 + buff_size_rounded); /* Verify first entry is unchanged. */ @@ -105,10 +103,8 @@ DEFINE_TEST(test_option_r) /* Validate the constructed archive. */ p1 = slurpfile(&s, "archive.tar"); - if (!assert(p1 != NULL)) { - free(p0); - return; - } + if (!assert(p1 != NULL)) + goto done; assert(s >= 3584 + buff_size_rounded); /* Verify first two entries are unchanged. */ assertEqualMem(p0, p1, 1536 + buff_size_rounded); @@ -118,7 +114,6 @@ DEFINE_TEST(test_option_r) /* Verify end-of-archive marker. */ assertEqualMem(p1 + 2560 + buff_size_rounded, "\0\0\0\0\0\0\0\0", 8); assertEqualMem(p1 + 3072 + buff_size_rounded, "\0\0\0\0\0\0\0\0", 8); - free(p0); free(p1); /* Unpack everything */ @@ -132,4 +127,7 @@ DEFINE_TEST(test_option_r) /* Verify that the second copy of f1 overwrote the first. */ assertFileContents(buff, (int)strlen(buff), "f1"); +done: + free(buff); + free(p0); } Modified: vendor/libarchive/dist/tar/test/test_option_uid_uname.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_uid_uname.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_uid_uname.c Mon Dec 12 02:11:30 2016 (r309864) @@ -53,6 +53,7 @@ DEFINE_TEST(test_option_uid_uname) /* Should force uid and uname fields in ustar header. */ assertEqualMem(data + 108, "000021 \0", 8); assertEqualMem(data + 265, "foofoofoo\0", 10); + free(data); /* Again with just --uid */ failure("Error invoking %s c", testprog); @@ -65,6 +66,7 @@ DEFINE_TEST(test_option_uid_uname) assertEqualMem(data + 108, "000021 \0", 8); /* Uname field in ustar header should be empty. */ assertEqualMem(data + 265, "\0", 1); + free(data); /* Again with just --uname */ failure("Error invoking %s c", testprog); @@ -77,4 +79,7 @@ DEFINE_TEST(test_option_uid_uname) /* Uid should be unchanged from original reference. */ assertEqualMem(data + 108, reference + 108, 8); assertEqualMem(data + 265, "foofoofoo\0", 10); + free(data); + + free(reference); } Modified: vendor/libarchive/dist/tar/test/test_option_uuencode.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_uuencode.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_uuencode.c Mon Dec 12 02:11:30 2016 (r309864) @@ -42,6 +42,7 @@ DEFINE_TEST(test_option_uuencode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin 644", 9); + free(p); /* Archive it with uuencode only. */ assertEqualInt(0, @@ -51,4 +52,5 @@ DEFINE_TEST(test_option_uuencode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin 644", 9); + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_xz.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_xz.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_xz.c Mon Dec 12 02:11:30 2016 (r309864) @@ -44,14 +44,17 @@ DEFINE_TEST(test_option_xz) if (strstr(p, "Unsupported compression") != NULL) { skipping("This version of bsdtar was compiled " "without xz support"); - return; + goto done; } failure("--xz option is broken"); assertEqualInt(r, 0); - return; + goto done; } + free(p); /* Check that the archive file has an xz signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\xFD\x37\x7A\x58\x5A\x00", 6); +done: + free(p); } Modified: vendor/libarchive/dist/tar/test/test_option_z.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_option_z.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_option_z.c Mon Dec 12 02:11:30 2016 (r309864) @@ -42,14 +42,17 @@ DEFINE_TEST(test_option_z) if (r != 0) { if (!canGzip()) { skipping("gzip is not supported on this platform"); - return; + goto done; } failure("-z option is broken"); assertEqualInt(r, 0); - return; + goto done; } + free(p); /* Check that the archive file has a gzip signature. */ p = slurpfile(&s, "archive.out"); assert(s > 4); assertEqualMem(p, "\x1f\x8b\x08\x00", 4); +done: + free(p); } Modified: vendor/libarchive/dist/tar/test/test_stdio.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_stdio.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_stdio.c Mon Dec 12 02:11:30 2016 (r309864) @@ -116,6 +116,7 @@ DEFINE_TEST(test_stdio) assertEqualInt((int)s, 3); assertEqualMem(p, "abc", 3); /* TODO: Verify xvf.err */ + free(p); /* 'xvf -' should generate list on stderr, empty stdout. */ r = systemf("%s xvf - < archive >xvf-.out 2>xvf-.err", testprog); Modified: vendor/libarchive/dist/tar/test/test_version.c ============================================================================== --- vendor/libarchive/dist/tar/test/test_version.c Mon Dec 12 02:09:31 2016 (r309863) +++ vendor/libarchive/dist/tar/test/test_version.c Mon Dec 12 02:11:30 2016 (r309864) @@ -53,7 +53,7 @@ DEFINE_TEST(test_version) assert(s > 6); failure("Version must start with 'bsdtar': ``%s''", p); if (!assertEqualMem(q, "bsdtar ", 7)) - return; + goto done; q += 7; s -= 7; /* Version number is a series of digits and periods. */ while (s > 0 && (*q == '.' || (*q >= '0' && *q <= '9'))) { @@ -98,5 +98,6 @@ DEFINE_TEST(test_version) failure("Version output must end with \\n or \\r\\n"); if (*q == '\r') { ++q; --s; } assertEqualMem(q, "\n", 1); +done: free(p); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612120211.uBC2BUJM063541>