Enabled unused SCSI part of struct burn_drive. Switched persistent address to burn_drive.devname

This commit is contained in:
Thomas Schmitt 2006-09-23 11:36:39 +00:00
parent faaefaa4b8
commit 8e73ee88e9
2 changed files with 49 additions and 11 deletions

View File

@ -656,15 +656,27 @@ int burn_drive_scan_and_grab(struct burn_drive_info *drive_infos[], char* adr,
return 1;
}
/* ts A60823 */
/* ts A60923 */
/** Inquire the persistent address of the given drive. */
int burn_drive_raw_get_adr(struct burn_drive *d, char adr[])
{
assert(strlen(d->devname) < BURN_DRIVE_ADR_LEN);
strcpy(adr,d->devname);
return 1;
}
/* ts A60823 - A60923 */
/** Inquire the persistent address of the given drive. */
int burn_drive_get_adr(struct burn_drive_info *drive_info, char adr[])
{
assert(strlen(drive_info->location) < BURN_DRIVE_ADR_LEN);
strcpy(adr,drive_info->location);
return 1;
int ret;
assert(drive_info->drive!=NULL);
ret = burn_drive_raw_get_adr(drive_info->drive, adr);
return ret;
}
/* ts A60922 ticket 33 */
/** Evaluate wether the given address would be enumerated by libburn */
int burn_drive_is_enumerable_adr(char *adr)
@ -849,7 +861,24 @@ fprintf(stderr,"libburn experimental: Nothing found for %s \n",path);
int burn_drive_obtain_scsi_adr(char *path, int *host_no, int *channel_no,
int *target_no, int *lun_no)
{
int ret;
int ret, i;
char adr[BURN_DRIVE_ADR_LEN];
/* open drives cannot be inquired by sg_obtain_scsi_adr() */
for (i = 0; i < drivetop + 1; i++) {
if (drive_array[i].global_index < 0)
continue;
ret = burn_drive_raw_get_adr(&(drive_array[i]),adr);
if (ret <= 0)
continue;
if (strcmp(adr, path) == 0) {
*host_no = drive_array[i].host;
*channel_no = drive_array[i].channel;
*target_no = drive_array[i].id;
*lun_no = drive_array[i].lun;
return 1;
}
}
ret = sg_obtain_scsi_adr(path, host_no, channel_no, target_no, lun_no);
return ret;

View File

@ -23,7 +23,8 @@
#include "toc.h"
#include "util.h"
static void enumerate_common(char *fname);
static void enumerate_common(char *fname, int host_no, int channel_no,
int target_no, int lun_no);
/* ts A51221 */
int burn_drive_is_banned(char *device_address);
@ -177,7 +178,7 @@ void ata_enumerate(void)
return;
}
close(fd);
enumerate_common(fname);
enumerate_common(fname, -1, -1, -1, -1);
}
}
@ -248,15 +249,23 @@ void sg_enumerate(void)
fprintf(stderr,"libburn experimental: SCSI triple: %d,%d,%d\n",sid.host_no,sid.scsi_id,sid.lun);
*/
enumerate_common(fname);
enumerate_common(fname, sid.host_no, sid.channel,
sid.scsi_id, sid.lun);
}
}
static void enumerate_common(char *fname)
/* ts A60923 : introduced new SCSI parameters */
static void enumerate_common(char *fname, int host_no, int channel_no,
int target_no, int lun_no)
{
struct burn_drive *t;
struct burn_drive out;
/* ts A60923 */
out.host = host_no;
out.id = target_no;
out.channel = channel_no;
out.lun = lun_no;
out.devname = burn_strdup(fname);
out.fd = -1337;
@ -321,7 +330,7 @@ static void enumerate_common(char *fname)
if refcount is not one, drive is open somewhere else.
ts A60813: this test is too late. O_EXCL is the stronger solution.
After all the test was diabled already in icculus.org/burn CVS.
After all the test was disabled already in icculus.org/burn CVS.
*/
int sg_grab(struct burn_drive *d)
{