New API calls isoburn_igopt_set_stdio_endsync(), isoburn_igopt_get_stdio_endsync()

This commit is contained in:
Thomas Schmitt 2014-04-13 12:05:58 +00:00
parent 1bfd24f856
commit 59c4712b1a
6 changed files with 56 additions and 10 deletions

View File

@ -150,6 +150,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
o->msgs_submit_handle= NULL; o->msgs_submit_handle= NULL;
o->msgs_submit_flag= 0; o->msgs_submit_flag= 0;
o->do_tao= 0; o->do_tao= 0;
o->do_fsync= 1;
o->prev= NULL; o->prev= NULL;
o->next= NULL; o->next= NULL;
o->target_iso_head= calloc(1, o->target_iso_head_size); o->target_iso_head= calloc(1, o->target_iso_head_size);
@ -599,6 +600,7 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
} }
out_o->do_tao = opts->do_tao; out_o->do_tao = opts->do_tao;
out_o->do_fsync = opts->do_fsync;
state = isoburn_disc_get_status(in_d); state = isoburn_disc_get_status(in_d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE && if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
@ -1134,6 +1136,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->hfsp_block_size= 0; o->hfsp_block_size= 0;
o->apm_block_size= 0; o->apm_block_size= 0;
o->do_tao= 0; o->do_tao= 0;
o->do_fsync= 0;
return(1); return(1);
} }
@ -1755,6 +1758,19 @@ int isoburn_igopt_get_write_type(struct isoburn_imgen_opts *opts, int *do_tao)
return(1); return(1);
} }
int isoburn_igopt_set_stdio_endsync(struct isoburn_imgen_opts *opts,
int do_sync)
{
opts->do_fsync= !!do_sync;
return(1);
}
int isoburn_igopt_get_stdio_endsync(struct isoburn_imgen_opts *opts,
int *do_sync)
{
*do_sync= opts->do_fsync;
return(1);
}
int isoburn_conv_name_chars(struct isoburn_imgen_opts *opts, int isoburn_conv_name_chars(struct isoburn_imgen_opts *opts,
char *name, size_t name_len, char *name, size_t name_len,

View File

@ -167,6 +167,9 @@ struct isoburn {
/* Forwarding an image generation option to the burn wrapper */ /* Forwarding an image generation option to the burn wrapper */
int do_tao; int do_tao;
/* Forwarding an image generation option to the burn wrapper */
int do_fsync;
}; };
@ -705,6 +708,9 @@ struct isoburn_imgen_opts {
*/ */
int do_tao; int do_tao;
/* Whether to fsync() stdio_drives after isoburn_activate_session() */
int do_fsync;
}; };

View File

@ -375,7 +375,7 @@ int isoburn_attach_start_lba(struct burn_drive *d, int lba, int flag)
*/ */
int isoburn_activate_session(struct burn_drive *drive) int isoburn_activate_session(struct burn_drive *drive)
{ {
int ret; int ret, do_sync = 1;
struct isoburn *o; struct isoburn *o;
ret = isoburn_find_emulator(&o, drive, 0); ret = isoburn_find_emulator(&o, drive, 0);
@ -391,9 +391,12 @@ int isoburn_activate_session(struct burn_drive *drive)
(o->fabricated_disc_status == BURN_DISC_BLANK && (o->fabricated_disc_status == BURN_DISC_BLANK &&
o->zero_nwa > 0))) o->zero_nwa > 0)))
return 1; return 1;
ret = burn_drive_get_drive_role(drive);
if (ret != 1)
do_sync = !! o->do_fsync;
ret = burn_random_access_write(drive, (off_t) 0, (char*)o->target_iso_head, ret = burn_random_access_write(drive, (off_t) 0, (char*)o->target_iso_head,
o->target_iso_head_size, 1); o->target_iso_head_size, do_sync);
return ret; return ret;
} }

View File

