Converted "libburn_experimental:" messages of address conversion into "DEBUG"

This commit is contained in:
Thomas Schmitt 2006-09-25 10:44:55 +00:00
parent 17b88c42fb
commit d388eb3dea
4 changed files with 137 additions and 78 deletions

View File

@ -250,6 +250,16 @@ or
#endif #endif
/** Verbosity level for pacifying progress messages */
#define Cdrskin_verbose_progresS 1
/** Verbosity level for command recognition and execution logging */
#define Cdrskin_verbose_cmD 2
/** Verbosity level for reporting of debugging messages */
#define Cdrskin_verbose_debuG 3
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -1119,12 +1129,14 @@ static char Cdrpreskin_sys_rc_nameS[Cdrpreskin_rc_nuM][80]= {
}; };
/** A structure which bundles several parameters for initialization of /** A structure which bundles several parameters for creation of the CdrskiN
libburn and creation of the CdrskiN object. It finally becomes a managed object. It finally becomes a managed subordinate of the CdrskiN object.
subordinate of the CdrskiN object.
*/ */
struct CdrpreskiN { struct CdrpreskiN {
/* to be transfered into skin */
int verbosity;
/** Stores eventually given absolute device address before translation */ /** Stores eventually given absolute device address before translation */
char raw_device_adr[Cdrskin_adrleN]; char raw_device_adr[Cdrskin_adrleN];
@ -1212,6 +1224,7 @@ int Cdrpreskin_new(struct CdrpreskiN **preskin, int flag)
if(o==NULL) if(o==NULL)
return(-1); return(-1);
o->verbosity= 0;
o->raw_device_adr[0]= 0; o->raw_device_adr[0]= 0;
o->device_adr[0]= 0; o->device_adr[0]= 0;
o->adr_trn= NULL; o->adr_trn= NULL;
@ -1269,6 +1282,19 @@ int Cdrpreskin_destroy(struct CdrpreskiN **preskin, int flag)
} }
int Cdrpreskin_initialize_lib(struct CdrpreskiN *preskin, int flag)
{
if(!burn_initialize()) {
fprintf(stderr,"cdrskin : FATAL : Initialization of libburn failed\n");
return(0);
}
#ifdef Cdrskin_libburn_has_burn_msgS
burn_msgs_set_severities("NEVER","SORRY","cdrskin: ");
#endif
return(1);
}
/** Convert a cdrecord-style device address into a libburn device address or /** Convert a cdrecord-style device address into a libburn device address or
into a libburn drive number. It depends on the "scsibus" number of the into a libburn drive number. It depends on the "scsibus" number of the
cdrecord-style address which kind of libburn address emerges: cdrecord-style address which kind of libburn address emerges:
@ -1732,6 +1758,16 @@ see_cdrskin_eng_html:;
} else if(strcmp(argv[i],"-scanbus")==0) { } else if(strcmp(argv[i],"-scanbus")==0) {
o->no_whitelist= 1; o->no_whitelist= 1;
} else if(strcmp(argv[i],"-v")==0 || strcmp(argv[i],"-verbose")==0) {
(o->verbosity)++;
printf("cdrskin: verbosity level : %d\n",o->verbosity);
#ifdef Cdrskin_libburn_has_burn_msgS
if(o->verbosity>=Cdrskin_verbose_debuG)
burn_msgs_set_severities("NEVER","DEBUG","cdrskin: ");
#endif
} else if(strcmp(argv[i],"-version")==0) { } else if(strcmp(argv[i],"-version")==0) {
printf( printf(
"Cdrecord 2.01-Emulation Copyright (C) 2006, see libburn.pykix.org\n"); "Cdrecord 2.01-Emulation Copyright (C) 2006, see libburn.pykix.org\n");
@ -1838,16 +1874,6 @@ ex:;
/** Verbosity level for pacifying progress messages */
#define Cdrskin_verbose_progresS 1
/** Verbosity level for command recognition and execution logging */
#define Cdrskin_verbose_cmD 2
/** Verbosity level for reporting of debugging messages */
#define Cdrskin_verbose_debuG 3
/** The maximum number of tracks */ /** The maximum number of tracks */
#define Cdrskin_track_maX 99 #define Cdrskin_track_maX 99
@ -2018,7 +2044,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
if(o==NULL) if(o==NULL)
return(-1); return(-1);
o->preskin= preskin; o->preskin= preskin;
o->verbosity= 0; o->verbosity= preskin->verbosity;
o->x_speed= -1.0; o->x_speed= -1.0;
o->gracetime= 0; o->gracetime= 0;
o->dummy_mode= 0; o->dummy_mode= 0;
@ -4288,9 +4314,7 @@ track_too_large:;
printf("cdrskin: fixed track size : %.f\n",skin->fixed_size); printf("cdrskin: fixed track size : %.f\n",skin->fixed_size);
} else if(strcmp(argv[i],"-v")==0 || strcmp(argv[i],"-verbose")==0) { } else if(strcmp(argv[i],"-v")==0 || strcmp(argv[i],"-verbose")==0) {
(skin->verbosity)++; /* is handled in Cdrpreskin_setup() */;
/* <<< is much too verbous: burn_set_verbosity(skin->verbosity); */
printf("cdrskin: verbosity level : %d\n",skin->verbosity);
} else if( i==argc-1 || } else if( i==argc-1 ||
(skin->single_track==0 && strchr(argv[i],'=')==NULL (skin->single_track==0 && strchr(argv[i],'=')==NULL
@ -4370,7 +4394,6 @@ ignore_unknown:;
if(flag&1) /* no finalizing yet */ if(flag&1) /* no finalizing yet */
return(1); return(1);
if(skin->verbosity>=Cdrskin_verbose_cmD) { if(skin->verbosity>=Cdrskin_verbose_cmD) {
if(skin->preskin->abort_handler==1) if(skin->preskin->abort_handler==1)
printf("cdrskin: installed abort handler.\n"); printf("cdrskin: installed abort handler.\n");
@ -4445,24 +4468,13 @@ ignore_unknown:;
@return <=0 error, 1 success @return <=0 error, 1 success
*/ */
int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin, int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
int *lib_initialized, int *exit_value, int flag) int *exit_value, int flag)
{ {
int ret; int ret;
struct CdrskiN *skin; struct CdrskiN *skin;
*o= NULL; *o= NULL;
*exit_value= 0; *exit_value= 0;
*lib_initialized= 0;
if(!burn_initialize()) {
fprintf(stderr,"cdrskin : FATAL : initialization of libburn failed\n");
{*exit_value= 11; goto ex;}
}
*lib_initialized= 1;
#ifdef Cdrskin_libburn_has_burn_msgS
burn_msgs_set_severities("NEVER","SORRY","cdrskin: ");
#endif
#ifndef Cdrskin_libburn_no_burn_preset_device_opeN #ifndef Cdrskin_libburn_no_burn_preset_device_opeN
burn_preset_device_open((*preskin)->drive_exclusive, burn_preset_device_open((*preskin)->drive_exclusive,
@ -4492,9 +4504,11 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
printf("cdrskin: scanning for devices ...\n"); printf("cdrskin: scanning for devices ...\n");
fflush(stdout); fflush(stdout);
while (!burn_drive_scan(&(skin->drives), &(skin->n_drives))) { while (!burn_drive_scan(&(skin->drives), &(skin->n_drives))) {
/*
if(skin->verbosity>=Cdrskin_verbose_debuG) if(skin->verbosity>=Cdrskin_verbose_debuG)
ClN(fprintf(stderr,"\ncdrskin_debug: ... still scanning ...")); ClN(fprintf(stderr,"cdrskin_debug: ... still scanning ...\n"));
/* >>> ??? wait a while ? */ */
usleep(20000);
/* >>> ??? set a timeout ? */ /* >>> ??? set a timeout ? */
} }
printf("cdrskin: ... scanning for devices done\n"); printf("cdrskin: ... scanning for devices done\n");
@ -4581,15 +4595,26 @@ int main(int argc, char **argv)
ret= Cdrpreskin_new(&preskin,0); ret= Cdrpreskin_new(&preskin,0);
if(ret<=0) { if(ret<=0) {
fprintf(stderr,"cdrskin: FATAL : creation of control object failed\n"); fprintf(stderr,"cdrskin: FATAL : Creation of control object failed\n");
{exit_value= 2; goto ex;} {exit_value= 2; goto ex;}
} }
/* <<< A60925: i would prefer to do this later, after it is clear that no
-version or -help cause idle end. But address conversion and its debug
messaging need libburn running */
ret= Cdrpreskin_initialize_lib(preskin,0);
if(ret<=0) {
fprintf(stderr,"cdrskin: FATAL : Initializiation of burn library failed\n");
{exit_value= 2; goto ex;}
}
lib_initialized= 1;
ret= Cdrpreskin_setup(preskin,argc,argv,0); ret= Cdrpreskin_setup(preskin,argc,argv,0);
if(ret<=0) if(ret<=0)
{exit_value= 11; goto ex;} {exit_value= 11; goto ex;}
if(ret==2) if(ret==2)
{exit_value= 0; goto ex;} {exit_value= 0; goto ex;}
ret= Cdrskin_create(&skin,&preskin,&lib_initialized,&exit_value,0); ret= Cdrskin_create(&skin,&preskin,&exit_value,0);
if(ret<=0) if(ret<=0)
{exit_value= 2; goto ex;} {exit_value= 2; goto ex;}
if(skin->n_drives<=0) { if(skin->n_drives<=0) {

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2006.09.24.180836" #define Cdrskin_timestamP "2006.09.25.104629"

View File

@ -13,7 +13,11 @@
#include "libburn.h" #include "libburn.h"
#include "drive.h" #include "drive.h"
#include "transport.h" #include "transport.h"
/* ts A60925 : obsoleted by libdax_msgs.h
#include "message.h" #include "message.h"
*/
#include "debug.h" #include "debug.h"
#include "init.h" #include "init.h"
#include "toc.h" #include "toc.h"
@ -22,6 +26,9 @@
#include "structure.h" #include "structure.h"
#include "back_hacks.h" #include "back_hacks.h"
#include "libdax_msgs.h"
extern struct libdax_msgs *libdax_messenger;
static struct burn_drive drive_array[255]; static struct burn_drive drive_array[255];
static int drivetop = -1; static int drivetop = -1;
@ -658,6 +665,29 @@ int burn_drive_scan_and_grab(struct burn_drive_info *drive_infos[], char* adr,
return 1; return 1;
} }
/* ts A60925 */
/** Simple debug message frontend to libdax_msgs_submit().
If arg is not NULL, then fmt MUST contain exactly one %s and no
other sprintf() %-formatters.
*/
int burn_drive_adr_debug_msg(char *fmt, char *arg)
{
int ret;
char msg[4096], *msgpt;
msgpt= msg;
if(arg != NULL)
sprintf(msg, fmt, arg);
else
msgpt= fmt;
if(libdax_messenger == NULL)
return 0;
ret = libdax_msgs_submit(libdax_messenger, -1, 0x00000002,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
msgpt, 0, 0);
return ret;
}
/* ts A60923 */ /* ts A60923 */
/** Inquire the persistent address of the given drive. */ /** Inquire the persistent address of the given drive. */
int burn_drive_raw_get_adr(struct burn_drive *d, char adr[]) int burn_drive_raw_get_adr(struct burn_drive *d, char adr[])
@ -691,29 +721,24 @@ int burn_drive_is_enumerable_adr(char *adr)
int burn_drive_resolve_link(char *path, char adr[]) int burn_drive_resolve_link(char *path, char adr[])
{ {
int ret; int ret;
char link_target[4096]; char link_target[4096], msg[4096+100];
fprintf(stderr,"libburn experimental: burn_drive_resolve_link( %s )\n",path);
burn_drive_adr_debug_msg("burn_drive_resolve_link( %s )",path);
ret = readlink(path, link_target, sizeof(link_target)); ret = readlink(path, link_target, sizeof(link_target));
if(ret == -1) { if(ret == -1) {
burn_drive_adr_debug_msg("readlink( %s ) returns -1", path);
fprintf(stderr,"libburn experimental: readlink( %s ) returns -1\n",path);
return 0; return 0;
} }
if(ret >= sizeof(link_target) - 1) { if(ret >= sizeof(link_target) - 1) {
sprintf(msg,"readlink( %s ) returns %d (too much)", path, ret);
fprintf(stderr,"libburn experimental: readlink( %s ) returns %d (too much)\n",path,ret); burn_drive_adr_debug_msg(msg, NULL);
return -1; return -1;
} }
link_target[ret] = 0; link_target[ret] = 0;
ret = burn_drive_convert_fs_adr(link_target, adr); ret = burn_drive_convert_fs_adr(link_target, adr);
sprintf(msg,"burn_drive_convert_fs_adr( %s ) returns %d",
fprintf(stderr,"libburn experimental: burn_drive_convert_fs_adr( %s ) returns %d\n",link_target,ret); link_target, ret);
burn_drive_adr_debug_msg(msg, NULL);
return ret; return ret;
} }
@ -721,7 +746,7 @@ fprintf(stderr,"libburn experimental: burn_drive_convert_fs_adr( %s ) returns %d
/* Try to find an enumerated address with the given stat.st_rdev number */ /* Try to find an enumerated address with the given stat.st_rdev number */
int burn_drive_find_devno(dev_t devno, char adr[]) int burn_drive_find_devno(dev_t devno, char adr[])
{ {
char fname[4096]; char fname[4096], msg[4096+100];
int i, ret = 0, first = 1; int i, ret = 0, first = 1;
struct stat stbuf; struct stat stbuf;
@ -738,8 +763,9 @@ int burn_drive_find_devno(dev_t devno, char adr[])
if(strlen(fname) >= BURN_DRIVE_ADR_LEN) if(strlen(fname) >= BURN_DRIVE_ADR_LEN)
return -1; return -1;
fprintf(stderr,"libburn experimental: burn_drive_find_devno( 0x%lX ) found %s\n", (long) devno, fname); sprintf(msg, "burn_drive_find_devno( 0x%lX ) found %s",
(long) devno, fname);
burn_drive_adr_debug_msg(msg, NULL);
strcpy(adr, fname); strcpy(adr, fname);
return 1; return 1;
} }
@ -783,12 +809,14 @@ int burn_drive_obtain_scsi_adr(char *path, int *host_no, int *channel_no,
int burn_drive_convert_scsi_adr(int host_no, int channel_no, int target_no, int burn_drive_convert_scsi_adr(int host_no, int channel_no, int target_no,
int lun_no, char adr[]) int lun_no, char adr[])
{ {
char fname[4096]; char fname[4096],msg[4096+100];
int i, ret = 0, first = 1; int i, ret = 0, first = 1;
int i_host_no = -1, i_channel_no = -1, i_target_no = -1, i_lun_no = -1; int i_host_no = -1, i_channel_no = -1, i_target_no = -1, i_lun_no = -1;
fprintf(stderr,"libburn experimental: burn_drive_convert_scsi_adr( %d,%d,%d,%d )\n", host_no, channel_no, target_no, lun_no); sprintf(msg,"burn_drive_convert_scsi_adr( %d,%d,%d,%d )",
host_no, channel_no, target_no, lun_no);
burn_drive_adr_debug_msg(msg, NULL);
while (1) { while (1) {
ret= sg_give_next_adr(&i, fname, sizeof(fname), first); ret= sg_give_next_adr(&i, fname, sizeof(fname), first);
@ -809,9 +837,8 @@ fprintf(stderr,"libburn experimental: burn_drive_convert_scsi_adr( %d,%d,%d,%d )
continue; continue;
if(strlen(fname) >= BURN_DRIVE_ADR_LEN) if(strlen(fname) >= BURN_DRIVE_ADR_LEN)
return -1; return -1;
burn_drive_adr_debug_msg(
fprintf(stderr,"libburn experimental: burn_drive_convert_scsi_adr() found %s\n", fname); "burn_drive_convert_scsi_adr() found %s", fname);
strcpy(adr, fname); strcpy(adr, fname);
return 1; return 1;
} }
@ -825,17 +852,19 @@ int burn_drive_find_scsi_equiv(char *path, char adr[])
{ {
int ret = 0; int ret = 0;
int host_no, channel_no, target_no, lun_no; int host_no, channel_no, target_no, lun_no;
char msg[4096];
ret = burn_drive_obtain_scsi_adr(path, &host_no, &channel_no, ret = burn_drive_obtain_scsi_adr(path, &host_no, &channel_no,
&target_no, &lun_no); &target_no, &lun_no);
if(ret <= 0) { if(ret <= 0) {
sprintf(msg,"burn_drive_obtain_scsi_adr( %s ) returns %d\n",
fprintf(stderr,"libburn experimental: burn_drive_obtain_scsi_adr( %s ) returns %d\n", path, ret); path, ret);
burn_drive_adr_debug_msg(msg, NULL);
return 0; return 0;
} }
sprintf(msg, "burn_drive_find_scsi_equiv( %s ) : %d,%d,%d,%d\n",
fprintf(stderr,"libburn experimental: burn_drive_find_scsi_equiv( %s ) : %d,%d,%d,%d\n", path, host_no, channel_no, target_no, lun_no); path, host_no, channel_no, target_no, lun_no);
burn_drive_adr_debug_msg(msg, NULL);
ret= burn_drive_convert_scsi_adr(host_no, channel_no, target_no, ret= burn_drive_convert_scsi_adr(host_no, channel_no, target_no,
lun_no, adr); lun_no, adr);
@ -850,23 +879,20 @@ int burn_drive_convert_fs_adr(char *path, char adr[])
{ {
int ret; int ret;
struct stat stbuf; struct stat stbuf;
char msg[4096];
fprintf(stderr,"libburn experimental: burn_drive_convert_fs_adr( %s )\n",path); burn_drive_adr_debug_msg("burn_drive_convert_fs_adr( %s )", path);
if(burn_drive_is_enumerable_adr(path)) { if(burn_drive_is_enumerable_adr(path)) {
if(strlen(path) >= BURN_DRIVE_ADR_LEN) if(strlen(path) >= BURN_DRIVE_ADR_LEN)
return -1; return -1;
burn_drive_adr_debug_msg(
fprintf(stderr,"libburn experimental: burn_drive_is_enumerable_adr( %s ) is true\n",path); "burn_drive_is_enumerable_adr( %s ) is true", path);
strcpy(adr, path); strcpy(adr, path);
return 1; return 1;
} }
if(lstat(path, &stbuf) == -1) { if(lstat(path, &stbuf) == -1) {
burn_drive_adr_debug_msg("lstat( %s ) returns -1", path);
fprintf(stderr,"libburn experimental: lstat( %s ) returns -1\n",path);
return 0; return 0;
} }
if((stbuf.st_mode & S_IFMT) == S_IFLNK) { if((stbuf.st_mode & S_IFMT) == S_IFLNK) {
@ -883,9 +909,7 @@ fprintf(stderr,"libburn experimental: lstat( %s ) returns -1\n",path);
if(ret > 0) if(ret > 0)
return 1; return 1;
} }
burn_drive_adr_debug_msg("Nothing found for %s", path);
fprintf(stderr,"libburn experimental: Nothing found for %s \n",path);
return 0; return 0;
} }

View File

@ -38,6 +38,21 @@ int burn_sg_open_o_nonblock = 1;
int burn_sg_open_abort_busy = 0; int burn_sg_open_abort_busy = 0;
/* ts A60925 : ticket 74 */
/** Create the messenger object for libburn. */
int burn_msgs_initialize(void)
{
int ret;
if(libdax_messenger == NULL)
ret = libdax_msgs_new(&libdax_messenger,0);
if (ret <= 0)
return 0;
libdax_msgs_set_severities(libdax_messenger, LIBDAX_MSGS_SEV_NEVER,
LIBDAX_MSGS_SEV_FATAL, "libburn: ", 0);
return 1;
}
/* ts A60924 : ticket 74 : Added use of global libdax_messenger */ /* ts A60924 : ticket 74 : Added use of global libdax_messenger */
int burn_initialize(void) int burn_initialize(void)
{ {
@ -45,14 +60,9 @@ int burn_initialize(void)
if (burn_running) if (burn_running)
return 1; return 1;
ret = burn_msgs_initialize();
ret = libdax_msgs_new(&libdax_messenger,0);
if (ret <= 0) if (ret <= 0)
return 0; return 0;
/* A60924: Apps enable queueing via burn_msgs_set_severities() */
libdax_msgs_set_severities(libdax_messenger, LIBDAX_MSGS_SEV_NEVER,
LIBDAX_MSGS_SEV_FATAL, "libburn: ", 0);
burn_running = 1; burn_running = 1;
return 1; return 1;
} }