From owner-svn-src-head@FreeBSD.ORG Sat Mar 7 02:58:15 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D4321106566B; Sat, 7 Mar 2009 02:58:15 +0000 (UTC) (envelope-from kientzle@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C1FA88FC0C; Sat, 7 Mar 2009 02:58:15 +0000 (UTC) (envelope-from kientzle@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n272wFlN036468; Sat, 7 Mar 2009 02:58:15 GMT (envelope-from kientzle@svn.freebsd.org) Received: (from kientzle@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n272wFxZ036467; Sat, 7 Mar 2009 02:58:15 GMT (envelope-from kientzle@svn.freebsd.org) Message-Id: <200903070258.n272wFxZ036467@svn.freebsd.org> From: Tim Kientzle Date: Sat, 7 Mar 2009 02:58:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r189478 - head/lib/libarchive X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Mar 2009 02:58:16 -0000 Author: kientzle Date: Sat Mar 7 02:58:15 2009 New Revision: 189478 URL: http://svn.freebsd.org/changeset/base/189478 Log: Merge r511,r513,r607 from libarchive.googlecode.com: Mtree reader tweaks: Support nanosecond timestamps, handle attributes broken across multiple lines. Modified: head/lib/libarchive/archive_read_support_format_mtree.c Modified: head/lib/libarchive/archive_read_support_format_mtree.c ============================================================================== --- head/lib/libarchive/archive_read_support_format_mtree.c Sat Mar 7 02:51:18 2009 (r189477) +++ head/lib/libarchive/archive_read_support_format_mtree.c Sat Mar 7 02:58:15 2009 (r189478) @@ -891,8 +891,17 @@ parse_keyword(struct archive_read *a, st break; } if (strcmp(key, "time") == 0) { + time_t m; + long ns; + *parsed_kws |= MTREE_HAS_MTIME; - archive_entry_set_mtime(entry, mtree_atol10(&val), 0); + m = (time_t)mtree_atol10(&val); + if (*val == '.') { + ++val; + ns = (long)mtree_atol10(&val); + } else + ns = 0; + archive_entry_set_mtime(entry, m, ns); break; } if (strcmp(key, "type") == 0) { @@ -1225,6 +1234,7 @@ readline(struct archive_read *a, struct { ssize_t bytes_read; ssize_t total_size = 0; + ssize_t find_off = 0; const void *t; const char *s; void *p; @@ -1262,9 +1272,7 @@ readline(struct archive_read *a, struct /* Null terminate. */ mtree->line.s[total_size] = '\0'; /* If we found an unescaped '\n', clean up and return. */ - if (p == NULL) - continue; - for (u = mtree->line.s; *u; ++u) { + for (u = mtree->line.s + find_off; *u; ++u) { if (u[0] == '\n') { *start = mtree->line.s; return total_size; @@ -1285,8 +1293,12 @@ readline(struct archive_read *a, struct memmove(u, u + 1, total_size - (u - mtree->line.s) + 1); --total_size; - continue; + ++u; + break; } + if (u[1] == '\0') + break; } + find_off = u - mtree->line.s; } }