Mon Jul 14 14:54:31 2008 UTC ()
Merge changes from libarchive-2.5.5.


(joerg)
diff -r1.3 -r1.4 pkgsrc/archivers/libarchive/files/libarchive/archive_entry_link_resolver.c

cvs diff -r1.3 -r1.4 pkgsrc/archivers/libarchive/files/libarchive/archive_entry_link_resolver.c (expand / switch to unified diff)

--- pkgsrc/archivers/libarchive/files/libarchive/archive_entry_link_resolver.c 2008/05/25 19:45:02 1.3
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_entry_link_resolver.c 2008/07/14 14:54:31 1.4
@@ -14,27 +14,27 @@ @@ -14,27 +14,27 @@
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 17 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26#include "archive_platform.h" 26#include "archive_platform.h"
27__FBSDID("$FreeBSD: src/lib/libarchive/archive_entry_link_resolver.c,v 1.1 2007/12/30 04:58:21 kientzle Exp $"); 27__FBSDID("$FreeBSD: src/lib/libarchive/archive_entry_link_resolver.c,v 1.3 2008/06/15 04:31:43 kientzle Exp $");
28 28
29#ifdef HAVE_SYS_STAT_H 29#ifdef HAVE_SYS_STAT_H
30#include <sys/stat.h> 30#include <sys/stat.h>
31#endif 31#endif
32#ifdef HAVE_ERRNO_H 32#ifdef HAVE_ERRNO_H
33#include <errno.h> 33#include <errno.h>
34#endif 34#endif
35#include <stdio.h> 35#include <stdio.h>
36#ifdef HAVE_STDLIB_H 36#ifdef HAVE_STDLIB_H
37#include <stdlib.h> 37#include <stdlib.h>
38#endif 38#endif
39#ifdef HAVE_STRING_H 39#ifdef HAVE_STRING_H
40#include <string.h> 40#include <string.h>
@@ -173,26 +173,29 @@ archive_entry_linkify(struct archive_ent @@ -173,26 +173,29 @@ archive_entry_linkify(struct archive_ent
173 173
174 if (*e == NULL) { 174 if (*e == NULL) {
175 le = next_entry(res); 175 le = next_entry(res);
176 if (le != NULL) { 176 if (le != NULL) {
177 *e = le->entry; 177 *e = le->entry;
178 le->entry = NULL; 178 le->entry = NULL;
179 } 179 }
180 return; 180 return;
181 } 181 }
182 182
183 /* If it has only one link, then we're done. */ 183 /* If it has only one link, then we're done. */
184 if (archive_entry_nlink(*e) == 1) 184 if (archive_entry_nlink(*e) == 1)
185 return; 185 return;
 186 /* Directories never have hardlinks. */
 187 if (archive_entry_filetype(*e) == AE_IFDIR)
 188 return;
186 189
187 switch (res->strategy) { 190 switch (res->strategy) {
188 case ARCHIVE_ENTRY_LINKIFY_LIKE_TAR: 191 case ARCHIVE_ENTRY_LINKIFY_LIKE_TAR:
189 le = find_entry(res, *e); 192 le = find_entry(res, *e);
190 if (le != NULL) { 193 if (le != NULL) {
191 archive_entry_set_size(*e, 0); 194 archive_entry_set_size(*e, 0);
192 archive_entry_copy_hardlink(*e, 195 archive_entry_copy_hardlink(*e,
193 archive_entry_pathname(le->canonical)); 196 archive_entry_pathname(le->canonical));
194 } else 197 } else
195 insert_entry(res, *e); 198 insert_entry(res, *e);
196 return; 199 return;
197 case ARCHIVE_ENTRY_LINKIFY_LIKE_MTREE: 200 case ARCHIVE_ENTRY_LINKIFY_LIKE_MTREE:
198 le = find_entry(res, *e); 201 le = find_entry(res, *e);