Took into respect new drive role 3
This commit is contained in:
parent
5e995c9cd0
commit
c78403d8cf
@ -275,7 +275,12 @@ and device files which have the same SCSI address parameters (e.g. /dev/sg0).
|
|||||||
.br
|
.br
|
||||||
.PP
|
.PP
|
||||||
Option --allow_emulated_drives enables addressing of pseudo-drives
|
Option --allow_emulated_drives enables addressing of pseudo-drives
|
||||||
which get emulated on top of a regular data file or a block device.
|
which get emulated on top of filesystem objects. Regular data files and
|
||||||
|
block devices result in pseudo-drives which behave much like DVD-RAM.
|
||||||
|
If the given address does not exist yet but its directory exists, then
|
||||||
|
it gets created as regular file.
|
||||||
|
Other file types like character devices or pipes result in pseudo-drives
|
||||||
|
which behave much like blank DVD-R.
|
||||||
The target file address is given after prefix "stdio:".
|
The target file address is given after prefix "stdio:".
|
||||||
.br
|
.br
|
||||||
E.g.: dev=stdio:/tmp/my_pseudo_drive
|
E.g.: dev=stdio:/tmp/my_pseudo_drive
|
||||||
@ -283,11 +288,15 @@ E.g.: dev=stdio:/tmp/my_pseudo_drive
|
|||||||
Warning: Superusers must take care not to spoil their hard disk via its raw
|
Warning: Superusers must take care not to spoil their hard disk via its raw
|
||||||
block device (like /dev/hda or /dev/sd0).
|
block device (like /dev/hda or /dev/sd0).
|
||||||
.br
|
.br
|
||||||
Pseudo-drives behave much like DVD-RAM. They allow -dummy, nevertheless, and
|
Addresses of the form "stdio:/dev/fd/<number>" are treated special. The
|
||||||
their reply with --tell_media_space can be utopic. If the given address does
|
number is read literally and used as open file descriptor. With
|
||||||
not exist yet but its directory exists, then it gets created as regular file
|
dev="stdio:/dev/fd/1" the normal standard output of the program is
|
||||||
as soon as a write operation occurs.
|
redirected to stderr and the stream data of a burn run will appear on stdout.
|
||||||
Note: -dummy burn runs touch the file.
|
.br
|
||||||
|
Not good for terminals ! Redirect it.
|
||||||
|
.br
|
||||||
|
Pseudo-drives allow -dummy. Their reply with --tell_media_space can be utopic.
|
||||||
|
Note: -dummy burn runs touch the file but do not modify its data content.
|
||||||
.br
|
.br
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
|
@ -1756,6 +1756,8 @@ struct CdrpreskiN {
|
|||||||
int demands_cdrecord_caps;
|
int demands_cdrecord_caps;
|
||||||
int demands_cdrskin_caps;
|
int demands_cdrskin_caps;
|
||||||
|
|
||||||
|
int result_fd;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1815,6 +1817,7 @@ int Cdrpreskin_new(struct CdrpreskiN **preskin, int flag)
|
|||||||
o->fallback_program[0]= 0;
|
o->fallback_program[0]= 0;
|
||||||
o->demands_cdrecord_caps= 0;
|
o->demands_cdrecord_caps= 0;
|
||||||
o->demands_cdrskin_caps= 0;
|
o->demands_cdrskin_caps= 0;
|
||||||
|
o->result_fd = -1;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2118,6 +2121,15 @@ ata_bus:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the eventual output fd for the result of Cdrskin_msinfo()
|
||||||
|
*/
|
||||||
|
int Cdrpreskin_set_result_fd(struct CdrpreskiN *o, int result_fd, int flag)
|
||||||
|
{
|
||||||
|
o->result_fd= result_fd;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef Cdrskin_extra_leaN
|
#ifndef Cdrskin_extra_leaN
|
||||||
|
|
||||||
/** Load content startup files into preskin cache */
|
/** Load content startup files into preskin cache */
|
||||||
@ -2744,6 +2756,13 @@ final_checks:;
|
|||||||
int driveno,hret;
|
int driveno,hret;
|
||||||
char *adr,buf[Cdrskin_adrleN];
|
char *adr,buf[Cdrskin_adrleN];
|
||||||
|
|
||||||
|
if(strcmp(o->raw_device_adr,"stdio:-")==0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"cdrskin: SORRY : Cannot accept drive address \"stdio:-\".\n");
|
||||||
|
fprintf(stderr,
|
||||||
|
"cdrskin: HINT : Use \"stdio:/dev/fd/1\" if you really want to write to stdout.\n");
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
}
|
||||||
adr= o->raw_device_adr;
|
adr= o->raw_device_adr;
|
||||||
|
|
||||||
#ifndef Cdrskin_extra_leaN
|
#ifndef Cdrskin_extra_leaN
|
||||||
@ -2807,6 +2826,9 @@ dev_too_long:;
|
|||||||
/* A60927 : note to myself : no "ret= 1;" here. It breaks --help , -version */
|
/* A60927 : note to myself : no "ret= 1;" here. It breaks --help , -version */
|
||||||
|
|
||||||
ex:;
|
ex:;
|
||||||
|
/* Eventually replace current stdout by dup(1) from start of program */
|
||||||
|
if(strcmp(o->device_adr,"stdio:/dev/fd/1")==0 && o->result_fd >= 0)
|
||||||
|
sprintf(o->device_adr,"stdio:/dev/fd/%d",o->result_fd);
|
||||||
|
|
||||||
#ifndef Cdrskin_extra_leaN
|
#ifndef Cdrskin_extra_leaN
|
||||||
if(ret<=0 || !(flag&1))
|
if(ret<=0 || !(flag&1))
|
||||||
@ -2905,7 +2927,6 @@ struct CdrskiN {
|
|||||||
int do_checkdrive;
|
int do_checkdrive;
|
||||||
|
|
||||||
int do_msinfo;
|
int do_msinfo;
|
||||||
int msinfo_fd;
|
|
||||||
char msifile[Cdrskin_strleN];
|
char msifile[Cdrskin_strleN];
|
||||||
|
|
||||||
int do_atip;
|
int do_atip;
|
||||||
@ -3076,7 +3097,6 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
|
|||||||
o->do_load= 0;
|
o->do_load= 0;
|
||||||
o->do_checkdrive= 0;
|
o->do_checkdrive= 0;
|
||||||
o->do_msinfo= 0;
|
o->do_msinfo= 0;
|
||||||
o->msinfo_fd= -1;
|
|
||||||
o->msifile[0]= 0;
|
o->msifile[0]= 0;
|
||||||
o->do_atip= 0;
|
o->do_atip= 0;
|
||||||
o->do_blank= 0;
|
o->do_blank= 0;
|
||||||
@ -3183,15 +3203,6 @@ int Cdrskin_destroy(struct CdrskiN **o, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Set the eventual output fd for the result of Cdrskin_msinfo()
|
|
||||||
*/
|
|
||||||
int Cdrskin_set_msinfo_fd(struct CdrskiN *skin, int result_fd, int flag)
|
|
||||||
{
|
|
||||||
skin->msinfo_fd= result_fd;
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Return the addresses of the drive. device_adr is the libburn persistent
|
/** Return the addresses of the drive. device_adr is the libburn persistent
|
||||||
address of the drive, raw_adr is the address as given by the user.
|
address of the drive, raw_adr is the address as given by the user.
|
||||||
*/
|
*/
|
||||||
@ -4266,6 +4277,10 @@ int Cdrskin_checkdrive(struct CdrskiN *skin, char *profile_name, int flag)
|
|||||||
if(ret==0)
|
if(ret==0)
|
||||||
printf("%s\n","Emulated (null-drive)");
|
printf("%s\n","Emulated (null-drive)");
|
||||||
else if(ret==2)
|
else if(ret==2)
|
||||||
|
printf("%s\n","Emulated (stdio-drive, 2k random read-write)");
|
||||||
|
else if(ret==3)
|
||||||
|
printf("%s\n","Emulated (stdio-drive, sequential write-only)");
|
||||||
|
else if(ret!=1)
|
||||||
printf("%s\n","Emulated (stdio-drive)");
|
printf("%s\n","Emulated (stdio-drive)");
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -6085,8 +6100,8 @@ burn_failed:;
|
|||||||
|
|
||||||
free_space= burn_disc_available_space(drive,o);
|
free_space= burn_disc_available_space(drive,o);
|
||||||
sprintf(msg,"%d\n",(int) (free_space/(off_t) 2048));
|
sprintf(msg,"%d\n",(int) (free_space/(off_t) 2048));
|
||||||
if(skin->msinfo_fd>=0) {
|
if(skin->preskin->result_fd>=0) {
|
||||||
write(skin->msinfo_fd,msg,strlen(msg));
|
write(skin->preskin->result_fd,msg,strlen(msg));
|
||||||
} else
|
} else
|
||||||
printf("%s",msg);
|
printf("%s",msg);
|
||||||
}
|
}
|
||||||
@ -6417,9 +6432,9 @@ obtain_nwa:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
put_out:;
|
put_out:;
|
||||||
if(skin->msinfo_fd>=0) {
|
if(skin->preskin->result_fd>=0) {
|
||||||
sprintf(msg,"%d,%d\n",lba,nwa);
|
sprintf(msg,"%d,%d\n",lba,nwa);
|
||||||
write(skin->msinfo_fd,msg,strlen(msg));
|
write(skin->preskin->result_fd,msg,strlen(msg));
|
||||||
} else
|
} else
|
||||||
printf("%d,%d\n",lba,nwa);
|
printf("%d,%d\n",lba,nwa);
|
||||||
|
|
||||||
@ -7693,7 +7708,11 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
/* For -msinfo: Redirect normal stdout to stderr */
|
/* For -msinfo: Redirect normal stdout to stderr */
|
||||||
for(i=1; i<argc; i++)
|
for(i=1; i<argc; i++)
|
||||||
if(strcmp(argv[i],"-msinfo")==0 || strcmp(argv[i],"--tell_media_space")==0)
|
if(strcmp(argv[i],"-msinfo")==0 ||
|
||||||
|
strcmp(argv[i],"--tell_media_space")==0 ||
|
||||||
|
strcmp(argv[i],"dev=stdio:/dev/fd/1")==0 ||
|
||||||
|
strcmp(argv[i],"-dev=stdio:/dev/fd/1")==0
|
||||||
|
)
|
||||||
break;
|
break;
|
||||||
if(i<argc) {
|
if(i<argc) {
|
||||||
result_fd= dup(1);
|
result_fd= dup(1);
|
||||||
@ -7710,6 +7729,7 @@ int main(int argc, char **argv)
|
|||||||
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;}
|
||||||
}
|
}
|
||||||
|
Cdrpreskin_set_result_fd(preskin,result_fd,0);
|
||||||
|
|
||||||
/* <<< A60925: i would prefer to do this later, after it is clear that no
|
/* <<< 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
|
-version or -help cause idle end. But address conversion and its debug
|
||||||
@ -7740,7 +7760,6 @@ int main(int argc, char **argv)
|
|||||||
"cdrskin: HINT : Busy drives are invisible. (Busy = open O_EXCL)\n");
|
"cdrskin: HINT : Busy drives are invisible. (Busy = open O_EXCL)\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Cdrskin_set_msinfo_fd(skin,result_fd,0);
|
|
||||||
|
|
||||||
ret= Cdrskin_setup(skin,argc,argv,0);
|
ret= Cdrskin_setup(skin,argc,argv,0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2007.09.24.135440"
|
#define Cdrskin_timestamP "2007.09.24.135845"
|
||||||
|
Loading…
Reference in New Issue
Block a user