--- audio/cdparanoia/Makefile 2015-05-27 01:28:51.000000000 +0200 +++ audio/cdparanoia/Makefile 2019-07-26 19:53:18.404522000 +0200 @@ -2,22 +2,28 @@ # $FreeBSD: head/audio/cdparanoia/Makefile 387522 2015-05-26 23:28:51Z amdmi3 $ PORTNAME= cdparanoia -PORTVERSION= 3.9.8 -PORTREVISION= 10 +PORTVERSION= 3.10.2 CATEGORIES= audio sysutils -MASTER_SITES= http://www.xiph.org/paranoia/download/ -DISTNAME= ${PORTNAME}-${PORTVERSION:C/^3\./III-alpha/} +MASTER_SITES= http://downloads.xiph.org/releases/cdparanoia/ +DISTNAME= ${PORTNAME}-${PORTVERSION:C/^3\./III-/} EXTRACT_SUFX= .src.tgz MAINTAINER= danfe@FreeBSD.org COMMENT= CDDA extraction tool (also known as ripper) LICENSE= GPLv2 -LICENSE_FILE= ${WRKSRC}/GPL +LICENSE_FILE= ${WRKSRC}/COPYING-GPL -GNU_CONFIGURE= yes USES= gmake USE_LDCONFIG= yes + +# Selected fixes commited to upstream SVN but not released for years. +# To keep these apart from FreeBSD specific patches keep these as EXTRA_PATCHES. +EXTRA_PATCHES= ${PATCHDIR}/extra-patch-upstream-patch-r15314 \ + ${PATCHDIR}/extra-patch-upstream-patch-r15337 \ + ${PATCHDIR}/extra-patch-upstream-patch-r15338 + +GNU_CONFIGURE= yes post-patch: @${REINPLACE_CMD} -e 's/\(^ *default:\)/\1break;/' \ --- audio/cdparanoia/distinfo 2014-01-22 16:30:13.000000000 +0100 +++ audio/cdparanoia/distinfo 2019-07-23 19:59:50.885897000 +0200 @@ -1,2 +1,3 @@ -SHA256 (cdparanoia-III-alpha9.8.src.tgz) = 1b79fae1aedc692f87d1344410f5c6b666961afccdc78bc5c4c257c450dfa008 -SIZE (cdparanoia-III-alpha9.8.src.tgz) = 116591 +TIMESTAMP = 1563302547 +SHA256 (cdparanoia-III-10.2.src.tgz) = 005db45ef4ee017f5c32ec124f913a0546e77014266c6a1c50df902a55fe64df +SIZE (cdparanoia-III-10.2.src.tgz) = 183236 --- audio/cdparanoia/files/extra-patch-upstream-patch-r15314 1970-01-01 01:00:00.000000000 +0100 +++ audio/cdparanoia/files/extra-patch-upstream-patch-r15314 2019-07-26 00:08:42.118499000 +0200 @@ -0,0 +1,312 @@ +Fix the cdda_enable bug that would cause the -A tests to fail on +drives that require a density set + +Correct a bug that would cause a failed density set to abort out of +verify_read_command + +Improve autosense order; non-density-set modes should be chacked +before even NULL-density modes because there's not necessarily any +going back (eg, Plextor lets you *set* the mode descriptor density, +but does not let you read it; it always reports '0') + +Index: interface/interface.c +=================================================================== +--- interface/interface.c (revision 15313) ++++ interface/interface.c (revision 15314) +@@ -90,11 +90,11 @@ + } + } + ++ if(d->bigendianp==-1)d->bigendianp=data_bigendianp(d); ++ + if((ret=d->enable_cdda(d,1))) + return(ret); + +- /* d->select_speed(d,d->maxspeed); most drives are full speed by default */ +- if(d->bigendianp==-1)d->bigendianp=data_bigendianp(d); + return(0); + } + +Index: interface/scsi_interface.c +=================================================================== +--- interface/scsi_interface.c (revision 15313) ++++ interface/scsi_interface.c (revision 15314) +@@ -1298,7 +1298,7 @@ + + static int verify_read_command(cdrom_drive *d){ + int i,j,k; +- int audioflag=0; ++ int audioflag=1; + + int (*enablecommand) (struct cdrom_drive *d, int speed); + long (*readcommand) (struct cdrom_drive *d, void *p, long begin, +@@ -1313,7 +1313,7 @@ + for data */ + + if(d->enable_cdda(d,1)==0){ +- ++ audioflag=0; + for(i=1;i<=d->tracks;i++){ + if(cdda_track_audiop(d,i)==1){ + long firstsector=cdda_track_firstsector(d,i); +@@ -1358,115 +1358,111 @@ + /* NEC test must come before sony; the nec drive expects d8 to be + 10 bytes, and a 12 byte verson (Sony) crashes the drive */ + +- for(j=0;j<15;j++){ +- int densitypossible=1; +- +- switch(j){ ++ for(i=0;i<5;i++){ ++ switch(i){ + case 0: +- d->read_audio=scsi_read_28; +- rs="28 0x,00"; ++ d->density=0; ++ d->enable_cdda=Dummy; ++ es="none "; + break; + case 1: +- d->read_audio=scsi_read_A8; +- rs="a8 0x,00"; ++ d->density=0; ++ d->enable_cdda=scsi_enable_cdda; ++ es="yes/0x00"; + break; +- + case 2: +- d->read_audio=scsi_read_mmcB; +- rs="be 02,10"; +- densitypossible=0; ++ d->density=0x04; ++ d->enable_cdda=scsi_enable_cdda; ++ es="yes/0x04"; + break; + case 3: +- d->read_audio=scsi_read_mmc2B; +- rs="be 02,f8"; +- densitypossible=0; ++ d->density=0x82; ++ d->enable_cdda=scsi_enable_cdda; ++ es="yes/0x82"; + break; + case 4: +- d->read_audio=scsi_read_mmc3B; +- rs="be 06,f8"; +- densitypossible=0; ++ d->density=0x81; ++ d->enable_cdda=scsi_enable_cdda; ++ es="yes/0x81"; + break; ++ } + +- case 5: +- d->read_audio=scsi_read_mmc; +- rs="be 00,10"; +- densitypossible=0; +- break; +- case 6: +- d->read_audio=scsi_read_mmc2; +- rs="be 00,f8"; +- densitypossible=0; +- break; +- case 7: +- d->read_audio=scsi_read_mmc3; +- rs="be 04,f8"; +- densitypossible=0; +- break; +- +- case 8: +- d->read_audio=scsi_read_msf; +- rs="b9 00,10"; +- densitypossible=0; +- break; +- case 9: +- d->read_audio=scsi_read_msf2; +- rs="b9 00,f8"; +- densitypossible=0; +- break; +- case 10: +- d->read_audio=scsi_read_msf3; +- rs="b9 04,f8"; +- densitypossible=0; +- break; +- +- case 11: +- d->read_audio=scsi_read_D4_10; +- rs="d4(10)0x"; +- break; +- case 12: +- d->read_audio=scsi_read_D4_12; +- rs="d4(12)0x"; +- break; +- case 13: +- d->read_audio=scsi_read_D5; +- rs="d5 0x,00"; +- break; +- case 14: +- d->read_audio=scsi_read_D8; +- rs="d8 0x,00"; +- break; +- } +- +- for(i=0;i<5;i++){ +- switch(i){ ++ for(j=0;j<15;j++){ ++ ++ switch(j){ + case 0: +- d->density=0; +- d->enable_cdda=Dummy; +- es="none "; +- if(!densitypossible)i=5; /* short circuit MMC style commands */ ++ d->read_audio=scsi_read_28; ++ rs="28 0x,00"; + break; + case 1: +- d->density=0; +- d->enable_cdda=scsi_enable_cdda; +- es="yes/0x00"; ++ d->read_audio=scsi_read_A8; ++ rs="a8 0x,00"; + break; ++ ++ /* 2 through 10 do not allow/require density */ + case 2: +- d->density=0x04; +- d->enable_cdda=scsi_enable_cdda; +- es="yes/0x04"; +- break; ++ d->read_audio=scsi_read_mmcB; ++ rs="be 02,10"; ++ if(i==0)break; + case 3: +- d->density=0x82; +- d->enable_cdda=scsi_enable_cdda; +- es="yes/0x82"; +- break; ++ j=3; ++ d->read_audio=scsi_read_mmc2B; ++ rs="be 02,f8"; ++ if(i==0)break; + case 4: +- d->density=0x81; +- d->enable_cdda=scsi_enable_cdda; +- es="yes/0x81"; ++ j=4; ++ d->read_audio=scsi_read_mmc3B; ++ rs="be 06,f8"; ++ if(i==0)break; ++ case 5: ++ j=5; ++ d->read_audio=scsi_read_mmc; ++ rs="be 00,10"; ++ if(i==0)break; ++ case 6: ++ j=6; ++ d->read_audio=scsi_read_mmc2; ++ rs="be 00,f8"; ++ if(i==0)break; ++ case 7: ++ j=7; ++ d->read_audio=scsi_read_mmc3; ++ rs="be 04,f8"; ++ if(i==0)break; ++ case 8: ++ j=8; ++ d->read_audio=scsi_read_msf; ++ rs="b9 00,10"; ++ if(i==0)break; ++ case 9: ++ j=9; ++ d->read_audio=scsi_read_msf2; ++ rs="b9 00,f8"; ++ if(i==0)break; ++ case 10: ++ j=10; ++ d->read_audio=scsi_read_msf3; ++ rs="b9 04,f8"; ++ if(i==0)break; ++ ++ case 11: ++ d->read_audio=scsi_read_D4_10; ++ rs="d4(10)0x"; + break; ++ case 12: ++ d->read_audio=scsi_read_D4_12; ++ rs="d4(12)0x"; ++ break; ++ case 13: ++ d->read_audio=scsi_read_D5; ++ rs="d5 0x,00"; ++ break; ++ case 14: ++ d->read_audio=scsi_read_D8; ++ rs="d8 0x,00"; ++ break; + } +- ++ + cdmessage(d,"\ttest -> density: ["); + cdmessage(d,es); + cdmessage(d,"] command: ["); +@@ -1525,21 +1521,21 @@ + if(zeroflag){ + char buffer[256]; + sprintf(buffer,"\t\tDrive returned %d packet(s), but contents\n" +- "\t\twere entirely zero\n",zeroflag); ++ "\t\twere entirely zero\n",zeroflag); + cdmessage(d,buffer); + } + } + } + } +- ++ + /* D'oh. */ + d->density=density; + d->read_audio=readcommand; + d->enable_cdda=enablecommand; +- ++ + cdmessage(d,"\tUnable to find any suitable command set from probe;\n" + "\tdrive probably not CDDA capable.\n"); +- ++ + cderror(d,"006: Could not read any data from drive\n"); + + } +@@ -1690,33 +1686,20 @@ + if(d->is_atapi)d->lun=0; /* it should already be; just to make sure */ + + if(d->is_mmc){ +- + d->read_audio = scsi_read_mmc2B; + d->bigendianp=0; +- + check_exceptions(d,mmc_list); +- + }else{ +- + if(d->is_atapi){ + /* Not MMC maybe still uses 0xbe */ +- + d->read_audio = scsi_read_mmc2B; + d->bigendianp=0; +- + check_exceptions(d,atapi_list); +- + }else{ +- + check_exceptions(d,scsi_list); +- + } + } + +- if(!d->is_atapi)set_sectorsize(d,2048); /* we really do want the +- sector size at 2048 to begin.*/ +- d->enable_cdda(d,0); +- + d->read_toc = (!memcmp(d->drive_model, "IMS", 3) && !d->is_atapi) ? scsi_read_toc2 : + scsi_read_toc; + d->set_speed = scsi_set_speed; --- audio/cdparanoia/files/extra-patch-upstream-patch-r15337 1970-01-01 01:00:00.000000000 +0100 +++ audio/cdparanoia/files/extra-patch-upstream-patch-r15337 2019-07-26 00:08:42.118609000 +0200 @@ -0,0 +1,31 @@ +Commit fix to make debug (no optimization, please) + +Commit fix to -p not actually outputting in host byte order (in fact, +it always get s it reversed regardless of endianness) + +Index: Makefile.in +=================================================================== +--- Makefile.in (revision 15336) ++++ Makefile.in (revision 15337) +@@ -10,7 +10,7 @@ + @SET_MAKE@ + FLAGS=@TYPESIZES@ @CFLAGS@ + OPT=@OPT@ $(FLAGS) +-DEBUG=@DEBUG@ $(FLAGS) ++DEBUG=@DEBUG@ + CC=@CC@ + LD=@CC@ + LDFLAGS=@LDFLAGS@ $(FLAGS) +Index: main.c +=================================================================== +--- main.c (revision 15336) ++++ main.c (revision 15337) +@@ -746,7 +746,7 @@ + break; + case 'p': + output_type=0; +- output_endian=-1; ++ output_endian=bigendianp(); + break; + case 'r': + output_type=0; --- audio/cdparanoia/files/extra-patch-upstream-patch-r15338 1970-01-01 01:00:00.000000000 +0100 +++ audio/cdparanoia/files/extra-patch-upstream-patch-r15338 2019-07-26 00:08:42.118813000 +0200 @@ -0,0 +1,584 @@ +Commit fix for 'private' becoming a reserved keyword as of GCC 4.3+ + +Index: interface/test_interface.c +=================================================================== +--- interface/test_interface.c (revision 15337) ++++ interface/test_interface.c (revision 15338) +@@ -66,9 +66,9 @@ + if(!fd)fd=fdopen(d->cdda_fd,"r"); + + if(beginprivate->last_milliseconds=20; ++ d->private_data->last_milliseconds=20; + else +- d->private->last_milliseconds=sectors; ++ d->private_data->last_milliseconds=sectors; + + #ifdef CDDA_TEST_UNDERRUN + sectors-=1; +Index: interface/cdda_interface.h +=================================================================== +--- interface/cdda_interface.h (revision 15337) ++++ interface/cdda_interface.h (revision 15338) +@@ -84,7 +84,7 @@ + int is_atapi; + int is_mmc; + +- cdda_private_data_t *private; ++ cdda_private_data_t *private_data; + void *reserved; + unsigned char inqbytes[4]; + +Index: interface/interface.c +=================================================================== +--- interface/interface.c (revision 15337) ++++ interface/interface.c (revision 15338) +@@ -39,9 +39,9 @@ + if(d->drive_model)free(d->drive_model); + if(d->cdda_fd!=-1)close(d->cdda_fd); + if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd); +- if(d->private){ +- if(d->private->sg_hd)free(d->private->sg_hd); +- free(d->private); ++ if(d->private_data){ ++ if(d->private_data->sg_hd)free(d->private_data->sg_hd); ++ free(d->private_data); + } + + free(d); +@@ -127,7 +127,7 @@ + } + } + } +- if(ms)*ms=d->private->last_milliseconds; ++ if(ms)*ms=d->private_data->last_milliseconds; + return(sectors); + } + +Index: interface/scsi_interface.c +=================================================================== +--- interface/scsi_interface.c (revision 15337) ++++ interface/scsi_interface.c (revision 15338) +@@ -15,13 +15,13 @@ + static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){ + struct timespec tv1; + struct timespec tv2; +- int ret1=clock_gettime(d->private->clock,&tv1); ++ int ret1=clock_gettime(d->private_data->clock,&tv1); + int ret2=ioctl(fd, command,arg); +- int ret3=clock_gettime(d->private->clock,&tv2); ++ int ret3=clock_gettime(d->private_data->clock,&tv2); + if(ret1<0 || ret3<0){ +- d->private->last_milliseconds=-1; ++ d->private_data->last_milliseconds=-1; + }else{ +- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; ++ d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; + } + return ret2; + } +@@ -96,7 +96,7 @@ + static void clear_garbage(cdrom_drive *d){ + fd_set fdset; + struct timeval tv; +- struct sg_header *sg_hd=d->private->sg_hd; ++ struct sg_header *sg_hd=d->private_data->sg_hd; + int flag=0; + + /* clear out any possibly preexisting garbage */ +@@ -185,7 +185,7 @@ + struct timespec tv2; + int tret1,tret2; + int status = 0; +- struct sg_header *sg_hd=d->private->sg_hd; ++ struct sg_header *sg_hd=d->private_data->sg_hd; + long writebytes=SG_OFF+cmd_len+in_size; + + /* generic scsi device services */ +@@ -195,7 +195,7 @@ + + memset(sg_hd,0,sizeof(sg_hd)); + memset(sense_buffer,0,SG_MAX_SENSE); +- memcpy(d->private->sg_buffer,cmd,cmd_len+in_size); ++ memcpy(d->private_data->sg_buffer,cmd,cmd_len+in_size); + sg_hd->twelve_byte = cmd_len == 12; + sg_hd->result = 0; + sg_hd->reply_len = SG_OFF + out_size; +@@ -209,7 +209,7 @@ + tell if the command failed. Scared yet? */ + + if(bytecheck && out_size>in_size){ +- memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); ++ memset(d->private_data->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); + /* the size does not remove cmd_len due to the way the kernel + driver copies buffers */ + writebytes+=(out_size-in_size); +@@ -243,7 +243,7 @@ + } + + sigprocmask (SIG_BLOCK, &(d->sigset), NULL ); +- tret1=clock_gettime(d->private->clock,&tv1); ++ tret1=clock_gettime(d->private_data->clock,&tv1); + errno=0; + status = write(d->cdda_fd, sg_hd, writebytes ); + +@@ -289,7 +289,7 @@ + } + } + +- tret2=clock_gettime(d->private->clock,&tv2); ++ tret2=clock_gettime(d->private_data->clock,&tv2); + errno=0; + status = read(d->cdda_fd, sg_hd, SG_OFF + out_size); + sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL ); +@@ -313,7 +313,7 @@ + if(bytecheck && in_size+cmd_lenprivate->sg_buffer[i]!=bytefill){ ++ if(d->private_data->sg_buffer[i]!=bytefill){ + flag=1; + break; + } +@@ -326,9 +326,9 @@ + + errno=0; + if(tret1<0 || tret2<0){ +- d->private->last_milliseconds=-1; ++ d->private_data->last_milliseconds=-1; + }else{ +- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000; ++ d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000; + } + return(0); + } +@@ -347,7 +347,7 @@ + + memset(&hdr,0,sizeof(hdr)); + memset(sense,0,sizeof(sense)); +- memcpy(d->private->sg_buffer,cmd+cmd_len,in_size); ++ memcpy(d->private_data->sg_buffer,cmd+cmd_len,in_size); + + hdr.cmdp = cmd; + hdr.cmd_len = cmd_len; +@@ -355,7 +355,7 @@ + hdr.mx_sb_len = SG_MAX_SENSE; + hdr.timeout = 50000; + hdr.interface_id = 'S'; +- hdr.dxferp = d->private->sg_buffer; ++ hdr.dxferp = d->private_data->sg_buffer; + hdr.flags = SG_FLAG_DIRECT_IO; /* direct IO if we can get it */ + + /* scary buffer fill hack */ +@@ -400,7 +400,7 @@ + if(bytecheck && in_sizeprivate->sg_buffer[i]!=bytefill){ ++ if(d->private_data->sg_buffer[i]!=bytefill){ + flag=1; + break; + } +@@ -412,7 +412,7 @@ + } + + /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */ +- /* d->private->last_milliseconds = hdr.duration; */ ++ /* d->private_data->last_milliseconds = hdr.duration; */ + + errno = 0; + return 0; +@@ -445,9 +445,9 @@ + + handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense); + +- key = d->private->sg_buffer[2] & 0xf; +- ASC = d->private->sg_buffer[12]; +- ASCQ = d->private->sg_buffer[13]; ++ key = d->private_data->sg_buffer[2] & 0xf; ++ ASC = d->private_data->sg_buffer[12]; ++ ASCQ = d->private_data->sg_buffer[13]; + + if(key == 2 && ASC == 4 && ASCQ == 1) return 0; + return 1; +@@ -492,7 +492,7 @@ + if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1); + + { +- unsigned char *b=d->private->sg_buffer; ++ unsigned char *b=d->private_data->sg_buffer; + if(b[0])return(1); /* Handles only up to 256 bytes */ + if(b[6])return(1); /* Handles only up to 256 bytes */ + +@@ -604,8 +604,8 @@ + static unsigned int get_orig_sectorsize(cdrom_drive *d){ + if(mode_sense(d,12,0x01))return(-1); + +- d->orgdens = d->private->sg_buffer[4]; +- return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]); ++ d->orgdens = d->private_data->sg_buffer[4]; ++ return(d->orgsize = ((int)(d->private_data->sg_buffer[10])<<8)+d->private_data->sg_buffer[11]); + } + + /* switch CDROM scsi drives to given sector size */ +@@ -664,8 +664,8 @@ + return(-4); + } + +- first=d->private->sg_buffer[2]; +- last=d->private->sg_buffer[3]; ++ first=d->private_data->sg_buffer[2]; ++ last=d->private_data->sg_buffer[3]; + tracks=last-first+1; + + if (last > MAXTRK || first > MAXTRK || last<0 || first<0) { +@@ -683,7 +683,7 @@ + return(-5); + } + { +- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4); ++ scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4); + + d->disc_toc[i-first].bFlags=toc->bFlags; + d->disc_toc[i-first].bTrack=i; +@@ -704,7 +704,7 @@ + return(-2); + } + { +- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4); ++ scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4); + + d->disc_toc[i-first].bFlags=toc->bFlags; + d->disc_toc[i-first].bTrack=0xAA; +@@ -738,7 +738,7 @@ + } + + /* copy to our structure and convert start sector */ +- tracks = d->private->sg_buffer[1]; ++ tracks = d->private_data->sg_buffer[1]; + if (tracks > MAXTRK) { + cderror(d,"003: CDROM reporting illegal number of tracks\n"); + return(-3); +@@ -754,33 +754,33 @@ + return(-5); + } + +- d->disc_toc[i].bFlags = d->private->sg_buffer[10]; ++ d->disc_toc[i].bFlags = d->private_data->sg_buffer[10]; + d->disc_toc[i].bTrack = i + 1; + + d->disc_toc[i].dwStartSector= d->adjust_ssize * +- (((signed char)(d->private->sg_buffer[2])<<24) | +- (d->private->sg_buffer[3]<<16)| +- (d->private->sg_buffer[4]<<8)| +- (d->private->sg_buffer[5])); ++ (((signed char)(d->private_data->sg_buffer[2])<<24) | ++ (d->private_data->sg_buffer[3]<<16)| ++ (d->private_data->sg_buffer[4]<<8)| ++ (d->private_data->sg_buffer[5])); + } + + d->disc_toc[i].bFlags = 0; + d->disc_toc[i].bTrack = i + 1; +- memcpy (&foo, d->private->sg_buffer+2, 4); +- memcpy (&bar, d->private->sg_buffer+6, 4); ++ memcpy (&foo, d->private_data->sg_buffer+2, 4); ++ memcpy (&bar, d->private_data->sg_buffer+6, 4); + d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) + + be32_to_cpu(bar)); + + d->disc_toc[i].dwStartSector= d->adjust_ssize * +- ((((signed char)(d->private->sg_buffer[2])<<24) | +- (d->private->sg_buffer[3]<<16)| +- (d->private->sg_buffer[4]<<8)| +- (d->private->sg_buffer[5]))+ ++ ((((signed char)(d->private_data->sg_buffer[2])<<24) | ++ (d->private_data->sg_buffer[3]<<16)| ++ (d->private_data->sg_buffer[4]<<8)| ++ (d->private_data->sg_buffer[5]))+ + +- ((((signed char)(d->private->sg_buffer[6])<<24) | +- (d->private->sg_buffer[7]<<16)| +- (d->private->sg_buffer[8]<<8)| +- (d->private->sg_buffer[9])))); ++ ((((signed char)(d->private_data->sg_buffer[6])<<24) | ++ (d->private_data->sg_buffer[7]<<16)| ++ (d->private_data->sg_buffer[8]<<8)| ++ (d->private_data->sg_buffer[9])))); + + + d->cd_extra = FixupTOC(d,tracks+1); +@@ -817,7 +817,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -836,7 +836,7 @@ + cmd[9] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -854,7 +854,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -872,7 +872,7 @@ + cmd[9] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -890,7 +890,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -908,7 +908,7 @@ + cmd[9] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -922,7 +922,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -936,7 +936,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -950,7 +950,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -964,7 +964,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -978,7 +978,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -992,7 +992,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1026,7 +1026,7 @@ + + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1039,7 +1039,7 @@ + + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1052,7 +1052,7 @@ + + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1275,7 +1275,7 @@ + static int count_2352_bytes(cdrom_drive *d){ + long i; + for(i=2351;i>=0;i--) +- if(d->private->sg_buffer[i]!=(unsigned char)'\177') ++ if(d->private_data->sg_buffer[i]!=(unsigned char)'\177') + return(((i+3)>>2)<<2); + + return(0); +@@ -1284,7 +1284,7 @@ + static int verify_nonzero(cdrom_drive *d){ + long i,flag=0; + for(i=0;i<2352;i++) +- if(d->private->sg_buffer[i]!=0){ ++ if(d->private_data->sg_buffer[i]!=0){ + flag=1; + break; + } +@@ -1621,7 +1621,7 @@ + d->is_mmc=0; + if(mode_sense(d,22,0x2A)==0){ + +- b=d->private->sg_buffer; ++ b=d->private_data->sg_buffer; + b+=b[3]+4; + + if((b[0]&0x3F)==0x2A){ +@@ -1669,7 +1669,7 @@ + cderror(d,"008: Unable to identify CDROM model\n"); + return(NULL); + } +- return (d->private->sg_buffer); ++ return (d->private_data->sg_buffer); + } + + int scsi_init_drive(cdrom_drive *d){ +@@ -1725,8 +1725,8 @@ + check_cache(d); + + d->error_retry=1; +- d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128); +- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF; ++ d->private_data->sg_hd=realloc(d->private_data->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128); ++ d->private_data->sg_buffer=((unsigned char *)d->private_data->sg_hd)+SG_OFF; + d->report_all=1; + return(0); + } +Index: interface/cooked_interface.c +=================================================================== +--- interface/cooked_interface.c (revision 15337) ++++ interface/cooked_interface.c (revision 15338) +@@ -13,13 +13,13 @@ + static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){ + struct timespec tv1; + struct timespec tv2; +- int ret1=clock_gettime(d->private->clock,&tv1); ++ int ret1=clock_gettime(d->private_data->clock,&tv1); + int ret2=ioctl(fd, command,arg); +- int ret3=clock_gettime(d->private->clock,&tv2); ++ int ret3=clock_gettime(d->private_data->clock,&tv2); + if(ret1<0 || ret3<0){ +- d->private->last_milliseconds=-1; ++ d->private_data->last_milliseconds=-1; + }else{ +- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; ++ d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; + } + return ret2; + } +Index: interface/scan_devices.c +=================================================================== +--- interface/scan_devices.c (revision 15337) ++++ interface/scan_devices.c (revision 15338) +@@ -264,11 +264,11 @@ + d->interface=COOKED_IOCTL; + d->bigendianp=-1; /* We don't know yet... */ + d->nsectors=-1; +- d->private=calloc(1,sizeof(*d->private)); ++ d->private_data=calloc(1,sizeof(*d->private_data)); + { + /* goddamnit */ + struct timespec tv; +- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); ++ d->private_data->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); + } + idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description); + return(d); +@@ -674,15 +674,15 @@ + d->bigendianp=-1; /* We don't know yet... */ + d->nsectors=-1; + d->messagedest = messagedest; +- d->private=calloc(1,sizeof(*d->private)); ++ d->private_data=calloc(1,sizeof(*d->private_data)); + { + /* goddamnit */ + struct timespec tv; +- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); ++ d->private_data->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); + } + if(use_sgio){ + d->interface=SGIO_SCSI; +- d->private->sg_buffer=(unsigned char *)(d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE)); ++ d->private_data->sg_buffer=(unsigned char *)(d->private_data->sg_hd=malloc(MAX_BIG_BUFF_SIZE)); + g_fd=d->cdda_fd=dup(d->ioctl_fd); + }else{ + version=verify_SG_version(d,messagedest,messages); +@@ -696,8 +696,8 @@ + } + + /* malloc our big buffer for scsi commands */ +- d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE); +- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF; ++ d->private_data->sg_hd=malloc(MAX_BIG_BUFF_SIZE); ++ d->private_data->sg_buffer=((unsigned char *)d->private_data->sg_hd)+SG_OFF; + } + + { +@@ -772,9 +772,9 @@ + if(i_fd!=-1)close(i_fd); + if(g_fd!=-1)close(g_fd); + if(d){ +- if(d->private){ +- if(d->private->sg_hd)free(d->private->sg_hd); +- free(d->private); ++ if(d->private_data){ ++ if(d->private_data->sg_hd)free(d->private_data->sg_hd); ++ free(d->private_data); + } + free(d); + } +@@ -821,7 +821,7 @@ + d->interface=TEST_INTERFACE; + d->bigendianp=-1; /* We don't know yet... */ + d->nsectors=-1; +- d->private=calloc(1,sizeof(*d->private)); ++ d->private_data=calloc(1,sizeof(*d->private_data)); + d->drive_model=copystring("File based test interface"); + idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model); + --- audio/cdparanoia/files/patch-Makefile.in 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-Makefile.in 2019-07-26 00:08:42.118982000 +0200 @@ -1,4 +1,4 @@ ---- Makefile.in.orig 2001-03-27 22:46:58 UTC +--- Makefile.in.orig 2019-07-25 21:55:03 UTC +++ Makefile.in @@ -8,7 +8,7 @@ VPATH=@srcdir@ srcdir=@srcdir@ @@ -7,23 +7,23 @@ -FLAGS=@TYPESIZES@ @CFLAGS@ +FLAGS=@TYPESIZES@ @CPPFLAGS@ @CFLAGS@ -I./interface OPT=@OPT@ $(FLAGS) - DEBUG=@DEBUG@ $(FLAGS) + DEBUG=@DEBUG@ CC=@CC@ @@ -32,7 +32,7 @@ export VERSION ifeq ($(STATIC),TRUE) LIBS = interface/libcdda_interface.a paranoia/libcdda_paranoia.a \ -- -static -lm -+ -lm -lcam +- -static -lm -lrt ++ -lm -lrt -lcam LIBDEP = interface/libcdda_interface.a paranoia/libcdda_paranoia.a else - LIBS = -lcdda_interface -lcdda_paranoia -lm -@@ -64,28 +64,27 @@ slib: + LIBS = -lcdda_interface -lcdda_paranoia -lm -lrt +@@ -63,28 +63,27 @@ slib: cd paranoia && $(MAKE) slib install: - $(INSTALL) -d -m 0755 $(BINDIR) -- $(INSTALL) -m 0755 $(srcdir)/cdparanoia $(BINDIR) +- $(INSTALL) -m 755 $(srcdir)/cdparanoia $(BINDIR) - $(INSTALL) -d -m 0755 $(MANDIR) - $(INSTALL) -d -m 0755 $(MANDIR)/man1 - $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(MANDIR)/man1 @@ -37,7 +37,7 @@ - $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(LIBDIR) - $(INSTALL) -m 0644 $(srcdir)/utils.h $(INCLUDEDIR) + $(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR) -+ $(INSTALL) -m 0755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR) ++ $(INSTALL) -m 755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR) + $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR) + $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)/man1 + $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1 --- audio/cdparanoia/files/patch-configure 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-configure 1970-01-01 01:00:00.000000000 +0100 @@ -1,15 +0,0 @@ -Index: configure -=================================================================== -RCS file: /home/cvs/cdparanoia/configure,v -retrieving revision 1.1.1.1 -retrieving revision 1.2 ---- configure.orig 2000-04-15 15:13:01 UTC -+++ configure -@@ -1084,7 +1084,6 @@ EOF - fi - - --CFLAGS="" - - TYPESIZES="" - --- audio/cdparanoia/files/patch-interface_Makefile.in 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_Makefile.in 2019-07-23 19:59:50.886935000 +0200 @@ -3,25 +3,25 @@ RCS file: /home/cvs/cdparanoia/interface/Makefile.in,v retrieving revision 1.1.1.1 retrieving revision 1.3 ---- interface/Makefile.in.orig 1999-12-14 04:27:59 UTC +--- interface/Makefile.in.orig 2008-08-21 16:08:54 UTC +++ interface/Makefile.in @@ -9,13 +9,13 @@ srcdir=@srcdir@ @SET_MAKE@ FLAGS=@SBPCD_H@ @UCDROM_H@ @TYPESIZES@ @CFLAGS@ OPT=@OPT@ $(FLAGS) --DEBUG=@DEBUG@ $(FLAGS) -DCDDA_TEST +-DEBUG=@DEBUG@ -DCDDA_TEST +DEBUG=@DEBUG@ $(FLAGS) CC=@CC@ LD=@CC@ LDFLAGS=@LDFLAGS@ $(FLAGS) AR=@AR@ RANLIB=@RANLIB@ --LIBS = -lm -+LIBS = -lm -lcam +-LIBS = -lm -lrt ++LIBS = -lm -lrt -lcam CPPFLAGS+=-D_REENTRANT OFILES = scan_devices.o common_interface.o cooked_interface.o interface.o\ -@@ -23,19 +23,15 @@ OFILES = scan_devices.o common_interface +@@ -23,18 +23,14 @@ OFILES = scan_devices.o common_interface.o cooked_inte export VERSION @@ -38,19 +38,9 @@ $(MAKE) lessmessy $(MAKE) libcdda_interface.so CFLAGS="$(OPT) -fpic" [ -e libcdda_interface.so.0 ] || ln -s libcdda_interface.so libcdda_interface.so.0 - ++ +debug: + $(MAKE) libcdda_interface.a CFLAGS="$(DEBUG)" -+ + test: $(MAKE) libcdda_interface.a CFLAGS="$(DEBUG)" - $(CC) $(DEBUG) -c test.c -@@ -46,7 +42,7 @@ libcdda_interface.a: $(OFILES) - $(RANLIB) libcdda_interface.a - - libcdda_interface.so: $(OFILES) -- $(CC) -fpic -shared -o libcdda_interface.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_interface.so.0 $(OFILES) -+ $(CC) -fpic -shared -o libcdda_interface.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_interface.so.0 $(OFILES) ${LIBS} - [ -e libcdda_interface.so.0 ] || ln -s libcdda_interface.so.0.$(VERSION) libcdda_interface.so.0 - [ -e libcdda_interface.so ] || ln -s libcdda_interface.so.0.$(VERSION) libcdda_interface.so - --- audio/cdparanoia/files/patch-interface_cdda__interface.h 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_cdda__interface.h 2019-07-25 22:32:55.501669000 +0200 @@ -1,18 +1,20 @@ ---- interface/cdda_interface.h.orig 2001-03-24 01:15:46 UTC +--- interface/cdda_interface.h.orig 2008-09-11 10:43:52 UTC +++ interface/cdda_interface.h -@@ -21,6 +21,11 @@ +@@ -21,6 +21,13 @@ #include #include +#ifdef __FreeBSD__ +#include +#include ++ ++#define ENOMEDIUM 12345 +#endif + #define MAXTRK 100 typedef struct TOC { /* structure of table of contents */ -@@ -47,13 +52,19 @@ typedef struct cdrom_drive{ +@@ -49,13 +56,19 @@ typedef struct cdrom_drive{ int opened; /* This struct may just represent a candidate for opening */ char *cdda_device_name; @@ -34,17 +36,3 @@ int interface; int bigendianp; int nsectors; -@@ -83,9 +94,13 @@ typedef struct cdrom_drive{ - int is_mmc; - - /* SCSI command buffer and offset pointers */ -+#ifdef Linux - unsigned char *sg; - unsigned char *sg_buffer; - unsigned char inqbytes[4]; -+#elif defined(__FreeBSD__) -+ unsigned char *sg_buffer; -+#endif - - /* Scsi parameters and state */ - unsigned char density; --- audio/cdparanoia/files/patch-interface_common__interface.c 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_common__interface.c 2019-07-26 19:53:27.652035000 +0200 @@ -3,29 +3,35 @@ RCS file: /home/cvs/cdparanoia/interface/common_interface.c,v retrieving revision 1.1.1.1 retrieving revision 1.5 ---- interface/common_interface.c.orig 2000-04-19 22:41:04 UTC +--- interface/common_interface.c.orig 2008-08-21 16:08:54 UTC +++ interface/common_interface.c -@@ -13,12 +13,19 @@ +@@ -13,15 +13,25 @@ #include "utils.h" #include "smallft.h" +#ifdef Linux #include ++#elif defined(__FreeBSD__) ++#include +#endif /* Test for presence of a cdrom by pinging with the 'CDROMVOLREAD' ioctl() */ + /* Also test using CDROM_GET_CAPABILITY (if available) as some newer DVDROMs will + reject CDROMVOLREAD ioctl for god-knows-what reason */ int ioctl_ping_cdrom(int fd){ +#ifdef Linux struct cdrom_volctrl volctl; - if (ioctl(fd, CDROMVOLREAD, &volctl)) + if (ioctl(fd, CDROMVOLREAD, &volctl) && + ioctl(fd, CDROM_GET_CAPABILITY, NULL)<0) +#elif defined(__FreeBSD__) + struct ioc_vol volctl; -+ if (ioctl(fd, CDIOCGETVOL, &volctl)) ++ if (ioctl(fd, CDIOCGETVOL, &volctl) && ++ (ioctl(fd, CDIOCCAPABILITY, NULL)<0)) +#endif return(1); /* failure */ return(0); -@@ -26,6 +33,7 @@ int ioctl_ping_cdrom(int fd){ +@@ -29,6 +39,7 @@ int ioctl_ping_cdrom(int fd){ } @@ -33,7 +39,7 @@ /* Use the ioctl thingy above ping the cdrom; this will get model info */ char *atapi_drive_info(int fd){ /* Work around the fact that the struct grew without warning in -@@ -46,6 +54,7 @@ char *atapi_drive_info(int fd){ +@@ -49,6 +60,7 @@ char *atapi_drive_info(int fd){ free(id); return(ret); } @@ -41,8 +47,8 @@ int data_bigendianp(cdrom_drive *d){ float lsb_votes=0; -@@ -171,7 +180,9 @@ int data_bigendianp(cdrom_drive *d){ - knows the leasoud/leadin size. */ +@@ -174,7 +186,9 @@ int data_bigendianp(cdrom_drive *d){ + knows the leadout/leadin size. */ int FixupTOC(cdrom_drive *d,int tracks){ +#ifdef Linux @@ -51,7 +57,7 @@ int j; /* First off, make sure the 'starting sector' is >=0 */ -@@ -208,6 +219,8 @@ int FixupTOC(cdrom_drive *d,int tracks){ +@@ -211,6 +225,8 @@ int FixupTOC(cdrom_drive *d,int tracks){ /* For a scsi device, the ioctl must go to the specialized SCSI CDROM device, not the generic device. */ @@ -60,10 +66,19 @@ if (d->ioctl_fd != -1) { int result; -@@ -231,6 +244,7 @@ int FixupTOC(cdrom_drive *d,int tracks){ +@@ -235,6 +251,16 @@ int FixupTOC(cdrom_drive *d,int tracks){ return 1; } } ++#elif defined(__FreeBSD__) ++ for (j = tracks-1; j >= 0; j--) { ++ if (j > 0 && !IS_AUDIO(d,j) && IS_AUDIO(d,j-1)) { ++ if ((d->disc_toc[j].dwStartSector > d->disc_toc[j].dwStartSector - 11400) && ++ (d->disc_toc[j].dwStartSector - 11400 > d->disc_toc[j-1].dwStartSector)) ++ d->disc_toc[j].dwStartSector = d->disc_toc[j].dwStartSector - 11400; ++ break; ++ } ++ } +#endif return 0; } --- audio/cdparanoia/files/patch-interface_cooked__interface.c 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_cooked__interface.c 2019-07-25 22:32:55.502389000 +0200 @@ -1,24 +1,24 @@ ---- interface/cooked_interface.c.orig 2000-04-19 22:41:04 UTC +--- interface/cooked_interface.c.orig 2008-08-26 09:55:22 UTC +++ interface/cooked_interface.c @@ -1,6 +1,8 @@ /****************************************************************** - * CopyPolicy: GNU Public License 2 applies + * CopyPolicy: GNU Lesser General Public License 2.1 applies * Copyright (C) Monty xiphmont@mit.edu + * FreeBSD porting (c) 2003 + * Simon 'corecode' Schubert * * CDROM code specific to the cooked ioctl interface * -@@ -10,6 +12,7 @@ - #include "common_interface.h" - #include "utils.h" +@@ -24,6 +26,7 @@ static int timed_ioctl(cdrom_drive *d, int fd, int com + return ret2; + } +#ifdef Linux static int cooked_readtoc (cdrom_drive *d){ int i; int tracks; -@@ -129,6 +132,142 @@ static long cooked_read (cdrom_drive *d, - return(sectors); +@@ -157,6 +160,142 @@ static long cooked_read (cdrom_drive *d, void *p, long + return ret; } +#elif defined(__FreeBSD__) @@ -160,7 +160,7 @@ /* hook */ static int Dummy (cdrom_drive *d,int Switch){ return(0); -@@ -193,6 +332,7 @@ static void check_exceptions(cdrom_drive +@@ -221,6 +360,7 @@ static void check_exceptions(cdrom_drive *d,exception int cooked_init_drive (cdrom_drive *d){ int ret; @@ -168,7 +168,7 @@ switch(d->drive_type){ case MATSUSHITA_CDROM_MAJOR: /* sbpcd 1 */ case MATSUSHITA_CDROM2_MAJOR: /* sbpcd 2 */ -@@ -243,6 +383,9 @@ int cooked_init_drive (cdrom_drive *d){ +@@ -271,6 +411,9 @@ int cooked_init_drive (cdrom_drive *d){ default: d->nsectors=40; } @@ -177,4 +177,4 @@ +#endif d->enable_cdda = Dummy; d->read_audio = cooked_read; - d->set_speed = cooked_setspeed; + d->read_toc = cooked_readtoc; --- audio/cdparanoia/files/patch-interface_interface.c 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_interface.c 2019-07-26 00:08:42.119136000 +0200 @@ -1,6 +1,6 @@ ---- interface/interface.c.orig 2000-04-19 22:41:04 UTC +--- interface/interface.c.orig 2008-09-11 10:43:52 UTC +++ interface/interface.c -@@ -30,11 +30,24 @@ int cdda_close(cdrom_drive *d){ +@@ -35,10 +35,17 @@ int cdda_close(cdrom_drive *d){ _clean_messages(d); if(d->cdda_device_name)free(d->cdda_device_name); @@ -9,19 +9,26 @@ if(d->drive_model)free(d->drive_model); if(d->cdda_fd!=-1)close(d->cdda_fd); if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd); - if(d->sg)free(d->sg); +#elif defined(__FreeBSD__) -+ if (d->drive_model) -+ free(d->drive_model); -+ if (d->ccb) -+ cam_freeccb(d->ccb); -+ if (d->dev) -+ cam_close_device(d->dev); -+ if (d->sg_buffer) -+ free(d->sg_buffer); -+ if (d->ioctl_fd != -1) -+ close(d->ioctl_fd); ++ if(d->drive_model)free(d->drive_model); ++ if(d->ccb)cam_freeccb(d->ccb); ++ if(d->dev)cam_close_device(d->dev); ++ if(d->ioctl_fd != -1)close(d->ioctl_fd); +#endif - - free(d); + if(d->private_data){ + if(d->private_data->sg_hd)free(d->private_data->sg_hd); + free(d->private_data); +@@ -127,7 +134,13 @@ long cdda_read_timed(cdrom_drive *d, void *buffer, lon + } + } + } ++#ifdef Linux + if(ms)*ms=d->private_data->last_milliseconds; ++#elif defined(__FreeBSD__) ++ if(ms) { ++ *ms = (d->private_data == NULL) ? 0 : d->private_data->last_milliseconds; ++ } ++#endif + return(sectors); } + --- audio/cdparanoia/files/patch-interface_low__interface.h 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_low__interface.h 2019-07-25 23:42:56.721930000 +0200 @@ -3,9 +3,9 @@ RCS file: /home/cvs/cdparanoia/interface/low_interface.h,v retrieving revision 1.1.1.1 retrieving revision 1.3 ---- interface/low_interface.h.orig 2001-03-26 06:12:11 UTC +--- interface/low_interface.h.orig 2008-09-11 10:43:52 UTC +++ interface/low_interface.h -@@ -25,6 +25,8 @@ +@@ -26,6 +26,8 @@ #include #include @@ -14,7 +14,7 @@ #include #include -@@ -48,12 +50,27 @@ +@@ -54,6 +56,17 @@ #include #include @@ -24,12 +24,15 @@ +#include + +#include ++#include +#include + +#endif + #include "cdda_interface.h" + #ifndef SG_EMULATED_HOST +@@ -107,10 +120,17 @@ struct cdda_private_data { #define MAX_RETRIES 8 #define MAX_BIG_BUFF_SIZE 65536 #define MIN_BIG_BUFF_SIZE 4096 @@ -39,11 +42,6 @@ +#else +#define SG_OFF (0) +#endif - - #ifndef SG_EMULATED_HOST - /* old kernel version; the check for the ioctl is still runtime, this -@@ -64,7 +81,9 @@ - #endif extern int cooked_init_drive (cdrom_drive *d); +#ifdef Linux --- audio/cdparanoia/files/patch-interface_scan__devices.c 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_scan__devices.c 2019-07-26 00:08:42.119323000 +0200 @@ -1,15 +1,15 @@ ---- interface/scan_devices.c.orig 2001-03-26 05:44:01 UTC +--- interface/scan_devices.c.orig 2008-08-26 09:55:22 UTC +++ interface/scan_devices.c @@ -1,6 +1,8 @@ /****************************************************************** - * CopyPolicy: GNU Public License 2 applies - * Copyright (C) 1998 Monty xiphmont@mit.edu + * CopyPolicy: GNU Lesser General Public License 2.1 applies + * Copyright (C) 1998-2008 Monty xiphmont@mit.edu + * FreeBSD porting (c) 2003 + * Simon 'corecode' Schubert * * Autoscan for or verify presence of a cdrom device * -@@ -21,6 +23,8 @@ +@@ -24,6 +26,8 @@ #define MAX_DEV_LEN 20 /* Safe because strings only come from below */ /* must be absolute paths! */ @@ -18,7 +18,7 @@ static char *scsi_cdrom_prefixes[]={ "/dev/scd", "/dev/sr", -@@ -49,6 +53,17 @@ static char *cdrom_devices[]={ +@@ -52,6 +56,17 @@ static char *cdrom_devices[]={ "/dev/cm206cd", "/dev/gscd", "/dev/optcd",NULL}; @@ -36,7 +36,17 @@ /* Functions here look for a cdrom drive; full init of a drive type happens in interface.c */ -@@ -75,10 +90,12 @@ cdrom_drive *cdda_find_a_cdrom(int messa +@@ -61,6 +76,9 @@ cdrom_drive *cdda_find_a_cdrom(int messagedest,char ** + + int i=0; + cdrom_drive *d; ++#if defined(__FreeBSD__) ++ struct passwd *pwent; ++#endif + + while(cdrom_devices[i]!=NULL){ + +@@ -78,10 +96,12 @@ cdrom_drive *cdda_find_a_cdrom(int messagedest,char ** if((d=cdda_identify(buffer,messagedest,messages))) return(d); idmessage(messagedest,messages,"",NULL); @@ -49,22 +59,31 @@ } }else{ /* Name. Go for it. */ -@@ -117,8 +134,14 @@ cdrom_drive *cdda_identify(const char *d +@@ -92,9 +112,23 @@ cdrom_drive *cdda_find_a_cdrom(int messagedest,char ** + } + i++; } - #endif - -+#ifdef Linux /* is order of checks important? */ - d=cdda_identify_cooked(device,messagedest,messages); - if(!d)d=cdda_identify_scsi(device,NULL,messagedest,messages); ++ ++#if Linux + idmessage(messagedest,messages, + "\n\nNo cdrom drives accessible to %s found.\n", + cuserid(NULL)); +#elif defined(__FreeBSD__) -+ d = cdda_identify_scsi(device, NULL, messagedest, messages); -+ if (d == NULL) -+ d = cdda_identify_cooked(device, messagedest, messages); ++ pwent = getpwuid((uid_t)geteuid()); ++ if (pwent == NULL) { ++ idmessage(messagedest,messages, ++ "\n\nNo accessible cdrom drives found.\n", NULL); ++ return(NULL); ++ } ++ ++ idmessage(messagedest,messages, ++ "\n\nNo cdrom drives accessible to %s found.\n", ++ pwent->pw_name); +#endif + return(NULL); + } - #ifdef CDDA_TEST - if(!d)d=cdda_identify_test(device,messagedest,messages); -@@ -143,6 +166,7 @@ char *test_resolve_symlink(const char *f +@@ -145,6 +179,7 @@ char *test_resolve_symlink(const char *file,int messag } @@ -72,7 +91,7 @@ cdrom_drive *cdda_identify_cooked(const char *dev, int messagedest, char **messages){ -@@ -275,6 +299,61 @@ cdrom_drive *cdda_identify_cooked(const +@@ -274,6 +309,61 @@ cdrom_drive *cdda_identify_cooked(const char *dev, int return(d); } @@ -134,7 +153,7 @@ struct sg_id { long l1; /* target | lun << 8 | channel << 16 | low_ino << 24 */ long l2; /* Unique id */ -@@ -390,6 +469,7 @@ matchfail: +@@ -400,6 +490,7 @@ matchfail: if(dev!=-1)close(dev); return(NULL); } @@ -142,7 +161,7 @@ void strscat(char *a,char *b,int n){ int i; -@@ -401,6 +481,7 @@ void strscat(char *a,char *b,int n){ +@@ -411,6 +502,7 @@ void strscat(char *a,char *b,int n){ strcat(a," "); } @@ -150,14 +169,14 @@ /* At this point, we're going to punt compatability before SG2, and allow only SG2 and SG3 */ static int verify_SG_version(cdrom_drive *d,int messagedest, -@@ -653,6 +734,89 @@ cdda_identify_scsi_fail: - if(g_fd!=-1)close(g_fd); +@@ -780,6 +872,90 @@ cdda_identify_scsi_fail: + } return(NULL); } +#elif defined(__FreeBSD__) + -+cdrom_drive *cdda_identify_scsi(const char *device, -+ const char *dummy, ++cdrom_drive *cdda_identify_scsi(const char *dummy, ++ const char *device, + int messagedest, + char **messages) +{ @@ -209,7 +228,8 @@ + d->lun = d->dev->target_lun; + d->interface = GENERIC_SCSI; + -+ if ((d->sg_buffer = malloc(MAX_BIG_BUFF_SIZE)) == NULL) { ++ d->private_data=calloc(1,sizeof(*d->private_data)); ++ if ((d->private_data->sg_buffer=(unsigned char *)(d->private_data->sg_hd=malloc(MAX_BIG_BUFF_SIZE))) == NULL) { + idperror(messagedest, messages, "Could not allocate buffer memory", NULL); + goto cdda_identify_scsi_fail; + } --- audio/cdparanoia/files/patch-interface_scsi__interface.c 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_scsi__interface.c 2019-07-26 00:08:42.119521000 +0200 @@ -1,117 +1,118 @@ ---- interface/scsi_interface.c.orig 2001-03-24 01:15:46 UTC +--- interface/scsi_interface.c.orig 2019-07-25 21:55:03 UTC +++ interface/scsi_interface.c @@ -3,6 +3,8 @@ * Original interface.c Copyright (C) 1994-1997 * Eissfeldt heiko@colossus.escape.de - * Current blenderization Copyright (C) 1998-1999 Monty xiphmont@mit.edu + * Current incarnation Copyright (C) 1998-2008 Monty xiphmont@mit.edu + * FreeBSD porting (c) 2003 + * Simon 'corecode' Schubert * * Generic SCSI interface specific code. * -@@ -23,6 +25,7 @@ static void tweak_SG_buffer(cdrom_drive - int table,reserved; +@@ -36,6 +38,7 @@ static void tweak_SG_buffer(cdrom_drive *d) { + int table, reserved, cur, err; char buffer[256]; +#ifdef Linux - /* maximum transfer size? */ - if(ioctl(d->cdda_fd,SG_GET_RESERVED_SIZE,&reserved)){ - /* Up, guess not. */ -@@ -59,8 +62,17 @@ static void tweak_SG_buffer(cdrom_drive - cdmessage(d,"\tCouldn't disable command queue! Continuing anyway...\n"); - } - -+#elif defined(__FreeBSD__) -+ d->nsectors = 26; /* FreeBSD only supports 64K I/O transfer size */ -+ d->bigbuff = d->nsectors * CD_FRAMESIZE_RAW; -+ -+ sprintf(buffer,"\tSetting default read size to %d sectors (%d bytes).\n\n", -+ d->nsectors,d->nsectors*CD_FRAMESIZE_RAW); -+ cdmessage(d,buffer); + /* SG_SET_RESERVED_SIZE doesn't actually allocate or reserve anything. + * what it _does_ do is give you an error if you ask for a value + * larger than q->max_sectors (the length of the device's bio request +@@ -54,6 +57,10 @@ static void tweak_SG_buffer(cdrom_drive *d) { + implement working sg lists with SG_IO devices, so who knows... */ + if (ioctl(d->cdda_fd, SG_GET_SG_TABLESIZE, &table) < 0) + table=1; ++#else ++ reserved = 26 * CD_FRAMESIZE_RAW; /* FreeBSD only supports 64K I/O transfer size */ ++ table = 1; +#endif - } -+#ifdef Linux - static void reset_scsi(cdrom_drive *d){ - int arg; - d->enable_cdda(d,0); -@@ -74,6 +86,30 @@ static void reset_scsi(cdrom_drive *d){ - d->enable_cdda(d,1); + sprintf(buffer,"\tDMA scatter/gather table entries: %d\n\t" + "table entry size: %d bytes\n\t" +@@ -93,6 +100,7 @@ static void tweak_SG_buffer(cdrom_drive *d) { + cdmessage(d,buffer); } -+#elif defined(__FreeBSD__) -+static void reset_scsi(cdrom_drive *d) { -+ d->enable_cdda(d,0); -+ -+ d->ccb->ccb_h.func_code = XPT_RESET_DEV; -+ d->ccb->ccb_h.timeout = 5000; -+ -+ cdmessage(d, "sending SCSI reset... "); -+ if (cam_send_ccb(d->dev, d->ccb)) { -+ cdmessage(d, "error sending XPT_RESET_DEV CCB"); -+ } else { -+ -+ if (((d->ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) || -+ ((d->ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_BDR_SENT)) -+ cdmessage(d,"OK\n"); -+ else -+ cdmessage(d,"FAILED\n"); -+ } -+ -+ d->enable_cdda(d,1); -+} -+#endif -+ +#ifdef Linux static void clear_garbage(cdrom_drive *d){ fd_set fdset; struct timeval tv; -@@ -104,8 +140,10 @@ static void clear_garbage(cdrom_drive *d +@@ -123,6 +131,7 @@ static void clear_garbage(cdrom_drive *d){ flag=1; } } +#endif + static int check_sbp_error(const unsigned char status, + const unsigned char *sbp) { +@@ -172,6 +181,7 @@ static int check_sbp_error(const unsigned char status, + return 0; + } + ++#ifdef Linux /* process a complete scsi command. */ + static int sg2_handle_scsi_cmd(cdrom_drive *d, + unsigned char *cmd, +@@ -332,7 +342,9 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d, + } + return(0); + } ++#endif + +#ifdef Linux + static int sgio_handle_scsi_cmd(cdrom_drive *d, + unsigned char *cmd, + unsigned int cmd_len, +@@ -417,7 +429,9 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d, + errno = 0; + return 0; + } ++#endif + ++#ifdef Linux static int handle_scsi_cmd(cdrom_drive *d, + unsigned char *cmd, unsigned int cmd_len, - unsigned int in_size, -@@ -284,6 +322,95 @@ static int handle_scsi_cmd(cdrom_drive * - return(0); +@@ -433,6 +447,120 @@ static int handle_scsi_cmd(cdrom_drive *d, + } +#elif defined(__FreeBSD__) +static int handle_scsi_cmd(cdrom_drive *d, -+ unsigned int cmd_len, -+ unsigned int out_size, ++ unsigned char *cmd, ++ unsigned int cmd_len, + unsigned int in_size, ++ unsigned int out_size, + unsigned char bytefill, -+ int bytecheck) { ++ int bytecheck, ++ unsigned char *sense){ + int result; + int error_code, sense_key, asc, ascq; + + bzero(&d->ccb->csio, sizeof(d->ccb->csio)); + -+ memcpy(d->ccb->csio.cdb_io.cdb_bytes, d->sg_buffer, cmd_len); ++ memcpy(d->ccb->csio.cdb_io.cdb_bytes, cmd, cmd_len); + -+ if (bytecheck && out_size == 0) -+ memset(d->sg_buffer, bytefill, in_size); ++ if (bytecheck && in_size == 0) ++ memset(d->private_data->sg_buffer, bytefill, out_size); + + cam_fill_csio(&d->ccb->csio, + /* retries */ 0, + /* cbfcnp */ NULL, -+ /* flags */ CAM_DEV_QFRZDIS | (out_size ? CAM_DIR_OUT : CAM_DIR_IN), ++ /* flags */ CAM_DEV_QFRZDIS | (in_size ? CAM_DIR_OUT : CAM_DIR_IN), + /* tag_action */ MSG_SIMPLE_Q_TAG, -+ /* data_ptr */ out_size ? d->sg_buffer + cmd_len : d->sg_buffer, ++ /* data_ptr */ in_size ? cmd + cmd_len : d->private_data->sg_buffer, + /* dxfer_len */ out_size ? out_size : in_size, + /* sense_len */ SSD_FULL_SIZE, + /* cdb_len */ cmd_len, + /* timeout */ 60000); /* XXX */ + ++ struct timespec tv1; ++ struct timespec tv2; ++ int tret1=clock_gettime(d->private_data->clock,&tv1); + if ((result = cam_send_ccb(d->dev, d->ccb)) < 0 || + (d->ccb->ccb_h.status & CAM_STATUS_MASK) == 0 /* hack? */) + return TR_EREAD; ++ int tret2=clock_gettime(d->private_data->clock,&tv2); + + if ((d->ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP && + (d->ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_SCSI_STATUS_ERROR) { @@ -121,7 +122,7 @@ + return TR_UNKNOWN; + } + -+ if (d->ccb->csio.dxfer_len != in_size) { ++ if (d->ccb->csio.dxfer_len != out_size) { + errno = EIO; + return TR_EREAD; + } @@ -165,21 +166,76 @@ + break; + } + ++ if(bytecheck && out_size){ ++ long i,flag=0; ++ for(i=in_size;iprivate_data->sg_buffer[i]!=bytefill){ ++ flag=1; ++ break; ++ } ++ ++ if(!flag){ ++ errno=EINVAL; ++ return(TR_ILLEGAL); ++ } ++ } ++ ++ if(tret1<0 || tret2<0){ ++ d->private_data->last_milliseconds=-1; ++ }else{ ++ d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; ++ } ++ + return 0; +} +#endif + -+ - /* Group 1 (10b) command */ + static int test_unit_ready(cdrom_drive *d){ + unsigned char sense[SG_MAX_SENSE]; + unsigned char key, ASC, ASCQ; +@@ -453,6 +581,7 @@ static int test_unit_ready(cdrom_drive *d){ + return 1; + } - static int mode_sense_atapi(cdrom_drive *d,int size,int page){ -@@ -833,30 +960,37 @@ static long scsi_read_map (cdrom_drive * - while(1) { - if((err=map(d,(p?buffer:NULL),begin,sectors))){ - if(d->report_all){ +#ifdef Linux - struct sg_header *sg_hd=(struct sg_header *)d->sg; + static void reset_scsi(cdrom_drive *d){ + int arg,tries=0; + d->enable_cdda(d,0); +@@ -472,6 +601,29 @@ static void reset_scsi(cdrom_drive *d){ + d->enable_cdda(d,1); + } + +#elif defined(__FreeBSD__) ++static void reset_scsi(cdrom_drive *d) { ++ d->enable_cdda(d,0); ++ ++ d->ccb->ccb_h.func_code = XPT_RESET_DEV; ++ d->ccb->ccb_h.timeout = 5000; ++ ++ cdmessage(d, "sending SCSI reset... "); ++ if (cam_send_ccb(d->dev, d->ccb)) { ++ cdmessage(d, "error sending XPT_RESET_DEV CCB"); ++ } else { ++ ++ if (((d->ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) || ++ ((d->ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_BDR_SENT)) ++ cdmessage(d,"OK\n"); ++ else ++ cdmessage(d,"FAILED\n"); ++ } ++ ++ d->enable_cdda(d,1); ++} ++#endif ++ + static int mode_sense_atapi(cdrom_drive *d,int size,int page){ + unsigned char sense[SG_MAX_SENSE]; + unsigned char cmd[10]= {0x5A, /* MODE_SENSE */ +@@ -1074,29 +1226,35 @@ static long scsi_read_map (cdrom_drive *d, void *p, lo + + if((err=map(d,(p?buffer:NULL),begin,sectors,sense))){ + if(d->report_all){ ++#ifdef __FreeBSD__ + int error_code, sense_key, asc, ascq; +#endif char b[256]; @@ -194,9 +250,9 @@ +#endif sprintf(b," Sense key: %x ASC: %x ASCQ: %x\n", +#ifdef Linux - (int)(sg_hd->sense_buffer[2]&0xf), - (int)(sg_hd->sense_buffer[12]), - (int)(sg_hd->sense_buffer[13])); + (int)(sense[2]&0xf), + (int)(sense[12]), + (int)(sense[13])); +#elif defined(__FreeBSD__) + sense_key, asc, ascq); +#endif @@ -212,23 +268,23 @@ - fprintf(stderr,"scsi_read error: sector=%ld length=%ld retry=%d\n", - begin,sectors,retry_count); - fprintf(stderr," Sense key: %x ASC: %x ASCQ: %x\n", -- (int)(sg_hd->sense_buffer[2]&0xf), -- (int)(sg_hd->sense_buffer[12]), -- (int)(sg_hd->sense_buffer[13])); +- (int)(sense[2]&0xf), +- (int)(sense[12]), +- (int)(sense[13])); - fprintf(stderr," Transport error: %s\n",strerror_tr[err]); - fprintf(stderr," System error: %s\n",strerror(errno)); } - - if(!d->error_retry)return(-7); -@@ -1307,6 +1441,7 @@ static void check_fua_bit(cdrom_drive *d - return; + + switch(errno){ +@@ -1583,6 +1741,7 @@ static void check_cache(cdrom_drive *d){ + } } +#ifdef Linux static int check_atapi(cdrom_drive *d){ int atapiret=-1; - int fd = d->cdda_fd; /* this is the correct fd (not ioctl_fd), as the -@@ -1333,6 +1468,53 @@ static int check_atapi(cdrom_drive *d){ + int fd = d->cdda_fd; /* check the device we'll actually be using to read */ +@@ -1614,6 +1773,53 @@ static int check_atapi(cdrom_drive *d){ } } @@ -280,34 +336,21 @@ +#endif + static int check_mmc(cdrom_drive *d){ - char *b; + unsigned char *b; cdmessage(d,"\nChecking for MMC style command set...\n"); -@@ -1379,6 +1561,7 @@ static void check_exceptions(cdrom_drive +@@ -1660,6 +1866,7 @@ static void check_exceptions(cdrom_drive *d,exception } } +#ifdef Linux /* request vendor brand and model */ unsigned char *scsi_inquiry(cdrom_drive *d){ - memcpy(d->sg_buffer,(char[]){ 0x12,0,0,0,56,0},6); -@@ -1389,6 +1572,7 @@ unsigned char *scsi_inquiry(cdrom_drive + unsigned char sense[SG_MAX_SENSE]; +@@ -1671,6 +1878,7 @@ unsigned char *scsi_inquiry(cdrom_drive *d){ } - return (d->sg_buffer); + return (d->private_data->sg_buffer); } +#endif - int scsi_init_drive(cdrom_drive *d){ -@@ -1458,8 +1642,12 @@ int scsi_init_drive(cdrom_drive *d){ - check_fua_bit(d); - - d->error_retry=1; -+#ifdef Linux - d->sg=realloc(d->sg,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128); - d->sg_buffer=d->sg+SG_OFF; -+#elif defined(__FreeBSD__) -+ d->sg_buffer = realloc(d->sg_buffer, d->nsectors * CD_FRAMESIZE_RAW); -+#endif - d->report_all=1; - return(0); - } + int ret; --- audio/cdparanoia/files/patch-interface_utils.h 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-interface_utils.h 2019-07-23 19:59:50.890294000 +0200 @@ -3,7 +3,7 @@ RCS file: /home/cvs/cdparanoia/interface/utils.h,v retrieving revision 1.1.1.1 retrieving revision 1.3 ---- interface/utils.h.orig 2000-04-19 22:41:04 UTC +--- interface/utils.h.orig 2008-08-14 13:56:20 UTC +++ interface/utils.h @@ -1,4 +1,9 @@ +#ifdef LINUX @@ -15,3 +15,39 @@ #include #include #include +@@ -111,7 +116,7 @@ static void cderror(cdrom_drive *d,const char *s){ + d->errorbuf=catstring(d->errorbuf,s); + break; + case CDDA_MESSAGE_FORGETIT: +- default: ++ default:break;break;break; + break; + } + } +@@ -127,7 +132,7 @@ static void cdmessage(cdrom_drive *d,const char *s){ + d->messagebuf=catstring(d->messagebuf,s); + break; + case CDDA_MESSAGE_FORGETIT: +- default: ++ default:break;break;break; + break; + } + } +@@ -170,7 +175,7 @@ static void idperror(int messagedest,char **messages,c + } + break; + case CDDA_MESSAGE_FORGETIT: +- default: ++ default:break;break;break; + break; + } + } +@@ -207,7 +212,7 @@ static void idmessage(int messagedest,char **messages, + } + break; + case CDDA_MESSAGE_FORGETIT: +- default: ++ default:break;break;break; + break; + } + } --- audio/cdparanoia/files/patch-main.c 1970-01-01 01:00:00.000000000 +0100 +++ audio/cdparanoia/files/patch-main.c 2019-07-25 23:42:56.723094000 +0200 @@ -0,0 +1,15 @@ +--- main.c.orig 2019-07-23 18:12:13 UTC ++++ main.c +@@ -588,10 +588,10 @@ static void callback(long inpos, int function){ + buffer[aheadposition+19]='>'; + } + +- fprintf(stderr,buffer); ++ fprintf(stderr,"%s",buffer); + + if (logfile != NULL && function==-1) { +- fprintf(logfile,buffer+1); ++ fprintf(logfile,"%s",buffer+1); + fprintf(logfile,"\n\n"); + fflush(logfile); + } --- audio/cdparanoia/files/patch-paranoia_Makefile.in 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-paranoia_Makefile.in 2019-07-23 19:59:50.890713000 +0200 @@ -1,6 +1,6 @@ ---- paranoia/Makefile.in.orig 1999-12-14 04:28:04 UTC +--- paranoia/Makefile.in.orig 2008-09-04 19:02:47 UTC +++ paranoia/Makefile.in -@@ -24,18 +24,14 @@ OFILES = paranoia.o p_block.o overlap.o +@@ -24,17 +24,13 @@ OFILES = paranoia.o p_block.o overlap.o gap.o isort.o LIBS = ../interface/libcdda_interface.a -lm export VERSION @@ -16,10 +16,9 @@ -slib: $(MAKE) lessmessy $(MAKE) libcdda_paranoia.so CFLAGS="$(OPT) -fpic" - ++ +debug: + $(MAKE) libcdda_paranoia.a CFLAGS="$(DEBUG)" -+ + #test: $(TFILES) # - --- audio/cdparanoia/files/patch-paranoia_cdda__paranoia.h 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-paranoia_cdda__paranoia.h 2019-07-23 19:59:50.891094000 +0200 @@ -3,9 +3,9 @@ RCS file: /home/cvs/cdparanoia/paranoia/cdda_paranoia.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 ---- paranoia/cdda_paranoia.h.orig 2001-03-24 01:15:47 UTC +--- paranoia/cdda_paranoia.h.orig 2008-09-11 20:09:40 UTC +++ paranoia/cdda_paranoia.h -@@ -34,6 +34,8 @@ +@@ -35,6 +35,8 @@ #define PARANOIA_MODE_NEVERSKIP 32 #ifndef CDP_COMPILE --- audio/cdparanoia/files/patch-paranoia_overlap.c 1970-01-01 01:00:00.000000000 +0100 +++ audio/cdparanoia/files/patch-paranoia_overlap.c 2019-07-23 20:07:14.412707000 +0200 @@ -0,0 +1,20 @@ +--- paranoia/overlap.c.orig 2019-07-23 18:06:02 UTC ++++ paranoia/overlap.c +@@ -107,7 +107,7 @@ void offset_adjust_settings(cdrom_paranoia *p, void(*c + sector, frob it. We just want a little hysteresis [sp?]*/ + long av=(p->stage2.offpoints?p->stage2.offaccum/p->stage2.offpoints:0); + +- if(abs(av)>p->dynoverlap/4){ ++ if(labs(av)>p->dynoverlap/4){ + av=(av/MIN_SECTOR_EPSILON)*MIN_SECTOR_EPSILON; + + if(callback)(*callback)(ce(p->root.vector),PARANOIA_CB_DRIFT); +@@ -207,7 +207,7 @@ void offset_add_value(cdrom_paranoia *p,offsets *o,lon + if(o->offpoints!=-1){ + + /* Track the average magnitude of jitter (in either direction) */ +- o->offdiff+=abs(value); ++ o->offdiff+=labs(value); + o->offpoints++; + o->newpoints++; + --- audio/cdparanoia/files/patch-version.h 2016-07-26 18:51:15.000000000 +0200 +++ audio/cdparanoia/files/patch-version.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,17 +0,0 @@ -Index: version.h -=================================================================== -RCS file: /home/cvs/cdparanoia/version.h,v -retrieving revision 1.1.1.1 -retrieving revision 1.2 ---- version.h.orig 2001-03-24 01:15:45 UTC -+++ version.h -@@ -8,6 +8,8 @@ - - - #define VERSION "cdparanoia III release 9.8 (March 23, 2001)\n"\ -- "(C) 2001 Monty and Xiphophorus\n\n"\ -+ "(C) 2001 Monty and Xiphophorus\n"\ -+ "FreeBSD porting (c) 2003\n"\ -+ "\tSimon 'corecode' Schubert \n\n"\ - "Report bugs to paranoia@xiph.org\n"\ - "http://www.xiph.org/paranoia/\n" --- audio/cdparanoia/pkg-plist 2014-02-09 13:25:56.000000000 +0100 +++ audio/cdparanoia/pkg-plist 2019-07-23 19:59:50.892213000 +0200 @@ -4,9 +4,9 @@ lib/libcdda_interface.a lib/libcdda_interface.so lib/libcdda_interface.so.0 -lib/libcdda_interface.so.0.9.8 +lib/libcdda_interface.so.0.10.2 lib/libcdda_paranoia.a lib/libcdda_paranoia.so lib/libcdda_paranoia.so.0 -lib/libcdda_paranoia.so.0.9.8 +lib/libcdda_paranoia.so.0.10.2 man/man1/cdparanoia.1.gz