diff --git a/libisoburn/isoburn.c b/libisoburn/isoburn.c index 48a10a43..e5ebb3cf 100644 --- a/libisoburn/isoburn.c +++ b/libisoburn/isoburn.c @@ -456,7 +456,10 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d, 0, "FAILURE", 0); {ret= -1; goto ex;} } - + iso_write_opts_set_pvd_times(wopts, + opts->vol_creation_time, opts->vol_modification_time, + opts->vol_expiration_time, opts->vol_effective_time, + opts->vol_uuid); ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa); opts->effective_lba= nwa; @@ -860,6 +863,10 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag) o->data_start_lba= -1; o->system_area_data= NULL; o->system_area_options= 0; + o->vol_creation_time= 0; + o->vol_modification_time= 0; + o->vol_expiration_time= 0; + o->vol_effective_time= 0; return(1); } @@ -1103,3 +1110,32 @@ int isoburn_igopt_get_system_area(struct isoburn_imgen_opts *opts, } +int isoburn_igopt_set_pvd_times(struct isoburn_imgen_opts *opts, + time_t vol_creation_time, time_t vol_modification_time, + time_t vol_expiration_time, time_t vol_effective_time, + char *vol_uuid) +{ + opts->vol_creation_time = vol_creation_time; + opts->vol_modification_time = vol_modification_time; + opts->vol_expiration_time = vol_expiration_time; + opts->vol_effective_time = vol_effective_time; + strncpy(opts->vol_uuid, vol_uuid, 16); + opts->vol_uuid[16] = 0; + return(1); +} + + +int isoburn_igopt_get_pvd_times(struct isoburn_imgen_opts *opts, + time_t *vol_creation_time, time_t *vol_modification_time, + time_t *vol_expiration_time, time_t *vol_effective_time, + char vol_uuid[17]) +{ + *vol_creation_time = opts->vol_creation_time; + *vol_modification_time = opts->vol_modification_time; + *vol_expiration_time = opts->vol_expiration_time; + *vol_effective_time = opts->vol_effective_time; + strcpy(vol_uuid, opts->vol_uuid); + return(1); +} + + diff --git a/libisoburn/isoburn.h b/libisoburn/isoburn.h index c6236123..a9b0e397 100644 --- a/libisoburn/isoburn.h +++ b/libisoburn/isoburn.h @@ -502,6 +502,15 @@ struct isoburn_imgen_opts { */ int system_area_options; + /* User settable PVD time stamps */ + time_t vol_creation_time; + time_t vol_modification_time; + time_t vol_expiration_time; + time_t vol_effective_time; + /* To eventually override vol_modification_time by unconverted string + and timezone 0 */ + char vol_uuid[17]; + }; diff --git a/libisoburn/libisoburn.h b/libisoburn/libisoburn.h index 40754b58..f59aba1c 100644 --- a/libisoburn/libisoburn.h +++ b/libisoburn/libisoburn.h @@ -1189,6 +1189,38 @@ int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *o, int isoburn_igopt_get_system_area(struct isoburn_imgen_opts *o, char data[32768], int *options); +/** Explicitely set the four timestamps of the emerging ISO image. + Default with all parameters is 0. + @since 0.5.4 + ECMA-119 defines the timestamps in the Primary Volume Descriptor as: + @param creation_time + When "the information in the volume was created." + A value of 0 means that the timepoint of write start is to be used. + @param modification_time + When "the informationin the volume was last modified." + A value of 0 means that the timepoint of write start is to be used. + @param expiration_time + When "the information in the volume may be regarded as obsolete." + A value of 0 means that the information never shall expire. + @param effective_time + When "the information in the volume may be used." + A value of 0 means that not such retention is intended. + @param uuid + If this text is not empty, then it overrides vol_modification_time + by copying the first 16 decimal digits from uuid, eventually + padding up with decimal '1', and writing a NUL-byte as timezone GMT. + It should express a reasonable time in form YYYYMMDDhhmmsscc + E.g.: 2010040711405800 = 7 Apr 2010 11:40:58 (+0 centiseconds) + @return 1 success, <=0 failure + */ +int isoburn_igopt_set_pvd_times(struct isoburn_imgen_opts *opts, + time_t creation_time, time_t modification_time, + time_t expiration_time, time_t effective_time, + char *uuid); +int isoburn_igopt_get_pvd_times(struct isoburn_imgen_opts *opts, + time_t *creation_time, time_t *modification_time, + time_t *expiration_time, time_t *effective_time, + char uuid[17]); /* ----------------------------------------------------------------------- */ /* End of Options for image generation */ diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index e09f4e66..2003df04 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2010.04.07.073024" +#define Xorriso_timestamP "2010.04.07.202148"