Date: Fri, 24 Jul 2009 21:19:45 -0700 From: Tim Kientzle <kientzle@freebsd.org> To: Jung-uk Kim <jkim@freebsd.org> Cc: freebsd-current@freebsd.org Subject: Re: Joliet and release ISOs? Message-ID: <4A6A87E1.8030504@freebsd.org> In-Reply-To: <200907241514.18806.jkim@FreeBSD.org> References: <4A615602.4090000@freebsd.org> <200907231903.46474.jkim@FreeBSD.org> <4A694DBB.8080800@freebsd.org> <200907241514.18806.jkim@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------060103060203010600040401
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Jung-uk Kim wrote:
>
> Still, there is one minor annoyance:
>
> %ls -l test
> total 0
> lrwxr-xr-x 1 jkim staff 1 7 24 14:54 link1 -> /
> lrwxr-xr-x 1 jkim staff 2 7 24 14:55 link2 -> //
> lrwxr-xr-x 1 jkim staff 2 7 24 14:55 link3 -> /.
> lrwxr-xr-x 1 jkim staff 2 7 24 14:55 link4 -> ./
> lrwxr-xr-x 1 jkim staff 2 7 24 14:55 link5 -> ..
> lrwxr-xr-x 1 jkim staff 4 7 24 14:56 link6 -> /tmp
> lrwxr-xr-x 1 jkim staff 5 7 24 14:56 link7 -> //tmp
> lrwxr-xr-x 1 jkim staff 4 7 24 14:56 link8 -> tmp/
> lrwxr-xr-x 1 jkim staff 5 7 24 14:56 link9 -> /tmp/
> %tar -t --options=\!joliet -v -f test.iso
> drwx------ 0 0 0 2048 7 24 14:56 .
> lr-xr-xr-x 1 0 0 0 7 24 14:56 link9 -> //tmp/
> lr-xr-xr-x 1 0 0 0 7 24 14:56 link8 -> tmp/
> lr-xr-xr-x 1 0 0 0 7 24 14:56 link7 -> ///tmp
> lr-xr-xr-x 1 0 0 0 7 24 14:56 link6 -> //tmp
> lr-xr-xr-x 1 0 0 0 7 24 14:55 link5 -> ..
> lr-xr-xr-x 1 0 0 0 7 24 14:55 link4 -> ./
> lr-xr-xr-x 1 0 0 0 7 24 14:55 link3 -> //.
> lr-xr-xr-x 1 0 0 0 7 24 14:55 link2 -> ///
> lr-xr-xr-x 1 0 0 0 7 24 14:54 link1 -> /
>
> Note there is an additional `/' when the link has a leading `/' (but
> not just `/'), i.e., `//' => `///', `/.' => `//.', `/tmp' => `//tmp',
> `//tmp' => `///tmp'. For FreeBSD CD-ROMs, `stand -> /rescue' becomes
> `stand -> //rescue', etc.
Here's another patch for you to try; this changes how
libarchive parses Rockridge "SL" extensions.
Cheers,
Tim
P.S. Could you email me privately the "test.iso" image
you created on your machine? I tried creating one here
and get slightly different behavior. Also, what version
of mkisofs do you have installed on your machine?
--------------060103060203010600040401
Content-Type: text/x-patch;
name="libarchive_iso9660_symlink.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="libarchive_iso9660_symlink.patch"
Index: archive_read_support_format_iso9660.c
===================================================================
--- archive_read_support_format_iso9660.c (revision 195838)
+++ archive_read_support_format_iso9660.c (working copy)
@@ -1174,12 +1175,12 @@
parse_rockridge_SL1(struct file_info *file, const unsigned char *data,
int data_length)
{
- int component_continues = 1;
+ const char *separator = "";
- if (!file->symlink_continues)
+ if (!file->symlink_continues || file->symlink.length < 1)
archive_string_empty(&file->symlink);
- else
- archive_strcat(&file->symlink, "/");
+ else if (file->symlink.s[file->symlink.length - 1] != '/')
+ separator = "/";
file->symlink_continues = 0;
/*
@@ -1216,9 +1217,8 @@
unsigned char nlen = *data++;
data_length -= 2;
- if (!component_continues)
- archive_strcat(&file->symlink, "/");
- component_continues = 0;
+ archive_strcat(&file->symlink, separator);
+ separator = "/";
switch(flag) {
case 0: /* Usual case, this is text. */
@@ -1232,7 +1232,7 @@
return;
archive_strncat(&file->symlink,
(const char *)data, nlen);
- component_continues = 1;
+ separator = "";
break;
case 0x02: /* Current dir. */
archive_strcat(&file->symlink, ".");
@@ -1243,6 +1243,7 @@
case 0x08: /* Root of filesystem. */
archive_string_empty(&file->symlink);
archive_strcat(&file->symlink, "/");
+ separator = "";
break;
case 0x10: /* Undefined (historically "volume root" */
archive_string_empty(&file->symlink);
--------------060103060203010600040401--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A6A87E1.8030504>
