From d9665979ab85ef185df597397b8fcc5c629327d9 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Thu, 17 Sep 2009 14:47:43 +0000 Subject: [PATCH] Changing new option -scdbackup_tag --- xorriso/xorriso.c | 70 +++++++++++++++++++++++++++++-------- xorriso/xorriso.h | 4 +-- xorriso/xorriso_private.h | 5 +++ xorriso/xorriso_timestamp.h | 2 +- xorriso/xorrisoburn.c | 5 ++- 5 files changed, 68 insertions(+), 18 deletions(-) diff --git a/xorriso/xorriso.c b/xorriso/xorriso.c index 20965564..fb62c9f7 100644 --- a/xorriso/xorriso.c +++ b/xorriso/xorriso.c @@ -1595,6 +1595,7 @@ completed:; 1= timestamp format YYYY.MM.DD.hhmmss 2= Wdy Mon Day hh:mm:ss Year 3= Mon Day hh:mm:ss Year + 4= YYMMDD.hhmmss */ char *Ftimetxt(time_t t, char timetext[40], int flag) { @@ -1623,7 +1624,15 @@ char *Ftimetxt(time_t t, char timetext[40], int flag) sprintf(rpt+strlen(rpt), "%s %2.2d %2.2d:%2.2d:%2.2d %4.4d", months[tms.tm_mon], tms.tm_mday, tms.tm_hour, tms.tm_min, tms.tm_sec, 1900+tms.tm_year); - else if (flag&1) + else if (form == 4) { + if(tms.tm_year>99) + sprintf(rpt+strlen(rpt), "%c", 'A' + (tms.tm_year - 100) / 10); + else + sprintf(rpt+strlen(rpt), "%c", '0' + tms.tm_year / 10); + sprintf(rpt+strlen(rpt), "%1.1d%2.2d%2.2d.%2.2d%2.2d%2.2d", + tms.tm_year % 10, tms.tm_mon + 1, tms.tm_mday, + tms.tm_hour, tms.tm_min, tms.tm_sec); + } else if (flag&1) sprintf(rpt+strlen(rpt), "%2d %3s %4.4d %2.2d:%2.2d:%2.2d", tms.tm_mday, months[tms.tm_mon], 1900+tms.tm_year, tms.tm_hour, tms.tm_min, tms.tm_sec); @@ -4692,6 +4701,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->do_md5= 0; m->scdbackup_tag_name[0]= 0; m->scdbackup_tag_time[0]= 0; + m->scdbackup_tag_written[0]= 0; + m->scdbackup_tag_listname[0]= 0; m->relax_compliance= 0; m->do_follow_pattern= 1; m->do_follow_param= 0; @@ -7132,11 +7143,11 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) Xorriso_status_result(xorriso,filter,fp,flag&2); is_default= (xorriso->scdbackup_tag_name[0] == 0 && - xorriso->scdbackup_tag_time[0] == 0); + xorriso->scdbackup_tag_listname[0] == 0); sprintf(line, "-scdbackup_tag "); - Text_shellsafe(xorriso->scdbackup_tag_name, line, 1); + Text_shellsafe(xorriso->scdbackup_tag_listname, line, 1); strcat(line, " "); - Text_shellsafe(xorriso->scdbackup_tag_time, line, 1); + Text_shellsafe(xorriso->scdbackup_tag_name, line, 1); strcat(line, "\n"); if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); @@ -10741,7 +10752,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, " --acl Record eventual ACLs of files", " --xattr Record eventual user space xattr of files", " --md5 Compute and record MD5 checksums of data files", -" --scdbackup_tag NAME TIME With --md5 record a scdbackup checksum tag", +" --scdbackup_tag PATH NAME With --md5 record a scdbackup checksum tag", " --for_backup Use all options which improve backup fidelity", " -V ID, -volid ID Set Volume ID", " -b FILE, -eltorito-boot FILE", @@ -12639,6 +12650,36 @@ int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity, } +int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag) +{ + FILE *fp= NULL; + char dummy[81], name[81], timestamp[81], size[81], md5[81]; + + if(xorriso->scdbackup_tag_written[0] == 0) + return(1); + + name[0]= timestamp[0]= size[0]= md5[0]= 0; + sscanf(xorriso->scdbackup_tag_written, "%s %s %s %s %s %s %s", + dummy, dummy, dummy, name, timestamp, size, md5); + sprintf(xorriso->info_text, "scdbackup tag written : %s %s %s %s\n", + name, timestamp, size, md5); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); + + if(xorriso->scdbackup_tag_listname[0]) { + fp= fopen(xorriso->scdbackup_tag_listname, "a"); + if(fp==0) { + strcpy(xorriso->info_text, "-scdbackup_tag: Cannot open file "); + Text_shellsafe(xorriso->scdbackup_tag_listname, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + return(0); + } + fprintf(fp, "%s %s %s %s\n", name, timestamp, size, md5); + fclose(fp); + } + return(1); +} + + /* ---------------------------- Options API ------------------------ */ @@ -15613,7 +15654,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " and their use in file comparison.", " -md5 \"on\"|\"all\"|\"off\"", " Enable resp. disable processing of MD5 checksums.", -" -scdbackup_tag name timestamp", +" -scdbackup_tag list_path record_name", " Enable production of scdbackup tag with -md5 on", " -ban_stdio_write", " Allow for writing only the usage of optical drives.", @@ -17750,19 +17791,20 @@ unknown_mode:; } -/* Option -scdbackup_tag name timestamp */ -int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *name, - char *timestamp, int flag) +/* Option -scdbackup_tag list_path record_name */ +int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *listname, + char *recname, int flag) { - if(strlen(name) > 80 || strlen(timestamp) > 18 || - name[0] == 0 || timestamp[0] == 0) { + if(strlen(recname) > 80) { sprintf(xorriso->info_text, - "Unsuitable name or timestamp given with -scdbackup_tag"); + "Unsuitable record name given with -scdbackup_tag"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); return(0); } - strcpy(xorriso->scdbackup_tag_name, name); - strcpy(xorriso->scdbackup_tag_time, timestamp); + strcpy(xorriso->scdbackup_tag_name, recname); + xorriso->scdbackup_tag_time[0]= 0; + if(Sfile_str(xorriso->scdbackup_tag_listname, listname, 0) <= 0) + return(-1); return(1); } diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index ce72a751..24ca3da7 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -875,8 +875,8 @@ int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode, int flag); /* Option -scdbackup_tag */ -int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *name, - char *timestamp, int flag); +int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *list_path, + char *record_name, int flag); /* Option -session_log */ int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag); diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 3afaa19a..3d9836b7 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -130,8 +130,11 @@ struct XorrisO { /* the global context of xorriso */ bit3= make file content stability check by double reading bit4= use recorded MD5 as proxy of ISO file */ + char scdbackup_tag_name[81]; char scdbackup_tag_time[19]; + char scdbackup_tag_written[512]; + char scdbackup_tag_listname[SfileadrL]; int relax_compliance; /* opaque bitfield to be set by xorrisoburn */ int do_follow_pattern; @@ -686,6 +689,8 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr, int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity, int flag); +int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag); + int Sfile_str(char target[SfileadrL], char *source, int flag); diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 5f56ff70..17661ef2 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2009.09.17.144453" +#define Xorriso_timestamP "2009.09.17.144849" diff --git a/xorriso/xorrisoburn.c b/xorriso/xorrisoburn.c index 5ba394a1..f8a427fe 100644 --- a/xorriso/xorrisoburn.c +++ b/xorriso/xorrisoburn.c @@ -1830,8 +1830,10 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) isoburn_igopt_set_over_ugid(sopts, 0, 0, (uid_t) 0, (gid_t) 0); isoburn_igopt_set_out_charset(sopts, out_cs); isoburn_igopt_set_fifo_size(sopts, xorriso->fs * 2048); + Ftimetxt(time(NULL), xorriso->scdbackup_tag_time, 8); isoburn_igopt_set_scdbackup_tag(sopts, xorriso->scdbackup_tag_name, - xorriso->scdbackup_tag_time); + xorriso->scdbackup_tag_time, + xorriso->scdbackup_tag_written); if(image!=NULL && strlen(Xorriso_program_versioN)+strlen(Xorriso_timestamP)<80) { sprintf(xorriso_id, "XORRISO-%s %s", @@ -2011,6 +2013,7 @@ ex:; iso_image_unref(image); isoburn_igopt_destroy(&sopts, 0); Xorriso_process_msg_queues(xorriso,0); + Xorriso_append_scdbackup_record(xorriso, 0); return(ret); }