View | Details | Raw Unified | Return to bug 213255
Collapse All | Expand All

(-)contrib/libarchive/libarchive/archive_write_disk_posix.c (-25 lines)
Lines 2026-2035 create_filesystem_object(struct archive_ Link Here
2026
	const char *linkname;
2026
	const char *linkname;
2027
	mode_t final_mode, mode;
2027
	mode_t final_mode, mode;
2028
	int r;
2028
	int r;
2029
	/* these for check_symlinks_fsobj */
2030
	char *linkname_copy;	/* non-const copy of linkname */
2031
	struct archive_string error_string;
2032
	int error_number;
2033
2029
2034
	/* We identify hard/symlinks according to the link names. */
2030
	/* We identify hard/symlinks according to the link names. */
2035
	/* Since link(2) and symlink(2) don't handle modes, we're done here. */
2031
	/* Since link(2) and symlink(2) don't handle modes, we're done here. */
Lines 2038-2064 create_filesystem_object(struct archive_ Link Here
2038
#if !HAVE_LINK
2034
#if !HAVE_LINK
2039
		return (EPERM);
2035
		return (EPERM);
2040
#else
2036
#else
2041
		archive_string_init(&error_string);
2042
		linkname_copy = strdup(linkname);
2043
		if (linkname_copy == NULL) {
2044
		    return (EPERM);
2045
		}
2046
		/* TODO: consider using the cleaned-up path as the link target? */
2047
		r = cleanup_pathname_fsobj(linkname_copy, &error_number, &error_string, a->flags);
2048
		if (r != ARCHIVE_OK) {
2049
			archive_set_error(&a->archive, error_number, "%s", error_string.s);
2050
			free(linkname_copy);
2051
			/* EPERM is more appropriate than error_number for our callers */
2052
			return (EPERM);
2053
		}
2054
		r = check_symlinks_fsobj(linkname_copy, &error_number, &error_string, a->flags);
2055
		if (r != ARCHIVE_OK) {
2056
			archive_set_error(&a->archive, error_number, "%s", error_string.s);
2057
			free(linkname_copy);
2058
			/* EPERM is more appropriate than error_number for our callers */
2059
			return (EPERM);
2060
		}
2061
		free(linkname_copy);
2062
		r = link(linkname, a->name) ? errno : 0;
2037
		r = link(linkname, a->name) ? errno : 0;
2063
		/*
2038
		/*
2064
		 * New cpio and pax formats allow hardlink entries
2039
		 * New cpio and pax formats allow hardlink entries

Return to bug 213255