Implemented option -devices
This commit is contained in:
@ -195,8 +195,11 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
|
||||
|
||||
burn_drive_info_free(dinfo);
|
||||
xorriso->in_drive_handle= NULL;
|
||||
if(in_is_out_too)
|
||||
xorriso->indev[0]= 0;
|
||||
if(in_is_out_too) {
|
||||
xorriso->out_drive_handle= NULL;
|
||||
xorriso->outdev[0]= 0;
|
||||
}
|
||||
}
|
||||
if((flag&2) && xorriso->out_drive_handle!=NULL) {
|
||||
dinfo= (struct burn_drive_info *) xorriso->out_drive_handle;
|
||||
@ -635,3 +638,60 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
char adr[BURN_DRIVE_ADR_LEN];
|
||||
int i;
|
||||
struct burn_drive_info *drive_list= NULL;
|
||||
unsigned int drive_count;
|
||||
char *respt, perms[8];
|
||||
struct stat stbuf;
|
||||
|
||||
sprintf(xorriso->info_text, "Beginning to scan for devices ...\n");
|
||||
Xorriso_info(xorriso,0);
|
||||
|
||||
burn_drive_clear_whitelist();
|
||||
while(!burn_drive_scan(&drive_list, &drive_count)) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
usleep(100000);
|
||||
}
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(drive_count <= 0) {
|
||||
|
||||
/* >>> was a drive_list created at all ? */
|
||||
/* >>> must it be freed ? */
|
||||
|
||||
sprintf(xorriso->info_text, "No drives found");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
sprintf(xorriso->info_text, "Full drive scan done\n");
|
||||
Xorriso_info(xorriso,0);
|
||||
|
||||
respt= xorriso->result_line;
|
||||
for(i= 0; i < drive_count; i++) {
|
||||
if(burn_drive_get_adr(&(drive_list[i]), adr)<=0)
|
||||
strcpy(adr, "-get_adr_failed-");
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(stat(adr,&stbuf)==-1) {
|
||||
sprintf(perms,"errno=%d",errno);
|
||||
} else {
|
||||
strcpy(perms,"------");
|
||||
if(stbuf.st_mode&S_IRUSR) perms[0]= 'r';
|
||||
if(stbuf.st_mode&S_IWUSR) perms[1]= 'w';
|
||||
if(stbuf.st_mode&S_IRGRP) perms[2]= 'r';
|
||||
if(stbuf.st_mode&S_IWGRP) perms[3]= 'w';
|
||||
if(stbuf.st_mode&S_IROTH) perms[4]= 'r';
|
||||
if(stbuf.st_mode&S_IWOTH) perms[5]= 'w';
|
||||
}
|
||||
sprintf(respt, "%d -dev '%s' %s : '%-8.8s' '%s' \n",
|
||||
i, adr, perms, drive_list[i].vendor, drive_list[i].product);
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
burn_drive_info_free(drive_list);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user