Author: kientzle Date: Mon Apr 27 19:30:09 2009 New Revision: 191592 URL: http://svn.freebsd.org/changeset/base/191592
Log: Merge r1061,r1062,r1063 from libarchive.googlecode.com: Fix reading big-endian binary cpio archives, and add a test. While I'm here, add a note about Solaris ACL extension for cpio, which should be relatively straightforward to support. Thanks to: Edward Napierala, who sent me a big-endian cpio archive from a Solaris system he's been playing with. Pointy hat: me Added: head/lib/libarchive/test/test_read_format_cpio_bin_be.c (contents, props changed) head/lib/libarchive/test/test_read_format_cpio_bin_be.cpio.uu (contents, props changed) Modified: head/lib/libarchive/archive_read_support_format_cpio.c head/lib/libarchive/test/Makefile Modified: head/lib/libarchive/archive_read_support_format_cpio.c ============================================================================== --- head/lib/libarchive/archive_read_support_format_cpio.c Mon Apr 27 19:23:53 2009 (r191591) +++ head/lib/libarchive/archive_read_support_format_cpio.c Mon Apr 27 19:30:09 2009 (r191592) @@ -257,6 +257,11 @@ archive_read_format_cpio_read_header(str cpio->entry_bytes_remaining = 0; } + /* XXX TODO: If the full mode is 0160200, then this is a Solaris + * ACL description for the following entry. Read this body + * and parse it as a Solaris-style ACL, then read the next + * header. XXX */ + /* Compare name to "TRAILER!!!" to test for end-of-archive. */ if (namelength == 11 && strcmp((const char *)h, "TRAILER!!!") == 0) { /* TODO: Store file location of start of block. */ @@ -669,7 +674,7 @@ le4(const unsigned char *p) static int be4(const unsigned char *p) { - return (p[0] + (p[1]<<8) + (p[2]<<16) + (p[3]<<24)); + return ((p[0]<<24) + (p[1]<<16) + (p[2]<<8) + (p[3])); } /* Modified: head/lib/libarchive/test/Makefile ============================================================================== --- head/lib/libarchive/test/Makefile Mon Apr 27 19:23:53 2009 (r191591) +++ head/lib/libarchive/test/Makefile Mon Apr 27 19:30:09 2009 (r191592) @@ -39,6 +39,7 @@ TESTS= \ test_read_format_ar.c \ test_read_format_cpio_bin.c \ test_read_format_cpio_bin_Z.c \ + test_read_format_cpio_bin_be.c \ test_read_format_cpio_bin_bz2.c \ test_read_format_cpio_bin_gz.c \ test_read_format_cpio_bin_xz.c \ Added: head/lib/libarchive/test/test_read_format_cpio_bin_be.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libarchive/test/test_read_format_cpio_bin_be.c Mon Apr 27 19:30:09 2009 (r191592) @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "test.h" +__FBSDID("$FreeBSD$"); + +DEFINE_TEST(test_read_format_cpio_bin_be) +{ + struct archive_entry *ae; + struct archive *a; + const char *reference = "test_read_format_cpio_bin_be.cpio"; + + extract_reference_file(reference); + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_open_filename(a, reference, 10)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString(archive_entry_pathname(ae), "file1111222233334444"); + assertEqualInt(archive_entry_size(ae), 5); + assertEqualInt(archive_entry_mtime(ae), 1240664175); + assertEqualInt(archive_entry_mode(ae), AE_IFREG | 0644); + assertEqualInt(archive_entry_uid(ae), 1000); + assertEqualInt(archive_entry_gid(ae), 0); + + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_NONE); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_CPIO_BIN_BE); + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); +} + + Added: head/lib/libarchive/test/test_read_format_cpio_bin_be.cpio.uu ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libarchive/test/test_read_format_cpio_bin_be.cpio.uu Mon Apr 27 19:30:09 2009 (r191592) @@ -0,0 +1,8 @@ +$FreeBSD$ +begin 644 test_read_format_cpio_bin_be.cpio +M<<<`"#P\@:0#Z`````$``$GS"&\`%0````5F:6QE,3$Q,3(R,C(S,S,S-#0T +M-```86)C9&4`<<<```````````````$`````````"P````!44D%)3$52(2$A +M```````````````````````````````````````````````````````````` +3```````````````````````````` +` +end _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"