New API functions isoburn_preset_msgs_submit(), isoburn_set_msgs_submit()

This commit is contained in:
2008-06-18 16:14:44 +00:00
parent ceca17e946
commit ae5ad5a143
7 changed files with 195 additions and 77 deletions

View File

@ -37,10 +37,16 @@
#include "isoburn.h"
/* No more: version numbers out of configure.ac
major.minor.micro now comes from libisoburn.h
#include "../version.h"
/* Default values for application provided msgs_submit methods.
To be attached to newly aquired drives.
*/
int (*libisoburn_default_msgs_submit)
(void *handle, int error_code, char msg_text[],
int os_errno, char severity[], int flag)= NULL;
void *libisoburn_default_msgs_submit_handle= NULL;
int libisoburn_default_msgs_submit_flag= 0;
/* ----------------------- isoburn_toc_entry ---------------------- */
@ -53,9 +59,9 @@ int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
*objpt= o= (struct isoburn_toc_entry *)
malloc(sizeof(struct isoburn_toc_entry));
if(o==NULL) {
burn_msgs_submit(0x00060000,
"Cannot allocate memory for isoburn toc entry",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for isoburn toc entry",
0, "FATAL", 0);
return(-1);
}
o->session= 0;
@ -104,9 +110,9 @@ int isoburn_new(struct isoburn **objpt, int flag)
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
if(o==NULL) {
burn_msgs_submit(0x00060000,
"Cannot allocate memory for isoburn control object",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for isoburn control object",
0, "FATAL", 0);
return(-1);
}
@ -126,6 +132,9 @@ int isoburn_new(struct isoburn **objpt, int flag)
o->image= NULL;
o->read_pacifier= NULL;
o->read_pacifier_handle= NULL;
o->msgs_submit= NULL;
o->msgs_submit_handle= NULL;
o->msgs_submit_flag= 0;
o->prev= NULL;
o->next= NULL;
ret= iso_image_new("ISOIMAGE", &o->image);
@ -300,6 +309,31 @@ int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag)
}
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
int os_errno, char severity[], int flag)
{
int ret, use_drive_method= 0;
if(o!=NULL)
if(o->msgs_submit!=NULL)
use_drive_method= 1;
if(use_drive_method) {
ret= o->msgs_submit(o->msgs_submit_handle, error_code, msg_text, os_errno,
severity, o->msgs_submit_flag);
return(ret);
}
if(libisoburn_default_msgs_submit != NULL) {
ret= libisoburn_default_msgs_submit(libisoburn_default_msgs_submit_handle,
error_code, msg_text, os_errno, severity,
libisoburn_default_msgs_submit_flag);
return(ret);
}
/* Fallback: use message queue of libburn */
burn_msgs_submit(error_code, msg_text, os_errno, severity, NULL);
return(1);
}
static
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
struct burn_disc **disc,
@ -325,14 +359,14 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
state = isoburn_disc_get_status(in_d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
state != BURN_DISC_FULL) {
burn_msgs_submit(0x00060000, "Unsuitable source media state",
0, "FAILURE", NULL);
isoburn_msgs_submit(in_o, 0x00060000, "Unsuitable source media state",
0, "FAILURE", 0);
{ret= -2; goto ex;}
}
state = isoburn_disc_get_status(out_d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) {
burn_msgs_submit(0x00060000, "Unsuitable target media state",
0, "FAILURE", NULL);
isoburn_msgs_submit(out_o, 0x00060000, "Unsuitable target media state",
0, "FAILURE", 0);
{ret= -2; goto ex;}
}
@ -374,14 +408,14 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
if (ret != 1) {
burn_msgs_submit(0x00060000, "Cannot determine next writeable address", 0,
"FAILURE", NULL);
isoburn_msgs_submit(out_o, 0x00060000,
"Cannot determine next writeable address", 0, "FAILURE", 0);
{ret= -3; goto ex;}
}
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
burn_msgs_submit(0x00060000,
"Encountered 0 as next writeable address of appendable",
0, "FAILURE", NULL);
isoburn_msgs_submit(out_o, 0x00060000,
"Encountered 0 as next writeable address of appendable",
0, "FAILURE", 0);
{ret= -4; goto ex;}
}
iso_write_opts_set_ms_block(wopts, nwa);
@ -525,8 +559,8 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
if(o==NULL) {
burn_msgs_submit(0x00060000, "Cannot allocate memory for read options",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for read options", 0, "FATAL", 0);
return(-1);
}
o->norock= 0;
@ -662,9 +696,9 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
if(o==NULL) {
burn_msgs_submit(0x00060000,
"Cannot allocate memory for image generation options",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for image generation options",
0, "FATAL", 0);
return(-1);
}
o->level= 2;