Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 257047 | Differences between
and this patch

Collapse All | Expand All

(-)cdparanoia-III-10.2.orig/interface/cdda_interface.h (-1 / +1 lines)
Lines 84-90 typedef struct cdrom_drive{ Link Here
84
  int is_atapi;
84
  int is_atapi;
85
  int is_mmc;
85
  int is_mmc;
86
86
87
  cdda_private_data_t *private;
87
  cdda_private_data_t *private_data;
88
  void         *reserved;
88
  void         *reserved;
89
  unsigned char inqbytes[4];
89
  unsigned char inqbytes[4];
90
90
(-)cdparanoia-III-10.2.orig/interface/cooked_interface.c (-4 / +4 lines)
Lines 13-25 Link Here
13
static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
13
static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
14
  struct timespec tv1;
14
  struct timespec tv1;
15
  struct timespec tv2;
15
  struct timespec tv2;
16
  int ret1=clock_gettime(d->private->clock,&tv1);
16
  int ret1=clock_gettime(d->private_data->clock,&tv1);
17
  int ret2=ioctl(fd, command,arg);
17
  int ret2=ioctl(fd, command,arg);
18
  int ret3=clock_gettime(d->private->clock,&tv2);
18
  int ret3=clock_gettime(d->private_data->clock,&tv2);
19
  if(ret1<0 || ret3<0){
19
  if(ret1<0 || ret3<0){
20
    d->private->last_milliseconds=-1;
20
    d->private_data->last_milliseconds=-1;
21
  }else{
21
  }else{
22
    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
22
    d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
23
  }
23
  }
24
  return ret2;
24
  return ret2;
25
}
25
}
(-)cdparanoia-III-10.2.orig/interface/interface.c (-4 / +4 lines)
Lines 39-47 int cdda_close(cdrom_drive *d){ Link Here
39
    if(d->drive_model)free(d->drive_model);
39
    if(d->drive_model)free(d->drive_model);
40
    if(d->cdda_fd!=-1)close(d->cdda_fd);
40
    if(d->cdda_fd!=-1)close(d->cdda_fd);
41
    if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd);
41
    if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd);
42
    if(d->private){
42
    if(d->private_data){
43
      if(d->private->sg_hd)free(d->private->sg_hd);
43
      if(d->private_data->sg_hd)free(d->private_data->sg_hd);
44
      free(d->private);
44
      free(d->private_data);
45
    }
45
    }
46
46
47
    free(d);
47
    free(d);
Lines 127-133 long cdda_read_timed(cdrom_drive *d, voi Link Here
127
	}
127
	}
128
      }	
128
      }	
129
    }
129
    }
130
    if(ms)*ms=d->private->last_milliseconds;
130
    if(ms)*ms=d->private_data->last_milliseconds;
131
    return(sectors);
131
    return(sectors);
132
  }
132
  }
133
  
133
  
(-)cdparanoia-III-10.2.orig/interface/scan_devices.c (-11 / +11 lines)
Lines 264-274 cdrom_drive *cdda_identify_cooked(const Link Here
264
  d->interface=COOKED_IOCTL;
264
  d->interface=COOKED_IOCTL;
265
  d->bigendianp=-1; /* We don't know yet... */
265
  d->bigendianp=-1; /* We don't know yet... */
266
  d->nsectors=-1;
266
  d->nsectors=-1;
267
  d->private=calloc(1,sizeof(*d->private));
267
  d->private_data=calloc(1,sizeof(*d->private_data));
268
  {
268
  {
269
    /* goddamnit */
269
    /* goddamnit */
270
    struct timespec tv;
270
    struct timespec tv;
271
    d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
271
    d->private_data->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
272
  }
272
  }
273
  idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description);
273
  idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description);
274
  return(d);
274
  return(d);
