Made use of ISO_ERR_SEV() and ISO_ERR_PRIO()
This commit is contained in:
@ -638,3 +638,81 @@ int isoburn_get_fifo_status(struct burn_drive *d, int *size, int *free_bytes,
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* <<< to be replaced by libburn-0.4.3 API call burn_sev_to_text().
|
||||
This is a copy of libdax_msgs__sev_to_text() which is not exposed
|
||||
by the API of of libburn-0.4.2 . As soon as xorriso gets based on
|
||||
libburn-0.4.4 this redundancy is to be removed.
|
||||
It is safe, nevertheless, because the severity codes are eternal.
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_ALL 0x00000000
|
||||
#define LIBDAX_MSGS_SEV_DEBUG 0x10000000
|
||||
#define LIBDAX_MSGS_SEV_UPDATE 0x20000000
|
||||
#define LIBDAX_MSGS_SEV_NOTE 0x30000000
|
||||
#define LIBDAX_MSGS_SEV_HINT 0x40000000
|
||||
#define LIBDAX_MSGS_SEV_WARNING 0x50000000
|
||||
#define LIBDAX_MSGS_SEV_SORRY 0x60000000
|
||||
#define LIBDAX_MSGS_SEV_FAILURE 0x68000000
|
||||
#define LIBDAX_MSGS_SEV_FATAL 0x70000000
|
||||
#define LIBDAX_MSGS_SEV_ABORT 0x71000000
|
||||
#define LIBDAX_MSGS_SEV_NEVER 0x7fffffff
|
||||
|
||||
int isoburn__sev_to_text(int severity, char **severity_name,
|
||||
int flag)
|
||||
{
|
||||
if(flag&1) {
|
||||
*severity_name= "NEVER\nABORT\nFATAL\nFAILURE\nSORRY\nWARNING\nHINT\nNOTE\nUPDATE\nDEBUG\nALL";
|
||||
return(1);
|
||||
}
|
||||
*severity_name= "";
|
||||
if(severity>=LIBDAX_MSGS_SEV_NEVER)
|
||||
*severity_name= "NEVER";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_ABORT)
|
||||
*severity_name= "ABORT";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_FATAL)
|
||||
*severity_name= "FATAL";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_FAILURE)
|
||||
*severity_name= "FAILURE";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_SORRY)
|
||||
*severity_name= "SORRY";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_WARNING)
|
||||
*severity_name= "WARNING";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_HINT)
|
||||
*severity_name= "HINT";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_NOTE)
|
||||
*severity_name= "NOTE";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_UPDATE)
|
||||
*severity_name= "UPDATE";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_DEBUG)
|
||||
*severity_name= "DEBUG";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_ALL)
|
||||
*severity_name= "ALL";
|
||||
else {
|
||||
*severity_name= "";
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_report_iso_error(int iso_error_code, char msg_text[], int os_errno,
|
||||
char min_severity[], int flag)
|
||||
{
|
||||
int error_code, iso_sev, min_sev, ret;
|
||||
char *sev_text_pt, *msg_text_pt= NULL;
|
||||
|
||||
error_code= 0x00050000 | ISO_ERR_CODE(iso_error_code);
|
||||
if(iso_error_code<0)
|
||||
msg_text_pt= (char *) iso_error_to_msg(iso_error_code);
|
||||
if(msg_text_pt==NULL)
|
||||
msg_text_pt= msg_text;
|
||||
iso_sev= ISO_ERR_SEV(iso_error_code);
|
||||
sev_text_pt= min_severity;
|
||||
burn_text_to_sev(min_severity, &min_sev, 0);
|
||||
if(min_sev < iso_sev)
|
||||
/* >>> with libburn-0.4.4 do: burn_sev_to_text(iso_sev, &sev_text_pt, 0); */
|
||||
isoburn__sev_to_text(iso_sev, &sev_text_pt, 0);
|
||||
ret= burn_msgs_submit(error_code, msg_text_pt, os_errno, sev_text_pt, NULL);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
@ -80,8 +80,10 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
||||
o->prev= NULL;
|
||||
o->next= NULL;
|
||||
ret= iso_image_new("ISOIMAGE", &o->image);
|
||||
if(ret<0)
|
||||
if(ret<0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
|
||||
goto failed;
|
||||
}
|
||||
isoburn_link(o, isoburn_list_start, 1);
|
||||
return(1);
|
||||
failed:;
|
||||
@ -285,8 +287,10 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
||||
}
|
||||
|
||||
ret = iso_write_opts_new(&wopts, 0);
|
||||
if (ret < 0)
|
||||
goto ex;
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create iso_write_opts", 0, "FATAL",0);
|
||||
goto ex;
|
||||
}
|
||||
iso_write_opts_set_iso_level(wopts, opts->level);
|
||||
iso_write_opts_set_rockridge(wopts, opts->rockridge);
|
||||
iso_write_opts_set_joliet(wopts, opts->joliet);
|
||||
@ -330,8 +334,10 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
||||
}
|
||||
|
||||
ret = iso_image_create_burn_source(o->image, wopts, &wsrc);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
|
||||
/* TODO check return values for failure. propertly clean-up on error */
|
||||
|
||||
|
@ -36,8 +36,6 @@ struct isoburn {
|
||||
struct isoburn *next;
|
||||
|
||||
|
||||
/* --- My part --- */
|
||||
|
||||
/* Start address as given by image examination (bytes, not blocks) */
|
||||
off_t min_start_byte;
|
||||
|
||||
@ -61,8 +59,6 @@ struct isoburn {
|
||||
*/
|
||||
int wrote_well;
|
||||
|
||||
|
||||
/* --- Vreixo's part --- */
|
||||
|
||||
/* Buffered ISO head from media (should that become part of
|
||||
ecma119_read_opts ?) */
|
||||
@ -102,6 +98,20 @@ int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag);
|
||||
|
||||
/* Non API inner interfaces */
|
||||
|
||||
/* Submit a libisofs error to the libburn messenger. An application message
|
||||
reader shall recognize the error code range and attribute it to the
|
||||
libisofs message channel to which one cannot submit via API.
|
||||
@param iso_error_code return value <= 0 from a libisofs API call.
|
||||
@param default_msg_text is to be put out if iso_error_code leads to no
|
||||
error message
|
||||
@param os_errno operating system errno, submit 0 if none is known
|
||||
@param min_severity minimum severity, might be be increased if libisofs
|
||||
error severity surpasses min_severity.
|
||||
@param flag Bitfield, submit 0 for now
|
||||
*/
|
||||
int isoburn_report_iso_error(int iso_error_code, char default_msg_text[],
|
||||
int os_errno, char min_severity[], int flag);
|
||||
|
||||
/* Calls from burn_wrap.c into isofs_wrap.c */
|
||||
|
||||
int isoburn_start_emulation(struct isoburn *o, int flag);
|
||||
|
@ -143,14 +143,18 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
return -1;
|
||||
/* create a new image */
|
||||
ret = iso_image_new("ISOIMAGE", image);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
/* Blank new image for the drive */
|
||||
iso_image_unref(o->image);
|
||||
ret = iso_image_new("ISOIMAGE", &o->image);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
|
||||
return ret;
|
||||
}
|
||||
if (image) {
|
||||
*image = o->image;
|
||||
iso_image_ref(*image); /*protects object from premature free*/
|
||||
@ -173,8 +177,10 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
|
||||
/* create the data source */
|
||||
ret = iso_read_opts_new(&ropts, 0);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create write opts", 0, "FATAL", 0);
|
||||
return ret;
|
||||
}
|
||||
/* Important: do not return until iso_read_opts_free() */
|
||||
iso_read_opts_set_start_block(ropts, ms_block);
|
||||
iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
|
||||
@ -190,11 +196,13 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
ret = iso_image_import(o->image, ds, ropts, &features);
|
||||
iso_read_opts_free(ropts);
|
||||
iso_data_source_unref(ds);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
|
||||
return ret;
|
||||
}
|
||||
/* Important: do not return until free(features) */
|
||||
|
||||
if (image) {
|
||||
if (image!=NULL) {
|
||||
*image = o->image;
|
||||
iso_image_ref(*image); /*protects object from premature free*/
|
||||
}
|
||||
|
Reference in New Issue
Block a user