Extended influence of iso_write_opts_set_dir_rec_mtime() to Joliet and

ISO 9660:1999.
This commit is contained in:
Thomas Schmitt 2012-01-14 15:54:25 +01:00
parent bddc44d1ca
commit 6a1bbaa902
5 changed files with 68 additions and 13 deletions

View File

@ -402,7 +402,7 @@ void write_one_dir_record(Ecma119Image *t, Ecma119Node *node, int file_id,
rec->len_dr[0] = len_dr + (info != NULL ? info->suf_len : 0); rec->len_dr[0] = len_dr + (info != NULL ? info->suf_len : 0);
iso_bb(rec->block, block - t->eff_partition_offset, 4); iso_bb(rec->block, block - t->eff_partition_offset, 4);
iso_bb(rec->length, len, 4); iso_bb(rec->length, len, 4);
if (t->dir_rec_mtime) { if (t->dir_rec_mtime & 1) {
iso= node->node; iso= node->node;
iso_datetime_7(rec->recording_time, iso_datetime_7(rec->recording_time,
t->replace_timestamps ? t->timestamp : iso->mtime, t->replace_timestamps ? t->timestamp : iso->mtime,
@ -2701,7 +2701,13 @@ int iso_write_opts_set_dir_rec_mtime(IsoWriteOpts *opts, int allow)
if (opts == NULL) { if (opts == NULL) {
return ISO_NULL_POINTER; return ISO_NULL_POINTER;
} }
opts->dir_rec_mtime = allow ? 1 : 0; if (allow < 0)
allow = 1;
else if (allow & (1 << 14))
allow &= ~1;
else if (allow & 6)
allow |= 1;
opts->dir_rec_mtime = allow & 7;
return ISO_SUCCESS; return ISO_SUCCESS;
} }

View File

@ -202,8 +202,9 @@ struct iso_write_opts {
* to expect that we do have a creation timestamp with the source. * to expect that we do have a creation timestamp with the source.
* mkisofs writes mtimes and the result seems more suitable if mounted * mkisofs writes mtimes and the result seems more suitable if mounted
* without Rock Ridge support.) * without Rock Ridge support.)
* bit0= ECMA-119, bit1= Joliet, bit2= ISO 9660:1999
*/ */
unsigned int dir_rec_mtime :1; unsigned int dir_rec_mtime :3;
/** /**
* Compute MD5 checksum for the whole session and record it as index 0 of * Compute MD5 checksum for the whole session and record it as index 0 of
@ -476,8 +477,10 @@ struct ecma119_image
/* Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12. */ /* Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12. */
unsigned int aaip_susp_1_10 :1; unsigned int aaip_susp_1_10 :1;
/* Store in ECMA-119 timestamp mtime of source */ /* Store in ECMA-119, Joliet, ISO 9660:1999 timestamp the mtime of source
unsigned int dir_rec_mtime :1; bit0= ECMA-119, bit1= Joliet, bit2= ISO 9660:1999.
*/
unsigned int dir_rec_mtime :3;
unsigned int md5_session_checksum :1; unsigned int md5_session_checksum :1;
unsigned int md5_file_checksums :2; unsigned int md5_file_checksums :2;

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2007 Vreixo Formoso * Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2011 Thomas Schmitt * Copyright (c) 2011-2012 Thomas Schmitt
* *
* This file is part of the libisofs project; you can redistribute it and/or * This file is part of the libisofs project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2 * modify it under the terms of the GNU General Public License version 2
@ -688,6 +688,7 @@ void write_one_dir_record(Ecma119Image *t, Iso1999Node *node, int file_id,
: (uint8_t*)node->name; : (uint8_t*)node->name;
struct ecma119_dir_record *rec = (struct ecma119_dir_record*)buf; struct ecma119_dir_record *rec = (struct ecma119_dir_record*)buf;
IsoNode *iso;
len_dr = 33 + len_fi + ((len_fi % 2) ? 0 : 1); len_dr = 33 + len_fi + ((len_fi % 2) ? 0 : 1);
@ -719,7 +720,15 @@ void write_one_dir_record(Ecma119Image *t, Iso1999Node *node, int file_id,
rec->len_dr[0] = len_dr; rec->len_dr[0] = len_dr;
iso_bb(rec->block, block, 4); iso_bb(rec->block, block, 4);
iso_bb(rec->length, len, 4); iso_bb(rec->length, len, 4);
iso_datetime_7(rec->recording_time, t->now, t->always_gmt);
/* was: iso_datetime_7(rec->recording_time, t->now, t->always_gmt);
*/
iso= node->node;
iso_datetime_7(rec->recording_time,
(t->dir_rec_mtime & 4) ? ( t->replace_timestamps ?
t->timestamp : iso->mtime )
: t->now, t->always_gmt);
rec->flags[0] = ((node->type == ISO1999_DIR) ? 2 : 0) | (multi_extend ? 0x80 : 0); rec->flags[0] = ((node->type == ISO1999_DIR) ? 2 : 0) | (multi_extend ? 0x80 : 0);
iso_bb(rec->vol_seq_number, (uint32_t) 1, 2); iso_bb(rec->vol_seq_number, (uint32_t) 1, 2);
rec->len_fi[0] = len_fi; rec->len_fi[0] = len_fi;

View File

@ -1,7 +1,7 @@
/* /*
* Copyright (c) 2007 Vreixo Formoso * Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2007 Mario Danic * Copyright (c) 2007 Mario Danic
* Copyright (c) 2011 Thomas Schmitt * Copyright (c) 2011-2012 Thomas Schmitt
* *
* This file is part of the libisofs project; you can redistribute it and/or * This file is part of the libisofs project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2 * modify it under the terms of the GNU General Public License version 2
@ -758,6 +758,7 @@ void write_one_dir_record(Ecma119Image *t, JolietNode *node, int file_id,
: (uint8_t*)node->name; : (uint8_t*)node->name;
struct ecma119_dir_record *rec = (struct ecma119_dir_record*)buf; struct ecma119_dir_record *rec = (struct ecma119_dir_record*)buf;
IsoNode *iso;
len_dr = 33 + len_fi + ((len_fi % 2) ? 0 : 1); len_dr = 33 + len_fi + ((len_fi % 2) ? 0 : 1);
@ -797,7 +798,15 @@ void write_one_dir_record(Ecma119Image *t, JolietNode *node, int file_id,
rec->len_dr[0] = len_dr; rec->len_dr[0] = len_dr;
iso_bb(rec->block, block - t->eff_partition_offset, 4); iso_bb(rec->block, block - t->eff_partition_offset, 4);
iso_bb(rec->length, len, 4); iso_bb(rec->length, len, 4);
iso_datetime_7(rec->recording_time, t->now, t->always_gmt);
/* was: iso_datetime_7(rec->recording_time, t->now, t->always_gmt);
*/
iso= node->node;
iso_datetime_7(rec->recording_time,
(t->dir_rec_mtime & 2) ? ( t->replace_timestamps ?
t->timestamp : iso->mtime )
: t->now, t->always_gmt);
rec->flags[0] = ((node->type == JOLIET_DIR) ? 2 : 0) | (multi_extend ? 0x80 : 0); rec->flags[0] = ((node->type == JOLIET_DIR) ? 2 : 0) | (multi_extend ? 0x80 : 0);
iso_bb(rec->vol_seq_number, (uint32_t) 1, 2); iso_bb(rec->vol_seq_number, (uint32_t) 1, 2);
rec->len_fi[0] = len_fi; rec->len_fi[0] = len_fi;

View File

@ -4,7 +4,7 @@
/* /*
* Copyright (c) 2007-2008 Vreixo Formoso, Mario Danic * Copyright (c) 2007-2008 Vreixo Formoso, Mario Danic
* Copyright (c) 2009-2011 Thomas Schmitt * Copyright (c) 2009-2012 Thomas Schmitt
* *
* This file is part of the libisofs project; you can redistribute it and/or * This file is part of the libisofs project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2 * modify it under the terms of the GNU General Public License version 2
@ -1653,9 +1653,35 @@ int iso_write_opts_set_rrip_1_10_px_ino(IsoWriteOpts *opts, int enable);
int iso_write_opts_set_aaip_susp_1_10(IsoWriteOpts *opts, int oldvers); int iso_write_opts_set_aaip_susp_1_10(IsoWriteOpts *opts, int oldvers);
/** /**
* Store as ECMA-119 Directory Record timestamp the mtime of the source * Store as ECMA-119 Directory Record timestamp the mtime of the source node
* rather than the image creation time. * rather than the image creation time.
* If storing of mtime is enabled, then the settings of
* iso_write_opts_set_replace_timestamps() apply. (replace==1 will revoke,
* replace==2 will override mtime by iso_write_opts_set_default_timestamp().
* *
* Since version 1.2.0 this may apply also to Joliet and ISO 9660:1999. To
* reduce the probability of unwanted behavior changes between pre-1.2.0 and
* post-1.2.0, the bits for Joliet and ISO 9660:1999 also enable ECMA-119.
* The hopefully unlikely bit14 may then be used to disable mtime for ECMA-119.
*
* To enable mtime for all three directory trees, submit 7.
* To disable this feature completely, submit 0.
*
* @param opts
* The option set to be manipulated.
* @param allow
* If this parameter is negative, then mtime is enabled only for ECMA-119.
* With positive numbers, the parameter is interpreted as bit field :
* bit0= enable mtime for ECMA-119
* bit1= enable mtime for Joliet and ECMA-119
* bit2= enable mtime for ISO 9660:1999 and ECMA-119
* bit14= disable mtime for ECMA-119 although some of the other bits
* would enable it
* @since 1.2.0
* Before version 1.2.0 this applied only to ECMA-119 :
* 0 stored image creation time in ECMA-119 tree.
* Any other value caused storing of mtime.
* Joliet and ISO 9660:1999 always stored the image creation time.
* @since 0.6.12 * @since 0.6.12
*/ */
int iso_write_opts_set_dir_rec_mtime(IsoWriteOpts *opts, int allow); int iso_write_opts_set_dir_rec_mtime(IsoWriteOpts *opts, int allow);
@ -1783,8 +1809,10 @@ int iso_write_opts_set_default_gid(IsoWriteOpts *opts, gid_t gid);
/** /**
* 0 to use IsoNode timestamps, 1 to use recording time, 2 to use * 0 to use IsoNode timestamps, 1 to use recording time, 2 to use
* values from timestamp field. This has only meaning if RR extensions * values from timestamp field. This applies to the timestamps of Rock Ridge
* are enabled. * and if the use of mtime is enabled by iso_write_opts_set_dir_rec_mtime().
* In the latter case, value 1 will revoke the recording of mtime, value
* 2 will override mtime by iso_write_opts_set_default_timestamp().
* *
* @see iso_write_opts_set_default_timestamp * @see iso_write_opts_set_default_timestamp
* @since 0.6.2 * @since 0.6.2