Lines 674-688 cdrom_drive *cdda_identify_scsi(const ch Link Here
674
  d->bigendianp=-1; /* We don't know yet... */
674
  d->bigendianp=-1; /* We don't know yet... */
675
  d->nsectors=-1;
675
  d->nsectors=-1;
676
  d->messagedest = messagedest;
676
  d->messagedest = messagedest;
677
  d->private=calloc(1,sizeof(*d->private));
677
  d->private_data=calloc(1,sizeof(*d->private_data));
678
  {
678
  {
679
    /* goddamnit */
679
    /* goddamnit */
680
    struct timespec tv;
680
    struct timespec tv;
681
    d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
681
    d->private_data->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
682
  }
682
  }
683
  if(use_sgio){
683
  if(use_sgio){
684
    d->interface=SGIO_SCSI;
684
    d->interface=SGIO_SCSI;
685
    d->private->sg_buffer=(unsigned char *)(d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
685
    d->private_data->sg_buffer=(unsigned char *)(d->private_data->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
686
    g_fd=d->cdda_fd=dup(d->ioctl_fd);
686
    g_fd=d->cdda_fd=dup(d->ioctl_fd);
687
  }else{
687
  }else{
688
    version=verify_SG_version(d,messagedest,messages);
688
    version=verify_SG_version(d,messagedest,messages);
Lines 696-703 cdrom_drive *cdda_identify_scsi(const ch Link Here
696
    }
696
    }
697
697
698
    /* malloc our big buffer for scsi commands */
698
    /* malloc our big buffer for scsi commands */
699
    d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
699
    d->private_data->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
700
    d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
700
    d->private_data->sg_buffer=((unsigned char *)d->private_data->sg_hd)+SG_OFF;
701
  }
701
  }
702
702
703
  {
703
  {
Lines 772-780 cdda_identify_scsi_fail: Link Here
772
  if(i_fd!=-1)close(i_fd);
772
  if(i_fd!=-1)close(i_fd);
773
  if(g_fd!=-1)close(g_fd);
773
  if(g_fd!=-1)close(g_fd);
774
  if(d){
774
  if(d){
775
    if(d->private){
775
    if(d->private_data){
776
      if(d->private->sg_hd)free(d->private->sg_hd);
776
      if(d->private_data->sg_hd)free(d->private_data->sg_hd);
777
      free(d->private);
777
      free(d->private_data);
778
    }
778
    }
779
    free(d);
779
    free(d);
780
  }
780
  }
Lines 821-827 cdrom_drive *cdda_identify_test(const ch Link Here
821
  d->interface=TEST_INTERFACE;
821
  d->interface=TEST_INTERFACE;
822
  d->bigendianp=-1; /* We don't know yet... */
822
  d->bigendianp=-1; /* We don't know yet... */
823
  d->nsectors=-1;
823
  d->nsectors=-1;
824
  d->private=calloc(1,sizeof(*d->private));
824
  d->private_data=calloc(1,sizeof(*d->private_data));
825
  d->drive_model=copystring("File based test interface");
825
  d->drive_model=copystring("File based test interface");
826
  idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model);
826
  idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model);
827
  
827
  
(-)cdparanoia-III-10.2.orig/interface/scsi_interface.c (-64 / +64 lines)
Lines 15-27 Link Here
15
static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
15
static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
16
  struct timespec tv1;
16
  struct timespec tv1;
17
  struct timespec tv2;
17
  struct timespec tv2;
18
  int ret1=clock_gettime(d->private->clock,&tv1);
18
  int ret1=clock_gettime(d->private_data->clock,&tv1);
19
  int ret2=ioctl(fd, command,arg);
19
  int ret2=ioctl(fd, command,arg);
20
  int ret3=clock_gettime(d->private->clock,&tv2);
20
  int ret3=clock_gettime(d->private_data->clock,&tv2);
21
  if(ret1<0 || ret3<0){
21
  if(ret1<0 || ret3<0){
22
    d->private->last_milliseconds=-1;
22
    d->private_data->last_milliseconds=-1;
23
  }else{
23
  }else{
24
    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
24
    d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
25
  }
25
  }
26
  return ret2;
26
  return ret2;
27
}
27
}
Lines 96-102 static void tweak_SG_buffer(cdrom_drive Link Here
96
static void clear_garbage(cdrom_drive *d){
96
static void clear_garbage(cdrom_drive *d){
97
  fd_set fdset;
97
  fd_set fdset;
98
  struct timeval tv;
98
  struct timeval tv;
99
  struct sg_header *sg_hd=d->private->sg_hd;
99
  struct sg_header *sg_hd=d->private_data->sg_hd;
100
  int flag=0;
100
  int flag=0;
101
101
102
  /* clear out any possibly preexisting garbage */
102
  /* clear out any possibly preexisting garbage */
Lines 185-191 static int sg2_handle_scsi_cmd(cdrom_dri Link Here
185
  struct timespec tv2;
185
  struct timespec tv2;
186
  int tret1,tret2;
186
  int tret1,tret2;
187
  int status = 0;
187
  int status = 0;
188
  struct sg_header *sg_hd=d->private->sg_hd;
188
  struct sg_header *sg_hd=d->private_data->sg_hd;
189
  long writebytes=SG_OFF+cmd_len+in_size;
189
  long writebytes=SG_OFF+cmd_len+in_size;
190
190
191
  /* generic scsi device services */
191
  /* generic scsi device services */
Lines 195-201 static int sg2_handle_scsi_cmd(cdrom_dri Link Here
195
195
196
  memset(sg_hd,0,sizeof(sg_hd)); 
196
  memset(sg_hd,0,sizeof(sg_hd)); 
197
  memset(sense_buffer,0,SG_MAX_SENSE); 
197
  memset(sense_buffer,0,SG_MAX_SENSE); 
198
  memcpy(d->private->sg_buffer,cmd,cmd_len+in_size);
198
  memcpy(d->private_data->sg_buffer,cmd,cmd_len+in_size);
199
  sg_hd->twelve_byte = cmd_len == 12;
199
  sg_hd->twelve_byte = cmd_len == 12;
200
  sg_hd->result = 0;
200
  sg_hd->result = 0;
201
  sg_hd->reply_len = SG_OFF + out_size;
201
  sg_hd->reply_len = SG_OFF + out_size;
Lines 209-215 static int sg2_handle_scsi_cmd(cdrom_dri Link Here
209
     tell if the command failed.  Scared yet? */
209
     tell if the command failed.  Scared yet? */
210
210
211
  if(bytecheck && out_size>in_size){
211
  if(bytecheck && out_size>in_size){
212
    memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); 
212
    memset(d->private_data->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); 
213
    /* the size does not remove cmd_len due to the way the kernel
213
    /* the size does not remove cmd_len due to the way the kernel
214
       driver copies buffers */
214
       driver copies buffers */
215
    writebytes+=(out_size-in_size);
215
    writebytes+=(out_size-in_size);
Lines 243-249 static int sg2_handle_scsi_cmd(cdrom_dri Link Here
243
  }
243
  }
244
244
245
  sigprocmask (SIG_BLOCK, &(d->sigset), NULL );
245
  sigprocmask (SIG_BLOCK, &(d->sigset), NULL );
246
  tret1=clock_gettime(d->private->clock,&tv1);  
246
  tret1=clock_gettime(d->private_data->clock,&tv1);  
247
  errno=0;
247
  errno=0;
248
  status = write(d->cdda_fd, sg_hd, writebytes );
248
  status = write(d->cdda_fd, sg_hd, writebytes );
249
249
Lines 289-295 static int sg2_handle_scsi_cmd(cdrom_dri Link Here
289
    }
289
    }
290
  }
290
  }
291
291
292
  tret2=clock_gettime(d->private->clock,&tv2);  
292
  tret2=clock_gettime(d->private_data->clock,&tv2);  
293
  errno=0;
293
  errno=0;
294
  status = read(d->cdda_fd, sg_hd, SG_OFF + out_size);
294
  status = read(d->cdda_fd, sg_hd, SG_OFF + out_size);
295
  sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL );
295
  sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL );
Lines 313-319 static int sg2_handle_scsi_cmd(cdrom_dri Link Here
313
  if(bytecheck && in_size+cmd_len<out_size){
313
  if(bytecheck && in_size+cmd_len<out_size){
314
    long i,flag=0;
314
    long i,flag=0;
315
    for(i=in_size;i<out_size;i++)
315
    for(i=in_size;i<out_size;i++)
316
      if(d->private->sg_buffer[i]!=bytefill){
316
      if(d->private_data->sg_buffer[i]!=bytefill){
317
	flag=1;
317
	flag=1;
318
	break;
318
	break;
319
      }
319
      }
Lines 326-334 static int sg2_handle_scsi_cmd(cdrom_dri Link Here
326
326
327
  errno=0;
327
  errno=0;
328
  if(tret1<0 || tret2<0){
328
  if(tret1<0 || tret2<0){
329
    d->private->last_milliseconds=-1;
329
    d->private_data->last_milliseconds=-1;
330
  }else{
330
  }else{
331
    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
331
    d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
332
  }
332
  }
333
  return(0);
333
  return(0);
334
}
334
}
Lines 347-353 static int sgio_handle_scsi_cmd(cdrom_dr Link Here
347
347
348
  memset(&hdr,0,sizeof(hdr));
348
  memset(&hdr,0,sizeof(hdr));
349
  memset(sense,0,sizeof(sense));
349
  memset(sense,0,sizeof(sense));
350
  memcpy(d->private->sg_buffer,cmd+cmd_len,in_size);
350
  memcpy(d->private_data->sg_buffer,cmd+cmd_len,in_size);
351
351
352
  hdr.cmdp = cmd;
352
  hdr.cmdp = cmd;
353
  hdr.cmd_len = cmd_len;
353
  hdr.cmd_len = cmd_len;
Lines 355-361 static int sgio_handle_scsi_cmd(cdrom_dr Link Here
355
  hdr.mx_sb_len = SG_MAX_SENSE;
355
  hdr.mx_sb_len = SG_MAX_SENSE;
356
  hdr.timeout = 50000;
356
  hdr.timeout = 50000;
357
  hdr.interface_id = 'S';
357
  hdr.interface_id = 'S';
358
  hdr.dxferp =  d->private->sg_buffer;
358
  hdr.dxferp =  d->private_data->sg_buffer;
359
  hdr.flags = SG_FLAG_DIRECT_IO;  /* direct IO if we can get it */
359
  hdr.flags = SG_FLAG_DIRECT_IO;  /* direct IO if we can get it */
360
360
361
  /* scary buffer fill hack */
361
  /* scary buffer fill hack */
Lines 400-406 static int sgio_handle_scsi_cmd(cdrom_dr Link Here
400
  if(bytecheck && in_size<out_size){
400
  if(bytecheck && in_size<out_size){
401
    long i,flag=0;
401
    long i,flag=0;
402
    for(i=in_size;i<out_size;i++)
402
    for(i=in_size;i<out_size;i++)
403
      if(d->private->sg_buffer[i]!=bytefill){
403
      if(d->private_data->sg_buffer[i]!=bytefill){
404
	flag=1;
404
	flag=1;
405
	break;
405
	break;
406
      }
406
      }
Lines 412-418 static int sgio_handle_scsi_cmd(cdrom_dr Link Here
412
  }
412
  }
413
413
414
  /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */
414
  /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */
415
  /* d->private->last_milliseconds = hdr.duration; */
415
  /* d->private_data->last_milliseconds = hdr.duration; */
416
416
417
  errno = 0;
417
  errno = 0;
418
  return 0;
418
  return 0;
Lines 445-453 static int test_unit_ready(cdrom_drive * Link Here
445
445
446
  handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense);
446
  handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense);
447
447
448
  key = d->private->sg_buffer[2] & 0xf;
448
  key = d->private_data->sg_buffer[2] & 0xf;
449
  ASC = d->private->sg_buffer[12];
449
  ASC = d->private_data->sg_buffer[12];
450
  ASCQ = d->private->sg_buffer[13];
450
  ASCQ = d->private_data->sg_buffer[13];
451
  
451
  
452
  if(key == 2 && ASC == 4 && ASCQ == 1) return 0;
452
  if(key == 2 && ASC == 4 && ASCQ == 1) return 0;
453
  return 1;
453
  return 1;
Lines 492-498 static int mode_sense_atapi(cdrom_drive Link Here
492
  if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1);
492
  if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1);
493
493
494
  {
494
  {
495
    unsigned char *b=d->private->sg_buffer;
495
    unsigned char *b=d->private_data->sg_buffer;
496
    if(b[0])return(1); /* Handles only up to 256 bytes */
496
    if(b[0])return(1); /* Handles only up to 256 bytes */
497
    if(b[6])return(1); /* Handles only up to 256 bytes */
497
    if(b[6])return(1); /* Handles only up to 256 bytes */
498
498
Lines 604-611 static int mode_select(cdrom_drive *d,in Link Here
604
static unsigned int get_orig_sectorsize(cdrom_drive *d){
604
static unsigned int get_orig_sectorsize(cdrom_drive *d){
605
  if(mode_sense(d,12,0x01))return(-1);
605
  if(mode_sense(d,12,0x01))return(-1);
606
606
607
  d->orgdens = d->private->sg_buffer[4];
607
  d->orgdens = d->private_data->sg_buffer[4];
608
  return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]);
608
  return(d->orgsize = ((int)(d->private_data->sg_buffer[10])<<8)+d->private_data->sg_buffer[11]);
609
}
609
}
610
610
611
/* switch CDROM scsi drives to given sector size  */
611
/* switch CDROM scsi drives to given sector size  */
Lines 664-671 static int scsi_read_toc (cdrom_drive *d Link Here
664
    return(-4);
664
    return(-4);
665
  }
665
  }
666
666
667
  first=d->private->sg_buffer[2];
667
  first=d->private_data->sg_buffer[2];
668
  last=d->private->sg_buffer[3];
668
  last=d->private_data->sg_buffer[3];
669
  tracks=last-first+1;
669
  tracks=last-first+1;
670
670
671
  if (last > MAXTRK || first > MAXTRK || last<0 || first<0) {
671
  if (last > MAXTRK || first > MAXTRK || last<0 || first<0) {
Lines 683-689 static int scsi_read_toc (cdrom_drive *d Link Here
683
      return(-5);
683
      return(-5);
684
    }
684
    }
685
    {
685
    {
686
      scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
686
      scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4);
687
687
688
      d->disc_toc[i-first].bFlags=toc->bFlags;
688
      d->disc_toc[i-first].bFlags=toc->bFlags;
689
      d->disc_toc[i-first].bTrack=i;
689
      d->disc_toc[i-first].bTrack=i;
Lines 704-710 static int scsi_read_toc (cdrom_drive *d Link Here
704
    return(-2);
704
    return(-2);
705
  }
705
  }
706
  {
706
  {
707
    scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
707
    scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4);
708
    
708
    
709
    d->disc_toc[i-first].bFlags=toc->bFlags;
709
    d->disc_toc[i-first].bFlags=toc->bFlags;
710
    d->disc_toc[i-first].bTrack=0xAA;
710
    d->disc_toc[i-first].bTrack=0xAA;
Lines 738-744 static int scsi_read_toc2 (cdrom_drive * Link Here
738
  }
738
  }
739
739
740
  /* copy to our structure and convert start sector */
740
  /* copy to our structure and convert start sector */
741
  tracks = d->private->sg_buffer[1];
741
  tracks = d->private_data->sg_buffer[1];
742
  if (tracks > MAXTRK) {
742
  if (tracks > MAXTRK) {
743
    cderror(d,"003: CDROM reporting illegal number of tracks\n");
743
    cderror(d,"003: CDROM reporting illegal number of tracks\n");
744
    return(-3);
744
    return(-3);
Lines 754-786 static int scsi_read_toc2 (cdrom_drive * Link Here
754
      return(-5);
754
      return(-5);
755
    }
755
    }
756
    
756
    
757
    d->disc_toc[i].bFlags = d->private->sg_buffer[10];
757
    d->disc_toc[i].bFlags = d->private_data->sg_buffer[10];
758
    d->disc_toc[i].bTrack = i + 1;
758
    d->disc_toc[i].bTrack = i + 1;
759
759
760
    d->disc_toc[i].dwStartSector= d->adjust_ssize * 
760
    d->disc_toc[i].dwStartSector= d->adjust_ssize * 
761
	(((signed char)(d->private->sg_buffer[2])<<24) | 
761
	(((signed char)(d->private_data->sg_buffer[2])<<24) | 
762
	 (d->private->sg_buffer[3]<<16)|
762
	 (d->private_data->sg_buffer[3]<<16)|
763
	 (d->private->sg_buffer[4]<<8)|
763
	 (d->private_data->sg_buffer[4]<<8)|
764
	 (d->private->sg_buffer[5]));
764
	 (d->private_data->sg_buffer[5]));
765
  }
765
  }
766
766
767
  d->disc_toc[i].bFlags = 0;
767
  d->disc_toc[i].bFlags = 0;
768
  d->disc_toc[i].bTrack = i + 1;
768
  d->disc_toc[i].bTrack = i + 1;
769
  memcpy (&foo, d->private->sg_buffer+2, 4);
769
  memcpy (&foo, d->private_data->sg_buffer+2, 4);
770
  memcpy (&bar, d->private->sg_buffer+6, 4);
770
  memcpy (&bar, d->private_data->sg_buffer+6, 4);
771
  d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) +
771
  d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) +
772
						    be32_to_cpu(bar));
772
						    be32_to_cpu(bar));
773
773
774
  d->disc_toc[i].dwStartSector= d->adjust_ssize * 
774
  d->disc_toc[i].dwStartSector= d->adjust_ssize * 
775
    ((((signed char)(d->private->sg_buffer[2])<<24) | 
775
    ((((signed char)(d->private_data->sg_buffer[2])<<24) | 
776
      (d->private->sg_buffer[3]<<16)|
776
      (d->private_data->sg_buffer[3]<<16)|
777
      (d->private->sg_buffer[4]<<8)|
777
      (d->private_data->sg_buffer[4]<<8)|
778
      (d->private->sg_buffer[5]))+
778
      (d->private_data->sg_buffer[5]))+
779
     
779
     
780
     ((((signed char)(d->private->sg_buffer[6])<<24) | 
780
     ((((signed char)(d->private_data->sg_buffer[6])<<24) | 
781
       (d->private->sg_buffer[7]<<16)|
781
       (d->private_data->sg_buffer[7]<<16)|
782
       (d->private->sg_buffer[8]<<8)|
782
       (d->private_data->sg_buffer[8]<<8)|
783
       (d->private->sg_buffer[9]))));
783
       (d->private_data->sg_buffer[9]))));
784
784
785
785
786
  d->cd_extra = FixupTOC(d,tracks+1);
786
  d->cd_extra = FixupTOC(d,tracks+1);
Lines 817-823 static int i_read_28 (cdrom_drive *d, vo Link Here
817
  cmd[8] = sectors;
817
  cmd[8] = sectors;
818
  if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
818
  if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
819
    return(ret);
819
    return(ret);
820
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
820
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
821
  return(0);
821
  return(0);
822
}
822
}
823
823
Lines 836-842 static int i_read_A8 (cdrom_drive *d, vo Link Here
836
  cmd[9] = sectors;
836
  cmd[9] = sectors;
837
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
837
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
838
    return(ret);
838
    return(ret);
839
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
839
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
840
  return(0);
840
  return(0);
841
}
841
}
842
842
Lines 854-860 static int i_read_D4_10 (cdrom_drive *d, Link Here
854
  cmd[8] = sectors;
854
  cmd[8] = sectors;
855
  if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
855
  if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
856
    return(ret);
856
    return(ret);
857
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
857
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
858
  return(0);
858
  return(0);
859
}
859
}
860
860
Lines 872-878 static int i_read_D4_12 (cdrom_drive *d, Link Here
872
  cmd[9] = sectors;
872
  cmd[9] = sectors;
873
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
873
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
874
    return(ret);
874
    return(ret);
875
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
875
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
876
  return(0);
876
  return(0);
877
}
877
}
878
878
Lines 890-896 static int i_read_D5 (cdrom_drive *d, vo Link Here
890
  cmd[8] = sectors;
890
  cmd[8] = sectors;
891
  if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
891
  if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
892
    return(ret);
892
    return(ret);
893
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
893
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
894
  return(0);
894
  return(0);
895
}
895
}
896
896
Lines 908-914 static int i_read_D8 (cdrom_drive *d, vo Link Here
908
  cmd[9] = sectors;
908
  cmd[9] = sectors;
909
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
909
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
910
    return(ret);
910
    return(ret);
911
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
911
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
912
  return(0);
912
  return(0);
913
}
913
}
914
914
Lines 922-928 static int i_read_mmc (cdrom_drive *d, v Link Here
922
  cmd[8] = sectors;
922
  cmd[8] = sectors;
923
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
923
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
924
    return(ret);
924
    return(ret);
925
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
925
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
926
  return(0);
926
  return(0);
927
}
927
}
928
928
Lines 936-942 static int i_read_mmcB (cdrom_drive *d, Link Here
936
  cmd[8] = sectors;
936
  cmd[8] = sectors;
937
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
937
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
938
    return(ret);
938
    return(ret);
939
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
939
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
940
  return(0);
940
  return(0);
941
}
941
}
942
942
Lines 950-956 static int i_read_mmc2 (cdrom_drive *d, Link Here
950
  cmd[8] = sectors;
950
  cmd[8] = sectors;
951
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
951
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
952
    return(ret);
952
    return(ret);
953
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
953
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
954
  return(0);
954
  return(0);
955
}
955
}
956
956
Lines 964-970 static int i_read_mmc2B (cdrom_drive *d, Link Here
964
  cmd[8] = sectors;
964
  cmd[8] = sectors;
965
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
965
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
966
    return(ret);
966
    return(ret);
967
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
967
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
968
  return(0);
968
  return(0);
969
}
969
}
970
970
Lines 978-984 static int i_read_mmc3 (cdrom_drive *d, Link Here
978
  cmd[8] = sectors;
978
  cmd[8] = sectors;
979
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
979
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
980
    return(ret);
980
    return(ret);
981
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
981
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
982
  return(0);
982
  return(0);
983
}
983
}
984
984
Lines 992-998 static int i_read_mmc3B (cdrom_drive *d, Link Here
992
  cmd[8] = sectors;
992
  cmd[8] = sectors;
993
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
993
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
994
    return(ret);
994
    return(ret);
995
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
995
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
996
  return(0);
996
  return(0);
997
}
997
}
998
998
Lines 1026-1032 static int i_read_msf (cdrom_drive *d, v Link Here
1026
1026
1027
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
1027
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
1028
    return(ret);
1028
    return(ret);
1029
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
1029
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
1030
  return(0);
1030
  return(0);
1031
}
1031
}
1032
1032
Lines 1039-1045 static int i_read_msf2 (cdrom_drive *d, Link Here
1039
1039
1040
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
1040
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
1041
    return(ret);
1041
    return(ret);
1042
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
1042
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
1043
  return(0);
1043
  return(0);
1044
}
1044
}
1045
1045
Lines 1052-1058 static int i_read_msf3 (cdrom_drive *d, Link Here
1052
  
1052
  
1053
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
1053
  if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
1054
    return(ret);
1054
    return(ret);
1055
  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
1055
  if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW);
