Using libburn call burn_lookup_device_link()

master
Thomas Schmitt 11 years ago
parent 73f9c94397
commit c2fdd090cc
  1. 87
      xorriso/drive_mgt.c
  2. 2
      xorriso/xorriso_timestamp.h

@ -1119,87 +1119,6 @@ ex:;
}
/* @param link_adr must point to NULL or to allocated memory that may be freed
*/
int Xorriso_lookup_device_link(struct XorrisO *xorriso, char *dev_adr,
char **link_adr, int flag)
{
struct DirseQ *dirseq= NULL;
struct stat link_stbuf;
char *adr= NULL, *namept, *sys_adr= NULL;
int ret, name_rank, found_rank= 0x7fffffff;
static char ranks[][8] = {"dvdrw", "cdrw", "dvd", "cdrom", "cd", ""};
adr= calloc(SfileadrL + 5, 1);
sys_adr= calloc(BURN_DRIVE_ADR_LEN, 1);
if(adr == NULL || sys_adr == NULL) {
Xorriso_no_malloc_memory(xorriso, NULL, 0);
{ret= -1; goto ex;}
}
namept= adr + 5;
/* Search for candidates in /dev */
ret= Dirseq_new(&dirseq, "/dev", 1);
if(ret<0) {
sprintf(xorriso->info_text, "Cannot obtain disk directory iterator");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
{ret= -1; goto ex;}
}
strcpy(adr, "/dev/");
while(1) {
ret= Dirseq_next_adr(dirseq, namept, 0);
if(ret < 0)
goto ex;
if(ret == 0)
break;
if(lstat(adr, &link_stbuf) == -1)
{ret= 0; goto ex;}
if((link_stbuf.st_mode & S_IFMT) != S_IFLNK)
continue;
/* Determine rank and omit uninteresting ones */
for(name_rank= 0; ranks[name_rank][0]; name_rank++)
if(strncmp(namept, ranks[name_rank], strlen(ranks[name_rank])) == 0)
break;
if(ranks[name_rank][0] == 0 ||
name_rank >= found_rank) /* we look for lowest rank */
continue;
/* Does name point to the same device as dev_adr ? */
ret= burn_drive_convert_fs_adr(adr, sys_adr);
if(ret < 0)
goto ex;
if(ret == 0)
continue;
if(strcmp(dev_adr, sys_adr) == 0) {
if(*link_adr != NULL)
free(*link_adr);
*link_adr= strdup(adr);
if(*link_adr == NULL) {
Xorriso_no_malloc_memory(xorriso, NULL, 0);
{ret= -1; goto ex;}
}
found_rank= name_rank;
if(found_rank == 0)
break;
}
}
ret= 2;
if(found_rank < 0x7fffffff)
ret= 1;
ex:;
Xorriso_process_msg_queues(xorriso,0);
if(dirseq != NULL)
Dirseq_destroy(&dirseq, 0);
if(adr != NULL)
free(adr);
if(sys_adr != NULL)
free(sys_adr);
return(ret);
}
/* @param flag bit0= try to find 'meaningful' links for enumerated devices
*/
int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
@ -1212,6 +1131,7 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
struct stat stbuf;
Xorriso_alloc_meM(adr, char, BURN_DRIVE_ADR_LEN);
Xorriso_alloc_meM(link_adr, char, BURN_DRIVE_ADR_LEN);
sprintf(xorriso->info_text, "Beginning to scan for devices ...\n");
Xorriso_info(xorriso,0);
@ -1243,7 +1163,7 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
Xorriso_process_msg_queues(xorriso,0);
adrpt= adr;
if(flag & 1) {
ret= Xorriso_lookup_device_link(xorriso, adr, &link_adr, 0);
ret= burn_lookup_device_link(adr, link_adr, "/dev", NULL, 0, 0);
if(ret < 0)
goto ex;
if(ret == 1)
@ -1269,7 +1189,7 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
}
adrpt= adr;
if(flag & 1) {
ret= Xorriso_lookup_device_link(xorriso, adr, &link_adr, 0);
ret= burn_lookup_device_link(adr, link_adr, "/dev", NULL, 0, 0);
if(ret < 0)
goto ex;
if(ret == 1)
@ -1292,6 +1212,7 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
ex:;
Xorriso_process_msg_queues(xorriso,0);
Xorriso_free_meM(adr);
Xorriso_free_meM(link_adr);
return(ret);
}

@ -1 +1 @@
#define Xorriso_timestamP "2011.07.28.192110"
#define Xorriso_timestamP "2011.07.28.195103"

Loading…
Cancel
Save