blob: 8c7ebe179ca5c510235dc70737bfa0b67f9557d4 [file] [log] [blame]
diff -ur cdrtools-1.10/mkisofs/mkisofs.c cdrtools-1.10-zisofs/mkisofs/mkisofs.c
--- cdrtools-1.10/mkisofs/mkisofs.c Fri Apr 20 08:45:50 2001
+++ cdrtools-1.10-zisofs/mkisofs/mkisofs.c Thu May 3 21:59:56 2001
@@ -565,10 +565,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},
diff -ur cdrtools-1.10/mkisofs/rock.c cdrtools-1.10-zisofs/mkisofs/rock.c
--- cdrtools-1.10/mkisofs/rock.c Tue Jan 23 04:28:34 2001
+++ cdrtools-1.10-zisofs/mkisofs/rock.c Fri May 4 02:34:25 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;
};