From 0d19cd3150634af889cdb524e3a5dbf830317e74 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Mon, 8 Sep 2008 09:48:43 +0000 Subject: [PATCH] Made use of new libisofs call iso_image_update_sizes() --- libisoburn/trunk/xorriso/xorriso.c | 20 +++++++++++++ libisoburn/trunk/xorriso/xorriso_timestamp.h | 2 +- libisoburn/trunk/xorriso/xorrisoburn.c | 30 ++++++++++++++++++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/libisoburn/trunk/xorriso/xorriso.c b/libisoburn/trunk/xorriso/xorriso.c index bae0b4d3..44ac819e 100644 --- a/libisoburn/trunk/xorriso/xorriso.c +++ b/libisoburn/trunk/xorriso/xorriso.c @@ -1877,6 +1877,7 @@ struct FindjoB { int start_lba; int end_lba; int damage_filter; /* -1=only undamaged , 0=all , 1=only damaged */ + int commit_filter; /* bit0= test -pending_data : uncommitted regular files */ /* 0= echo 1= rm (also rmdir) @@ -1928,6 +1929,7 @@ int Findjob_new(struct FindjoB **o, char *start_path, int flag) m->start_lba= -1; m->end_lba= -1; m->damage_filter= 0; + m->commit_filter= 0; m->action= 0; /* print */ m->target= NULL; /* a mere pointer, not managed memory */ m->user= 0; @@ -2052,6 +2054,22 @@ int Findjob_get_lba_damage_filter(struct FindjoB *o, int *start_lba, } +int Findjob_set_commit_filter(struct FindjoB *o, int mask, int values, + int flag) +{ + o->commit_filter&= ~mask; + o->commit_filter|= (mask & values); + return(1); +} + + +int Findjob_get_commit_filter(struct FindjoB *o, int *commit_filter, int flag) +{ + *commit_filter= o->commit_filter; + return(1); +} + + /* @return 0=no match , 1=match , <0 = error */ int Findjob_test(struct FindjoB *o, char *name, @@ -11069,6 +11087,8 @@ not_enough_arguments:; sscanf(argv[i-1], "%d", &start_lba); sscanf(argv[i], "%d", &count); Findjob_set_lba_range(job, start_lba, count, 0); + } else if(strcmp(argv[i], "-pending_data")==0) { + Findjob_set_commit_filter(job, 1, 1, 0); } else if(strcmp(argv[i], "-exec")==0) { if(i+1>=end_idx) goto not_enough_arguments; diff --git a/libisoburn/trunk/xorriso/xorriso_timestamp.h b/libisoburn/trunk/xorriso/xorriso_timestamp.h index ab7b2110..32ce85b2 100644 --- a/libisoburn/trunk/xorriso/xorriso_timestamp.h +++ b/libisoburn/trunk/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.09.07.144714" +#define Xorriso_timestamP "2008.09.08.094748" diff --git a/libisoburn/trunk/xorriso/xorrisoburn.c b/libisoburn/trunk/xorriso/xorrisoburn.c index 07ee0252..78f395a9 100644 --- a/libisoburn/trunk/xorriso/xorrisoburn.c +++ b/libisoburn/trunk/xorriso/xorrisoburn.c @@ -841,7 +841,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) struct burn_session **sessions; struct burn_track **tracks; enum burn_disc_status s; - IsoImage *image = NULL; + IsoImage *image= NULL; ElToritoBootImage *bootimg; ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, @@ -897,8 +897,10 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) } ret= isoburn_igopt_new(&sopts, 0); - if(ret<=0) + if(ret<=0) { + Xorriso_process_msg_queues(xorriso, 0); return(ret); + } relax= isoburn_igopt_allow_deep_paths; /* Adjust or discard boot image */ @@ -969,6 +971,20 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) ret= Xorriso_eval_problem_status(xorriso, 1, 0); if(ret<0) {ret= 0; goto ex;} + + /* >>> omit iso_image_update_sizes if the image was filled up very quickly */; + + ret= iso_image_update_sizes(image); + if(ret < 0) { + Xorriso_process_msg_queues(xorriso, 0); + ret= Xorriso_eval_problem_status(xorriso, 1, 0); + if(ret<0) + {ret= 0; goto ex;} + } + + + + Xorriso_set_abort_severity(xorriso, 1); if (xorriso->grow_blindly_msc2 >= 0 && xorriso->out_drive_handle != xorriso->in_drive_handle) { @@ -5858,7 +5874,7 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job, struct stat *boss_stbuf, struct stat *stbuf, int depth, int flag) { - int ret, start_lba, end_lba, damage_filter; + int ret, start_lba, end_lba, damage_filter, commit_filter, lba; off_t damage_start, damage_end, size; int lba_count, *file_end_lbas= NULL, *file_start_lbas= NULL, i; @@ -5886,6 +5902,14 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job, {ret= 0; goto ex;} } } + Findjob_get_commit_filter(job, &commit_filter, 0); + if(commit_filter & 1) { /* -pending_data */ + if(!LIBISO_ISREG(node)) + {ret= 0; goto ex;} + ret= Xorriso__file_start_lba(node, &lba, 0); + if(ret > 0 && lba >= 0) + {ret= 0; goto ex;} + } ret= 1; ex:; if(file_start_lbas != NULL)