[Debburn-changes] r576 - cdrkit/trunk/wodim
Eduard Bloch
blade at alioth.debian.org
Thu Dec 7 21:27:44 CET 2006
Author: blade
Date: 2006-12-07 21:27:44 +0100 (Thu, 07 Dec 2006)
New Revision: 576
Modified:
cdrkit/trunk/wodim/scsi_scan.c
cdrkit/trunk/wodim/wodim.c
Log:
New option: --devices, displays native device names
Modified: cdrkit/trunk/wodim/scsi_scan.c
===================================================================
--- cdrkit/trunk/wodim/scsi_scan.c 2006-12-07 14:37:26 UTC (rev 575)
+++ cdrkit/trunk/wodim/scsi_scan.c 2006-12-07 20:27:44 UTC (rev 576)
@@ -53,22 +53,95 @@
#include "scsi_scan.h"
#include "wodim.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+
static void print_product(FILE *f, struct scsi_inquiry *ip);
int select_target(SCSI *usalp, FILE *f);
static int select_unit(SCSI *usalp, FILE *f);
-static void
-print_product(FILE *f, struct scsi_inquiry *ip)
-{
+static void print_product(FILE *f, struct scsi_inquiry *ip) {
fprintf(f, "'%.8s' ", ip->vendor_info);
fprintf(f, "'%.16s' ", ip->prod_ident);
fprintf(f, "'%.4s' ", ip->prod_revision);
+ fprintf(stderr, "wtf, ganze vendor_info: %s\n", ip->vendor_info);
if (ip->add_len < 31) {
fprintf(f, "NON CCS ");
}
usal_fprintdev(f, ip);
}
+#define MAXDEVCOUNT (256+26+26)
+int scan_devices() {
+ struct stat statbuf;
+ char *lines[MAXDEVCOUNT];
+ char buf[256], devname[256], perms[8];
+ SCSI *usalp;
+ int i, ndevs=0;
+ BOOL have_tgt;
+
+#ifdef linux
+ for(i=0;i<MAXDEVCOUNT;i++) {
+ if(i<26)
+ snprintf(devname, sizeof (devname), "/dev/hd%c", 'a'+i);
+ else if(i<(256+26))
+ snprintf(devname, sizeof (devname), "/dev/sr%d", i-26);
+ else if(i<(256+26+26))
+ snprintf(devname, sizeof (devname), "/dev/sg%c", 'a'+i-26-256);
+ else
+ break;
+
+ if(stat(devname, &statbuf))
+ continue;
+
+ usalp = usal_open(devname, buf, sizeof (buf), 0, 0);
+ if(!usalp) continue;
+
+ usalp->silent++;
+ have_tgt = unit_ready(usalp) || usalp->scmd->error != SCG_FATAL;
+
+ strcpy(perms,"------");
+ if(statbuf.st_mode&S_IRUSR) perms[0]= 'r';
+ if(statbuf.st_mode&S_IWUSR) perms[1]= 'w';
+ if(statbuf.st_mode&S_IRGRP) perms[2]= 'r';
+ if(statbuf.st_mode&S_IWGRP) perms[3]= 'w';
+ if(statbuf.st_mode&S_IROTH) perms[4]= 'r';
+ if(statbuf.st_mode&S_IWOTH) perms[5]= 'w';
+
+ if(have_tgt) {
+ char *p;
+
+ getdev(usalp, FALSE);
+ for(p=usalp->inq->vendor_info + 7 ; p >= usalp->inq->vendor_info; p--) {
+ if(isspace(*p))
+ *p='\0';
+ else
+ break;
+ }
+ for(p=usalp->inq->prod_ident + 15 ; p >= usalp->inq->prod_ident; p--) {
+ if(isspace(*p))
+ *p='\0';
+ else
+ break;
+ }
+ snprintf(buf, sizeof(buf), "%d dev='%s' %s : '%.8s' '%.16s'\n", ndevs, devname, perms, usalp->inq->vendor_info, usalp->inq->prod_ident);
+ lines[ndevs++]=strdup(buf);
+ usal_close(usalp);
+ }
+ }
+ fprintf(stdout, "wodim: Overview of accessible drives (%d found) :\n"
+ "----------------------------------------------------------------------\n",
+ ndevs);
+ for(i=0;i<ndevs;i++)
+ fprintf(stdout, "%s", lines[i]);
+ fprintf(stdout, "----------------------------------------------------------------------\n");
+
+#endif
+ return 0;
+}
+
int select_target(SCSI *usalp, FILE *f) {
int initiator;
#ifdef FMT
Modified: cdrkit/trunk/wodim/wodim.c
===================================================================
--- cdrkit/trunk/wodim/wodim.c 2006-12-07 14:37:26 UTC (rev 575)
+++ cdrkit/trunk/wodim/wodim.c 2006-12-07 20:27:44 UTC (rev 576)
@@ -273,6 +273,9 @@
kill_faio();
}
+/* shared variables */
+int scandevs = 0;
+
int main(int argc, char *argv[])
{
char *dev = NULL;
@@ -397,6 +400,9 @@
exit(0);
}
+ if (scandevs)
+ return (scan_devices(usalp, stdout, stderr));
+
usalp = usal_open(dev, errstr, sizeof (errstr),
debug, lverbose);
if(!usalp && dev) {
@@ -408,15 +414,17 @@
usalp = usal_open(dalt, errstr, sizeof (errstr),
debug, lverbose);
}
+
if(!usalp)
{
errmsg("\nCannot open SCSI driver!\n"
- "For possible targets try 'wodim -scanbus'.\n"
+ "For possible targets try 'wodim --devices' or 'wodim -scanbus'.\n"
"For possible transport specifiers try 'wodim dev=help'.\n"
"For IDE/ATAPI devices configuration, see the file README.ATAPI.setup from\n"
"the wodim documentation.\n");
exit(EX_BAD);
}
+
#ifdef HAVE_PRIV_SET
#ifdef PRIV_DEBUG
fprintf(stderr, "file_dac_read: %d\n", priv_ineffect(PRIV_FILE_DAC_READ));
@@ -3055,7 +3063,7 @@
}
char *opts =
-"help,version,checkdrive,prcap,inq,scanbus,reset,abort,overburn,ignsize,useinfo,dev*,timeout#,driver*,driveropts*,setdropts,tsize&,padsize&,pregap&,defpregap&,speed#,load,lock,eject,dummy,msinfo,toc,atip,multi,fix,nofix,waiti,immed,debug#,d+,kdebug#,kd#,verbose+,v+,Verbose+,V+,x+,xd#,silent,s,audio,data,mode2,xa,xa1,xa2,xamix,cdi,isosize,nopreemp,preemp,nocopy,copy,nopad,pad,swab,fs&,ts&,blank&,format,formattype&,pktsize#,packet,noclose,force,tao,dao,sao,raw,raw96r,raw96p,raw16,clone,scms,isrc*,mcn*,index*,cuefile*,textfile*,text,shorttrack,noshorttrack,gracetime#,minbuf#";
+"help,version,checkdrive,prcap,inq,devices,scanbus,reset,abort,overburn,ignsize,useinfo,dev*,timeout#,driver*,driveropts*,setdropts,tsize&,padsize&,pregap&,defpregap&,speed#,load,lock,eject,dummy,msinfo,toc,atip,multi,fix,nofix,waiti,immed,debug#,d+,kdebug#,kd#,verbose+,v+,Verbose+,V+,x+,xd#,silent,s,audio,data,mode2,xa,xa1,xa2,xamix,cdi,isosize,nopreemp,preemp,nocopy,copy,nopad,pad,swab,fs&,ts&,blank&,format,formattype&,pktsize#,packet,noclose,force,tao,dao,sao,raw,raw96r,raw96p,raw16,clone,scms,isrc*,mcn*,index*,cuefile*,textfile*,text,shorttrack,noshorttrack,gracetime#,minbuf#";
/*
* Defines used to find whether a write mode has been specified.
@@ -3173,7 +3181,7 @@
*/
if ((ga_ret = getargs(&cac, &cav, opts,
&help, &version, &checkdrive, &prcap,
- &inq, &scanbus, &reset, &doabort, &overburn, &ignsize,
+ &inq, &scandevs, &scanbus, &reset, &doabort, &overburn, &ignsize,
&useinfo,
devp, timeoutp, &driver, &driveropts, &setdropts,
getllnum, &tracksize,
@@ -3220,7 +3228,7 @@
*flagsp |= F_PRCAP;
if (inq)
*flagsp |= F_INQUIRY;
- if (scanbus)
+ if (scanbus || scandevs) /* scandevs behaves similarly WRT in the legacy code, just the scan operation is different */
*flagsp |= F_SCANBUS;
if (reset)
*flagsp |= F_RESET;
@@ -3733,7 +3741,7 @@
if (tracks != 0) {
fprintf(stderr,
"No tracks allowed with -load, -lock, -setdropts, -msinfo, -toc, -atip, -fix,\n"
- "-version, -checkdrive, -prcap, -inq, -scanbus, -reset and -abort options.\n" );
+ "-version, -checkdrive, -prcap, -inq, -scanbus, -devices, -reset and -abort options.\n" );
exit(EXIT_FAILURE);
}
return ispacket;
More information about the Debburn-changes
mailing list