| diff -urN cdrtools-1.11a09/mkisofs/README.compression cdrtools-1.11a09-zisofs/mkisofs/README.compression |
| --- cdrtools-1.11a09/mkisofs/README.compression Wed Dec 31 16:00:00 1969 |
| +++ cdrtools-1.11a09-zisofs/mkisofs/README.compression Thu Nov 8 12:01:31 2001 |
| @@ -0,0 +1,17 @@ |
| +Transparent decompression (-z option) is available on Linux kernels |
| +using kernel version 2.4.14 or 2.4.9-ac14 or later. |
| + |
| +You also need the zisofs-tools package, containing the mkzftree |
| +utility, to create the compressed files; this package is available at: |
| + |
| +ftp://ftp.kernel.org/pub/linux/utils/fs/zisofs/ |
| + |
| +The mkzftree utility can also be used to read compressed CD-ROMs on |
| +systems which do not support transparent decompression. |
| + |
| +The use of a separate utility allows compression to be controlled on a |
| +per-file basis. A file which is not compressed can be read on any |
| +system. |
| + |
| +Transparent decompression is implemented as an extension to Rock |
| +Ridge, so Rock Ridge needs to be enabled (-R or -r options.) |
| diff -urN cdrtools-1.11a09/mkisofs/mkisofs.8 cdrtools-1.11a09-zisofs/mkisofs/mkisofs.8 |
| --- cdrtools-1.11a09/mkisofs/mkisofs.8 Mon Jul 9 05:09:08 2001 |
| +++ cdrtools-1.11a09-zisofs/mkisofs/mkisofs.8 Thu Nov 8 12:11:13 2001 |
| @@ -206,7 +206,7 @@ |
| .B \-pad |
| ] |
| [ |
| -.B \-no\-pad |
| +.B \-no-pad |
| ] |
| [ |
| .B \-path-list |
| @@ -383,40 +383,40 @@ |
| .I folder_name |
| ] |
| [ |
| -.B \--cap |
| +.B \-\-cap |
| ] |
| [ |
| -.B \--netatalk |
| +.B \-\-netatalk |
| ] |
| [ |
| -.B \--double |
| +.B \-\-double |
| ] |
| [ |
| -.B \--ethershare |
| +.B \-\-ethershare |
| ] |
| [ |
| -.B \--ushare |
| +.B \-\-ushare |
| ] |
| [ |
| -.B \--exchange |
| +.B \-\-exchange |
| ] |
| [ |
| -.B \--sgi |
| +.B \-\-sgi |
| ] |
| [ |
| -.B \--xinet |
| +.B \-\-xinet |
| ] |
| [ |
| -.B \--macbin |
| +.B \-\-macbin |
| ] |
| [ |
| -.B \--single |
| +.B \-\-single |
| ] |
| [ |
| -.B \--dave |
| +.B \-\-dave |
| ] |
| [ |
| -.B \--sfm |
| +.B \-\-sfm |
| ] |
| .\" end mkhybrid options |
| .B \-o |
| @@ -1398,15 +1398,25 @@ |
| |
| mkisofs \-o cd \-x /local/dir1 \-x /local/dir2 /local |
| .sp |
| -NOTE: The \-m and \-x option description should both be updated, they are wrong. |
| +NOTE: The |
| +.B \-m |
| +and |
| +.B \-x |
| +option description should both be updated, they are wrong. |
| Both now work identical and use filename globbing. A file is excluded if either |
| the last component matches or the whole path matches. |
| .TP |
| .B \-z |
| -Generate special SUSP records for transparently compressed files. This is |
| -only of use and interest for hosts that support transparent decompression. |
| -This is an experimental feature, and no hosts yet support this, but there |
| -are ALPHA patches for Linux that can make use of this feature. |
| +Generate special RRIP records for transparently compressed files. |
| +This is only of use and interest for hosts that support transparent |
| +decompression, such as Linux 2.4.14 or later. You must specify the |
| +.B \-R |
| +or |
| +.B \-r |
| +options to enable RockRidge, and generate compressed files using the |
| +.B mkzftree |
| +utility before running |
| +.BR mkisofs . |
| |
| .SH "HFS OPTIONS |
| .TP |
| @@ -1505,7 +1515,7 @@ |
| .BI \-cluster-size " size |
| Set the size in bytes of the cluster or allocation units of PC Exchange |
| files. Implies the |
| -.B \--exchange |
| +.B \-\-exchange |
| option. See the |
| .B HFS MACINTOSH FILE FORMATS |
| section below. |
| @@ -1612,44 +1622,44 @@ |
| called System Folder, then the whole path name is "./cddata/System Folder" |
| (remember to use quotes if the name contains spaces). |
| .TP |
| -.B \--cap |
| +.B \-\-cap |
| Look for AUFS CAP Macintosh files. Search for CAP Apple/Unix file formats |
| only. Searching for the other possible Apple/Unix file formats is disabled, |
| unless other |
| .I double dash |
| options are given. |
| .TP |
| -.B \--netatalk |
| +.B \-\-netatalk |
| Look for NETATALK Macintosh files |
| .TP |
| -.B \--double |
| +.B \-\-double |
| Look for AppleDouble Macintosh files |
| .TP |
| -.B \--ethershare |
| +.B \-\-ethershare |
| Look for Helios EtherShare Macintosh files |
| .TP |
| -.B \--ushare |
| +.B \-\-ushare |
| Look for IPT UShare Macintosh files |
| .TP |
| -.B \--exchange |
| +.B \-\-exchange |
| Look for PC Exchange Macintosh files |
| .TP |
| -.B \--sgi |
| +.B \-\-sgi |
| Look for SGI Macintosh files |
| .TP |
| -.B \--xinet |
| +.B \-\-xinet |
| Look for XINET Macintosh files |
| .TP |
| -.B \--macbin |
| +.B \-\-macbin |
| Look for MacBinary Macintosh files |
| .TP |
| -.B \--single |
| +.B \-\-single |
| Look for AppleSingle Macintosh files |
| .TP |
| -.B \--dave |
| +.B \-\-dave |
| Look for Thursby Software Systems DAVE Macintosh files |
| .TP |
| -.B \--sfm |
| +.B \-\-sfm |
| Look for Microsoft's Services for Macintosh files (NT only) (Alpha) |
| |
| .SH "CHARACTER SETS |
| @@ -2285,7 +2295,7 @@ |
| The floppy will be mounted as a CAP file system by default. Then run mkisofs |
| using something like: |
| |
| - mkisofs \--cap \-o output source_dir /mnt/floppy |
| + mkisofs \-\-cap \-o output source_dir /mnt/floppy |
| |
| If you are not using Linux, then you can use the hfsutils to copy the icon |
| file from the floppy. However, care has to be taken, as the icon file |
| @@ -2301,7 +2311,7 @@ |
| .B mkisofs |
| by using something like: |
| |
| - mkisofs \--macbin \-o output source_dir icon_dir |
| + mkisofs \-\-macbin \-o output source_dir icon_dir |
| .PP |
| The procedure for creating/using custom folder icons is very similar - paste |
| an icon to folder's "Get Info" box and transfer the resulting 'Icon\\r' |
| @@ -2520,7 +2530,7 @@ |
| that contains |
| Netatalk Apple/Unix files: |
| .PP |
| -% mkisofs \-o cd.iso \--netatalk cd_dir |
| +% mkisofs \-o cd.iso \-\-netatalk cd_dir |
| .PP |
| To create a HFS hybrid CD from the source directory |
| .IR cd_dir , |
| @@ -2754,9 +2764,10 @@ |
| options. |
| |
| .SH "SEE ALSO |
| -.BR cdrecord(1) |
| +.BR cdrecord (1), |
| +.BR mkzftree (1), |
| .BR magic (5), |
| -.BR apple_driver (8) |
| +.BR apple_driver (8). |
| |
| .SH "FUTURE IMPROVEMENTS |
| Some sort of gui interface. |
| @@ -2764,8 +2775,13 @@ |
| .B m\&kisofs |
| is available as part of the cdrecord package from |
| ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ |
| + |
| .B hfsutils |
| from ftp://ftp.mars.org/pub/hfs |
| + |
| +.B mkzftree |
| +is available as part of the zisofs-tools package |
| +from ftp://ftp.kernel.org/pub/linux/utils/fs/zisofs/ |
| .SH "MAILING LISTS |
| If you want to actively take part on the development of m\&kisofs, |
| and/or mkhybrid, |
| diff -urN cdrtools-1.11a09/mkisofs/mkisofs.c cdrtools-1.11a09-zisofs/mkisofs/mkisofs.c |
| --- cdrtools-1.11a09/mkisofs/mkisofs.c Sat Oct 20 15:00:34 2001 |
| +++ cdrtools-1.11a09-zisofs/mkisofs/mkisofs.c Thu Nov 8 11:57:58 2001 |
| @@ -561,10 +561,8 @@ |
| '\0', "#", "Set numbers of load sectors", ONE_DASH}, |
| {{"boot-info-table", no_argument, NULL, OPTION_BOOT_INFO_TABLE}, |
| '\0', NULL, "Patch boot image with info table", ONE_DASH}, |
| -#ifdef ERIC_neverdef |
| {{"transparent-compression", no_argument, NULL, 'z'}, |
| 'z', NULL, "Enable transparent compression of files", ONE_DASH}, |
| -#endif |
| #ifdef APPLE_HYB |
| {{"hfs-type", required_argument, NULL, OPTION_HFS_TYPE}, |
| '\0', "TYPE", "Set HFS default TYPE", ONE_DASH}, |
| @@ -1984,7 +1982,11 @@ |
| error(" but without (standard) Rock Ridge extensions.\n"); |
| error(" It is highly recommended to add Rock Ridge\n"); |
| } |
| - |
| + if (transparent_compression && !use_RockRidge) { |
| + error("Warning: transparent decompression is a Rock Ridge extension, but\n"); |
| + error(" creating filesystem without Rock Ridge attributes; files\n"); |
| + error(" will not be transparently decompressed.\n"); |
| + } |
| init_nls(); /* Initialize UNICODE tables */ |
| |
| /* initialize code tables from a file - if they exists */ |
| diff -urN cdrtools-1.11a09/mkisofs/mkisofs.c.orig cdrtools-1.11a09-zisofs/mkisofs/mkisofs.c.orig |
| diff -urN cdrtools-1.11a09/mkisofs/rock.c cdrtools-1.11a09-zisofs/mkisofs/rock.c |
| --- cdrtools-1.11a09/mkisofs/rock.c Tue Jan 23 04:28:34 2001 |
| +++ cdrtools-1.11a09-zisofs/mkisofs/rock.c Thu Nov 8 11:57:58 2001 |
| @@ -45,7 +45,7 @@ |
| #define PX_SIZE 36 |
| #define RE_SIZE 4 |
| #define SL_SIZE 20 |
| -#define ZZ_SIZE 15 |
| +#define ZF_SIZE 16 |
| #ifdef APPLE_HYB |
| #define AA_SIZE 14 /* size of Apple extension */ |
| #endif /* APPLE_HYB */ |
| @@ -577,17 +577,24 @@ |
| #ifndef VMS |
| /* |
| * If transparent compression was requested, fill in the correct field |
| - * for this file |
| + * for this file, if (and only if) it is actually a compressed file! |
| + * This relies only on magic number, but it should in general not |
| + * be an issue since if you're using -z odds are most of your |
| + * files are already compressed. |
| + * |
| + * In the future it would be nice if mkisofs actually did the |
| + * compression. |
| */ |
| - if (transparent_compression && |
| - S_ISREG(lstatbuf->st_mode) && |
| - strlen(name) > 3 && |
| - strcmp(name + strlen(name) - 3, ".gZ") == 0) { |
| - FILE *zipfile; |
| + if (transparent_compression && S_ISREG(lstatbuf->st_mode)) { |
| + static const unsigned char zisofs_magic[8] = |
| + { 0x37, 0xE4, 0x53, 0x96, 0xC9, 0xDB, 0xD6, 0x07 }; |
| + FILE *zffile; |
| char *checkname; |
| unsigned int file_size; |
| - unsigned char header[8]; |
| + unsigned char header[16]; |
| int OK_flag; |
| + int blocksize; |
| + int headersize; |
| |
| /* |
| * First open file and verify that the correct algorithm was |
| @@ -596,73 +603,43 @@ |
| file_size = 0; |
| OK_flag = 1; |
| |
| - zipfile = fopen(whole_name, "rb"); |
| - fread(header, 1, sizeof(header), zipfile); |
| + memset(header, 0, sizeof(header)); |
| |
| - /* Check some magic numbers from gzip. */ |
| - if (header[0] != 0x1f || header[1] != 0x8b || header[2] != 8) |
| - OK_flag = 0; |
| - /* Make sure file was blocksized. */ |
| - if (((header[3] & 0x40) == 0)) |
| - OK_flag = 0; |
| - /* OK, now go to the end of the file and get some more info */ |
| - if (OK_flag) { |
| - int status; |
| - |
| - status = (long) lseek(fileno(zipfile), (off_t)(-8), |
| - SEEK_END); |
| - if (status == -1) |
| + zffile = fopen(whole_name, "rb"); |
| + if ( zffile ) { |
| + if ( fread(header, 1, sizeof(header), zffile) != sizeof(header) ) |
| OK_flag = 0; |
| - } |
| - if (OK_flag) { |
| - if (read(fileno(zipfile), (char *) header, |
| - sizeof(header)) != sizeof(header)) { |
| + |
| + /* Check magic number */ |
| + if ( memcmp(header, zisofs_magic, sizeof zisofs_magic) ) |
| OK_flag = 0; |
| - } else { |
| - int blocksize; |
| |
| - blocksize = (header[3] << 8) | header[2]; |
| - file_size = ((unsigned int) header[7] << 24) | |
| - ((unsigned int) header[6] << 16) | |
| - ((unsigned int) header[5] << 8) | |
| - header[4]; |
| -#if 0 |
| - fprintf(stderr, "Blocksize = %d %d\n", |
| - blocksize, file_size); |
| -#endif |
| - if (blocksize != SECTOR_SIZE) |
| - OK_flag = 0; |
| - } |
| - } |
| - fclose(zipfile); |
| - |
| - checkname = strdup(whole_name); |
| - checkname[strlen(whole_name) - 3] = 0; |
| - zipfile = fopen(checkname, "rb"); |
| - if (zipfile) { |
| + /* Get the real size of the file */ |
| + file_size = get_731(header+8); |
| + |
| + /* Get the header size (>> 2) */ |
| + headersize = header[12]; |
| + |
| + /* Get the block size (log2) */ |
| + blocksize = header[13]; |
| + |
| + fclose(zffile); |
| + } else { |
| OK_flag = 0; |
| -#ifdef USE_LIBSCHILY |
| - errmsg( |
| - "Unable to insert transparent compressed file - name conflict\n"); |
| -#else |
| - fprintf(stderr, |
| - "Unable to insert transparent compressed file - name conflict\n"); |
| -#endif |
| - fclose(zipfile); |
| } |
| - free(checkname); |
| - |
| + |
| if (OK_flag) { |
| - if (MAYBE_ADD_CE_ENTRY(ZZ_SIZE)) |
| + if (MAYBE_ADD_CE_ENTRY(ZF_SIZE)) |
| add_CE_entry(); |
| Rock[ipnt++] = 'Z'; |
| - Rock[ipnt++] = 'Z'; |
| - Rock[ipnt++] = ZZ_SIZE; |
| + Rock[ipnt++] = 'F'; |
| + Rock[ipnt++] = ZF_SIZE; |
| Rock[ipnt++] = SU_VERSION; |
| - Rock[ipnt++] = 'g'; /* Identify compression |
| - technique used */ |
| + Rock[ipnt++] = 'p'; /* Algorithm: "paged zlib" */ |
| Rock[ipnt++] = 'z'; |
| - Rock[ipnt++] = 3; |
| + /* 2 bytes for algorithm-specific information */ |
| + Rock[ipnt++] = headersize; |
| + Rock[ipnt++] = blocksize; |
| set_733((char *) Rock + ipnt, file_size); /* Real file size */ |
| ipnt += 8; |
| }; |