@ -1532,7 +1532,7 @@ int isoburn_igopt_get_scdbackup_tag(struct isoburn_imgen_opts *o,
numbers 2 to 8. numbers 2 to 8.
This will overwrite the first 512 bytes of This will overwrite the first 512 bytes of
the submitted data. the submitted data.
@since 1.3.6 @since 1.3.8
4= HP-PA PALO boot sector header version 4 4= HP-PA PALO boot sector header version 4
Submit all five parameters of Submit all five parameters of
iso_image_set_hppa_palo() as non-NULL texts. iso_image_set_hppa_palo() as non-NULL texts.
@ -1899,6 +1899,30 @@ int isoburn_igopt_get_hfsp_block_size(struct isoburn_imgen_opts *opts,
int isoburn_igopt_set_write_type(struct isoburn_imgen_opts *opts, int do_tao); int isoburn_igopt_set_write_type(struct isoburn_imgen_opts *opts, int do_tao);
int isoburn_igopt_get_write_type(struct isoburn_imgen_opts *opts, int *do_tao); int isoburn_igopt_get_write_type(struct isoburn_imgen_opts *opts, int *do_tao);
/** Set or inquire whether a final fsync(2) is performed when updating the
multi-session information of libburn stdio pseudo-drives by
isoburn_activate_session().
Note:
fsync(2) calls during and at the end of isoburn_disc_write() are controlled
by libburn call burn_write_opts_set_stdio_fsync().
@since 1.2.4
@param opts
The option set to be manipulated or inquired.
@parm do_sync
1= call fsync(2) with stdio drives in isoburn_activate_session()
0= do not
@return
<=0 = error, 1 = success
*/
int isoburn_igopt_set_stdio_endsync(struct isoburn_imgen_opts *opts,
int do_sync);
int isoburn_igopt_get_stdio_endsync(struct isoburn_imgen_opts *opts,
int *do_sync);
/* ----------------------------------------------------------------------- */
/* End of Options for image generation */
/* ----------------------------------------------------------------------- */
/** Frontend of libisofs call iso_conv_name_chars() controlled by /** Frontend of libisofs call iso_conv_name_chars() controlled by
struct isoburn_imgen_opts rather than IsoWriteOpts. struct isoburn_imgen_opts rather than IsoWriteOpts.
@ -1940,11 +1964,6 @@ int isoburn_conv_name_chars(struct isoburn_imgen_opts *opts,
char **result, size_t *result_len, int flag); char **result, size_t *result_len, int flag);
/* ----------------------------------------------------------------------- */
/* End of Options for image generation */
/* ----------------------------------------------------------------------- */
/** Get the image attached to a drive, if any. /** Get the image attached to a drive, if any.
@since 0.1.0 @since 0.1.0
@param d The drive to inquire @param d The drive to inquire

View File

@ -46,6 +46,7 @@ isoburn_igopt_get_relaxed;
isoburn_igopt_get_rr_reloc; isoburn_igopt_get_rr_reloc;
isoburn_igopt_get_scdbackup_tag; isoburn_igopt_get_scdbackup_tag;
isoburn_igopt_get_sort_files; isoburn_igopt_get_sort_files;
isoburn_igopt_get_stdio_endsync;
isoburn_igopt_get_system_area; isoburn_igopt_get_system_area;
isoburn_igopt_get_tail_blocks; isoburn_igopt_get_tail_blocks;
isoburn_igopt_get_untranslated_name_len; isoburn_igopt_get_untranslated_name_len;
@ -68,6 +69,7 @@ isoburn_igopt_set_relaxed;
isoburn_igopt_set_rr_reloc; isoburn_igopt_set_rr_reloc;
isoburn_igopt_set_scdbackup_tag; isoburn_igopt_set_scdbackup_tag;
isoburn_igopt_set_sort_files; isoburn_igopt_set_sort_files;
isoburn_igopt_set_stdio_endsync;
isoburn_igopt_set_system_area; isoburn_igopt_set_system_area;
isoburn_igopt_set_tail_blocks; isoburn_igopt_set_tail_blocks;
isoburn_igopt_set_untranslated_name_len; isoburn_igopt_set_untranslated_name_len;

View File

@ -1 +1 @@
#define Xorriso_timestamP "2014.04.13.071908" #define Xorriso_timestamP "2014.04.13.120421"