1056
  return(0);
1056
  return(0);
1057
}
1057
}
1058
1058
Lines 1275-1281 long scsi_read_msf3 (cdrom_drive *d, voi Link Here
1275
static int count_2352_bytes(cdrom_drive *d){
1275
static int count_2352_bytes(cdrom_drive *d){
1276
  long i;
1276
  long i;
1277
  for(i=2351;i>=0;i--)
1277
  for(i=2351;i>=0;i--)
1278
    if(d->private->sg_buffer[i]!=(unsigned char)'\177')
1278
    if(d->private_data->sg_buffer[i]!=(unsigned char)'\177')
1279
      return(((i+3)>>2)<<2);
1279
      return(((i+3)>>2)<<2);
1280
1280
1281
  return(0);
1281
  return(0);
Lines 1284-1290 static int count_2352_bytes(cdrom_drive Link Here
1284
static int verify_nonzero(cdrom_drive *d){
1284
static int verify_nonzero(cdrom_drive *d){
1285
  long i,flag=0;
1285
  long i,flag=0;
1286
  for(i=0;i<2352;i++)
1286
  for(i=0;i<2352;i++)
1287
    if(d->private->sg_buffer[i]!=0){
1287
    if(d->private_data->sg_buffer[i]!=0){
1288
      flag=1;
1288
      flag=1;
1289
      break;
1289
      break;
1290
    }
1290
    }
Lines 1625-1631 static int check_mmc(cdrom_drive *d){ Link Here
1625
  d->is_mmc=0;
1625
  d->is_mmc=0;
1626
  if(mode_sense(d,22,0x2A)==0){
1626
  if(mode_sense(d,22,0x2A)==0){
1627
  
1627
  
1628
    b=d->private->sg_buffer;
1628
    b=d->private_data->sg_buffer;
1629
    b+=b[3]+4;
1629
    b+=b[3]+4;
1630
    
1630
    
1631
    if((b[0]&0x3F)==0x2A){
1631
    if((b[0]&0x3F)==0x2A){
Lines 1673-1679 unsigned char *scsi_inquiry(cdrom_drive Link Here
1673
    cderror(d,"008: Unable to identify CDROM model\n");
1673
    cderror(d,"008: Unable to identify CDROM model\n");
1674
    return(NULL);
1674
    return(NULL);
1675
  }
1675
  }
1676
  return (d->private->sg_buffer);
1676
  return (d->private_data->sg_buffer);
1677
}
1677
}
1678
1678
1679
int scsi_init_drive(cdrom_drive *d){
1679
int scsi_init_drive(cdrom_drive *d){
Lines 1742-1749 int scsi_init_drive(cdrom_drive *d){ Link Here
1742
  check_cache(d);
1742
  check_cache(d);
1743
1743
1744
  d->error_retry=1;
1744
  d->error_retry=1;
1745
  d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
1745
  d->private_data->sg_hd=realloc(d->private_data->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
1746
  d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
1746
  d->private_data->sg_buffer=((unsigned char *)d->private_data->sg_hd)+SG_OFF;
1747
  d->report_all=1;
1747
  d->report_all=1;
1748
  return(0);
1748
  return(0);
1749
}
1749
}
(-)cdparanoia-III-10.2.orig/interface/test_interface.c (-2 / +2 lines)
Lines 66-74 static long test_read(cdrom_drive *d, vo Link Here
66
  if(!fd)fd=fdopen(d->cdda_fd,"r");
66
  if(!fd)fd=fdopen(d->cdda_fd,"r");
67
67
68
  if(begin<lastread)
68
  if(begin<lastread)
69
    d->private->last_milliseconds=20;
69
    d->private_data->last_milliseconds=20;
70
  else
70
  else
71
    d->private->last_milliseconds=sectors;
71
    d->private_data->last_milliseconds=sectors;
72
72
73
#ifdef CDDA_TEST_UNDERRUN
73
#ifdef CDDA_TEST_UNDERRUN
74
  sectors-=1;
74
  sectors-=1;
(-)cdparanoia-III-10.2.orig/interface/scsi_interface.c (-3 / +5 lines)
Lines 656-661 static int scsi_read_toc (cdrom_drive *d Link Here
656
656
657
  /* read the header first */
657
  /* read the header first */
658
  unsigned char sense[SG_MAX_SENSE];
658
  unsigned char sense[SG_MAX_SENSE];
659
  const unsigned char orig_cmd[10] = { 0x43, 0, 0, 0, 0, 0, 1, 0, 12, 0};
659
  unsigned char cmd[10] = { 0x43, 0, 0, 0, 0, 0, 1, 0, 12, 0};
660
  unsigned char cmd[10] = { 0x43, 0, 0, 0, 0, 0, 1, 0, 12, 0};
660
  cmd[1]=d->lun<<5;
661
  cmd[1]=d->lun<<5;
661
662
Lines 674-680 static int scsi_read_toc (cdrom_drive *d Link Here
674
  }
675
  }
675
676
676
  for (i = first; i <= last; i++){
677
  for (i = first; i <= last; i++){
677
    memcpy(cmd, (char []){ 0x43, 0, 0, 0, 0, 0, 0, 0, 12, 0}, 10);
678
    memcpy(cmd, orig_cmd, 10);
678
    cmd[1]=d->lun<<5;
679
    cmd[1]=d->lun<<5;
679
    cmd[6]=i;
680
    cmd[6]=i;
680
    
681
    
Lines 695-701 static int scsi_read_toc (cdrom_drive *d Link Here
695
    }
696
    }
696
  }
697
  }
697
698
698
  memcpy(cmd, (char []){ 0x43, 0, 0, 0, 0, 0, 0, 0, 12, 0}, 10);
699
  memcpy(cmd, orig_cmd, 10);
699
  cmd[1]=d->lun<<5;
700
  cmd[1]=d->lun<<5;
700
  cmd[6]=0xAA;
701
  cmd[6]=0xAA;
701
    
702
    
Lines 745-751 static int scsi_read_toc2 (cdrom_drive * Link Here
745
  }
746
  }
746
747
747
  for (i = 0; i < tracks; i++){
748
  for (i = 0; i < tracks; i++){
748
    memcpy(cmd, (char[]){ 0xe5, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10);
749
    memset(cmd, 0, 10);
750
    cmd[0]=0xe5;
749
    cmd[5]=i+1;
751
    cmd[5]=i+1;
750
    cmd[8]=255;
752
    cmd[8]=255;
751
    
753
    

Return to bug 257047