Replaced some large local variables by other means in xorriso/drive_mgt.c

This commit is contained in:
Thomas Schmitt 2011-05-02 21:12:45 +00:00
parent dc815316c1
commit 8d03fbcd55
2 changed files with 54 additions and 37 deletions

View File

@ -49,9 +49,11 @@ int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
int flag) int flag)
{ {
int ret, is_known_mmc= 0; int ret, is_known_mmc= 0;
char *path_pt, libburn_adr[BURN_DRIVE_ADR_LEN + SfileadrL]; char *path_pt, *libburn_adr= NULL;
char *abs_pt, abs_adr[SfileadrL]; char *abs_pt, *abs_adr= NULL;
Xorriso_alloc_meM(libburn_adr, char, BURN_DRIVE_ADR_LEN + SfileadrL);
Xorriso_alloc_meM(abs_adr, char, SfileadrL);
path_pt= adr; path_pt= adr;
if(strncmp(adr, "stdio:", 6) == 0) if(strncmp(adr, "stdio:", 6) == 0)
path_pt= adr + 6; path_pt= adr + 6;
@ -67,11 +69,11 @@ int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
Xorriso_msgs_submit(xorriso, 0, Xorriso_msgs_submit(xorriso, 0,
"Relative drive path given. Cannot determine working directory.", "Relative drive path given. Cannot determine working directory.",
errno, "FAILURE", 0); errno, "FAILURE", 0);
return(-1); {ret= -1; goto ex;}
} }
ret= Sfile_add_to_path(abs_adr, path_pt, 0); ret= Sfile_add_to_path(abs_adr, path_pt, 0);
if(ret <= 0) if(ret <= 0)
return(-1); {ret= -1; goto ex;}
} }
is_known_mmc= burn_drive_convert_fs_adr(path_pt, libburn_adr); is_known_mmc= burn_drive_convert_fs_adr(path_pt, libburn_adr);
@ -82,7 +84,7 @@ int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
goto ok; goto ok;
ret= Xorriso_is_in_patternlist(xorriso, xorriso->drive_blacklist, path_pt, 0); ret= Xorriso_is_in_patternlist(xorriso, xorriso->drive_blacklist, path_pt, 0);
if(ret < 0) if(ret < 0)
return(ret); goto ex;
if(ret) { if(ret) {
strcpy(xorriso->info_text, "Drive address "); strcpy(xorriso->info_text, "Drive address ");
Text_shellsafe(adr, xorriso->info_text, 1); Text_shellsafe(adr, xorriso->info_text, 1);
@ -92,15 +94,15 @@ int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
ret - 1, 0), ret - 1, 0),
xorriso->info_text, 1); xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0); {ret= 0; goto ex;}
} }
/* if in greylist and not MMC and not stdio prefix: reject */ /* if in greylist and not MMC and not stdio prefix: reject */
if(is_known_mmc < 0) if(is_known_mmc < 0)
return(ret); goto ex;
if(adr == path_pt && !is_known_mmc) { /* no prefix, no MMC */ if(adr == path_pt && !is_known_mmc) { /* no prefix, no MMC */
ret= Xorriso_is_in_patternlist(xorriso, xorriso->drive_greylist, path_pt,0); ret= Xorriso_is_in_patternlist(xorriso, xorriso->drive_greylist, path_pt,0);
if(ret < 0) if(ret < 0)
return(ret); goto ex;
if(ret) { if(ret) {
strcpy(xorriso->info_text, "Drive address "); strcpy(xorriso->info_text, "Drive address ");
Text_shellsafe(adr, xorriso->info_text, 1); Text_shellsafe(adr, xorriso->info_text, 1);
@ -113,30 +115,34 @@ int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
Xorriso_msgs_submit(xorriso, 0, Xorriso_msgs_submit(xorriso, 0,
"If the address is a legitimate target, prepend \"stdio:\"", "If the address is a legitimate target, prepend \"stdio:\"",
0, "HINT", 0); 0, "HINT", 0);
return(0); {ret= 0; goto ex;}
} }
} }
ok:; ok:;
if(strncmp(adr, "mmc:", 4) == 0) { if(strncmp(adr, "mmc:", 4) == 0) {
if(Sfile_str(result, path_pt, 0) <= 0) if(Sfile_str(result, path_pt, 0) <= 0)
return(0); {ret= 0; goto ex;}
} else if(adr == path_pt && is_known_mmc <= 0) { } else if(adr == path_pt && is_known_mmc <= 0) {
Sfile_str(result, "stdio:", 0); Sfile_str(result, "stdio:", 0);
if(Sfile_str(result, adr, 1) <= 0) if(Sfile_str(result, adr, 1) <= 0)
return(0); {ret= 0; goto ex;}
} else { } else {
if(Sfile_str(result, adr, 0) <= 0) if(Sfile_str(result, adr, 0) <= 0)
return(0); {ret= 0; goto ex;}
} }
if(strncmp(result, "stdio:", 6)==0) { if(strncmp(result, "stdio:", 6)==0) {
if(xorriso->ban_stdio_write) { if(xorriso->ban_stdio_write) {
strcpy(xorriso->info_text, "Drive address banned by -ban_stdio_write : "); strcpy(xorriso->info_text, "Drive address banned by -ban_stdio_write : ");
Text_shellsafe(result, xorriso->info_text, 1); Text_shellsafe(result, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0); {ret= 0; goto ex;}
} }
} }
return(1); ret= 1;
ex:;
Xorriso_free_meM(libburn_adr);
Xorriso_free_meM(abs_adr);
return(ret);
} }
@ -162,27 +168,30 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
IsoImage *volset = NULL; IsoImage *volset = NULL;
IsoNode *root_node; IsoNode *root_node;
struct isoburn_read_opts *ropts= NULL; struct isoburn_read_opts *ropts= NULL;
char libburn_adr[SfileadrL], *boot_fate, *sev; char *libburn_adr= NULL, *boot_fate, *sev;
size_t value_length; size_t value_length;
char *value= NULL; char *value= NULL;
double num; double num;
char volid[33], adr_data[163], *adr_pt; char volid[33], *adr_data, *adr_pt;
Xorriso_alloc_meM(libburn_adr, char, SfileadrL);
Xorriso_alloc_meM(adr_data, char, 163);
if((flag&3)==0) { if((flag&3)==0) {
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"XORRISOBURN program error : Xorriso_aquire_drive bit0+bit1 not set"); "XORRISOBURN program error : Xorriso_aquire_drive bit0+bit1 not set");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(-1); {ret= -1; goto ex;}
} }
ret= Xorriso_give_up_drive(xorriso, (flag&3)|8); ret= Xorriso_give_up_drive(xorriso, (flag&3)|8);
if(ret<=0) if(ret<=0)
return(ret); goto ex;
if(flag & 1) if(flag & 1)
xorriso->isofs_st_out= time(0) - 1; xorriso->isofs_st_out= time(0) - 1;
ret= Xorriso_auto_driveadr(xorriso, adr, libburn_adr, 0); ret= Xorriso_auto_driveadr(xorriso, adr, libburn_adr, 0);
if(ret <= 0) if(ret <= 0)
return(ret); goto ex;
if(strcmp(libburn_adr,"stdio:/dev/fd/1")==0) { if(strcmp(libburn_adr,"stdio:/dev/fd/1")==0) {
if(xorriso->dev_fd_1<0) { if(xorriso->dev_fd_1<0) {
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
@ -529,6 +538,8 @@ ex:
} }
if(ropts!=NULL) if(ropts!=NULL)
isoburn_ropt_destroy(&ropts, 0); isoburn_ropt_destroy(&ropts, 0);
Xorriso_free_meM(libburn_adr);
Xorriso_free_meM(adr_data);
return(ret); return(ret);
} }
@ -543,13 +554,12 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
int in_is_out_too, ret, do_eject; int in_is_out_too, ret, do_eject;
struct burn_drive_info *dinfo; struct burn_drive_info *dinfo;
struct burn_drive *drive; struct burn_drive *drive;
char sfe[5*SfileadrL];
in_is_out_too= (xorriso->in_drive_handle == xorriso->out_drive_handle); in_is_out_too= (xorriso->in_drive_handle == xorriso->out_drive_handle);
if((flag&4) && in_is_out_too && (flag&(1|2))) { if((flag&4) && in_is_out_too && (flag&(1|2))) {
if((flag&3)!=3) { if((flag&3)!=3) {
sprintf(xorriso->info_text,"Giving up for -eject whole -dev %s", sprintf(xorriso->info_text,"Giving up for -eject whole -dev ");
Text_shellsafe(xorriso->indev, sfe, 0)); Text_shellsafe(xorriso->indev, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
} }
flag|= 3; /* give up in/out drive to eject it */ flag|= 3; /* give up in/out drive to eject it */
@ -681,28 +691,32 @@ ex:;
int Xorriso_reaquire_outdev(struct XorrisO *xorriso, int flag) int Xorriso_reaquire_outdev(struct XorrisO *xorriso, int flag)
{ {
int ret, aq_flag; int ret, aq_flag;
char drive_name[SfileadrL], sfe[5*SfileadrL]; char *drive_name= NULL;
Xorriso_alloc_meM(drive_name, char, SfileadrL);
aq_flag= flag&3; aq_flag= flag&3;
strcpy(drive_name, xorriso->outdev); strcpy(drive_name, xorriso->outdev);
Xorriso_give_up_drive(xorriso, aq_flag); Xorriso_give_up_drive(xorriso, aq_flag);
if(aq_flag==0) { if(aq_flag==0) {
sprintf(xorriso->info_text,"Gave up -outdev %s", sprintf(xorriso->info_text,"Gave up -outdev ");
Text_shellsafe(xorriso->outdev, sfe, 0)); Text_shellsafe(xorriso->outdev, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(1); {ret= 1; goto ex;}
} }
sprintf(xorriso->info_text,"Re-aquiring -outdev %s", sprintf(xorriso->info_text,"Re-aquiring -outdev ");
Text_shellsafe(drive_name, sfe, 0)); Text_shellsafe(drive_name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
ret= Xorriso_aquire_drive(xorriso, drive_name, aq_flag); ret= Xorriso_aquire_drive(xorriso, drive_name, aq_flag);
if(ret<=0) { if(ret<=0) {
sprintf(xorriso->info_text,"Could not re-aquire -outdev %s", sprintf(xorriso->info_text,"Could not re-aquire -outdev ");
Text_shellsafe(xorriso->outdev, sfe, 0)); Text_shellsafe(xorriso->outdev, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(ret); goto ex;
} }
return(1); ret= 1;
ex:;
Xorriso_free_meM(drive_name);
return(ret);
} }
@ -1681,7 +1695,7 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
int start_lba= 0; int start_lba= 0;
struct burn_drive *drive; struct burn_drive *drive;
struct burn_drive_info *dinfo; struct burn_drive_info *dinfo;
char data[64*1024], sfe[5*SfileadrL]; char *data= NULL;
off_t data_count, to_read, read_count= 0, write_amount; off_t data_count, to_read, read_count= 0, write_amount;
double pre_read_time, post_read_time, time_diff, total_time_diff= 0; double pre_read_time, post_read_time, time_diff, total_time_diff= 0;
double last_abort_file_time= 0; double last_abort_file_time= 0;
@ -1692,6 +1706,8 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
int tag_type= 0, valid, was_sb_tag= 0, in_track_gap= 0; int tag_type= 0, valid, was_sb_tag= 0, in_track_gap= 0;
char *comparison= "", *sev_text= "DEBUG", *tag_type_name= ""; char *comparison= "", *sev_text= "DEBUG", *tag_type_name= "";
Xorriso_alloc_meM(data, char, 64*1024);
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
"on attempt to check media readability", "on attempt to check media readability",
2 * !!job->use_dev); 2 * !!job->use_dev);
@ -1966,9 +1982,9 @@ abort_check:;
SEEK_SET); SEEK_SET);
if(ret == -1) { if(ret == -1) {
failed_to_write:; failed_to_write:;
sprintf(xorriso->info_text, "Cannot write %d bytes to lba %d of %s", sprintf(xorriso->info_text, "Cannot write %d bytes to lba %d of ",
(int) data_count, i + from_lba, (int) data_count, i + from_lba);
Text_shellsafe(job->data_to_path, sfe, 0)); Text_shellsafe(job->data_to_path, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno,
"FAILURE", 0); "FAILURE", 0);
{ret= 0; goto ex;} {ret= 0; goto ex;}
@ -2034,6 +2050,7 @@ failed_to_write:;
ex: ex:
if(ctx != NULL) if(ctx != NULL)
iso_md5_end(&ctx, md5); iso_md5_end(&ctx, md5);
Xorriso_free_meM(data);
return(ret); return(ret);
} }

View File

@ -1 +1 @@
#define Xorriso_timestamP "2011.05.02.191905" #define Xorriso_timestamP "2011.05.02.211310"