summaryrefslogtreecommitdiff
path: root/audio/dagrab/files/patch-dagrab.c
diff options
context:
space:
mode:
authorAdam Weinberger <adamw@FreeBSD.org>2014-07-28 14:12:36 +0000
committerAdam Weinberger <adamw@FreeBSD.org>2014-07-28 14:12:36 +0000
commit6df3e23245b2c3793f24e4c42dd330d59419494c (patch)
treee86901dd11e5a970cf6211165d2b26dbe637e186 /audio/dagrab/files/patch-dagrab.c
parentlang/squeak: Claimed fix for PowerPC (diff)
Rename audio/ patch-xy patches to reflect the files they modify.
Diffstat (limited to 'audio/dagrab/files/patch-dagrab.c')
-rw-r--r--audio/dagrab/files/patch-dagrab.c262
1 files changed, 262 insertions, 0 deletions
diff --git a/audio/dagrab/files/patch-dagrab.c b/audio/dagrab/files/patch-dagrab.c
new file mode 100644
index 000000000000..e61d60eca151
--- /dev/null
+++ b/audio/dagrab/files/patch-dagrab.c
@@ -0,0 +1,262 @@
+--- dagrab.c.orig Sat Feb 19 17:32:46 2000
++++ dagrab.c Tue Nov 18 00:05:29 2003
+@@ -94,26 +94,21 @@
+ #include <string.h>
+ #include <errno.h>
+ #include <fcntl.h>
+-#include <getopt.h>
+ #include <dirent.h>
+ #include <netdb.h>
+-#include <unistd.h>
+ #include <pwd.h>
+ #include <ctype.h>
+-#define __need_timeval /* needed by glibc */
+-#include <time.h>
+-#include <linux/cdrom.h>
+-#ifdef USE_UCDROM
+-#include <linux/ucdrom.h>
+-#endif
+-#include <sys/vfs.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
++#include <sys/cdio.h>
++#include <sys/cdrio.h>
++#include <sys/param.h>
++#include <sys/mount.h>
+ #define CDDEVICE "/dev/cdrom"
+-#define N_BUF 8
++#define N_BUF 12
+ #define OVERLAP 2
+ #define KEYLEN 12
+ #define OFS 12
+@@ -123,12 +118,18 @@
+ #define D_MODE 0660
+ #define CDDB_MAX 65535
+ #define CDDB_PORT 888
++#ifndef CDDB_PATH
+ #define CDDB_PATH "/usr/lib/X11/xmcd/cddb"
++#endif
+ #define CDDB_HOST "freedb.freedb.org"
+ //#define USE_CDDB (opt_save||opt_name)
+ #define USE_CDDB opt_cddb
+ #define PROGNAME "dagrab"
+ #define VERSION "0.3.5"
++#define CD_MSF_OFFSET 150
++#define CDROM_DATA_TRACK 4
++#define CDROM_LEADOUT 0xaa
++#define CD_FRAMESIZE_RAW 2352
+ #define KW_TRACK 0
+ #define KW_FULLD 1
+ #define KW_AUTHOR 2
+@@ -206,16 +207,20 @@
+
+ struct Wavefile cd_newave(unsigned size)
+ {
+- struct Wavefile dummy={{'R','I','F','F'},0x24+size,{'W','A','V','E'},
+- {'f','m','t',' '},0x10,1,2,44100,4*44100,4,16,
+- {'d','a','t','a'},size };
+- /*dummy.Dlen=size;
+- dummy.Rlen=0x24+size;*/
+- dummy.sample_rate = opt_srate;
+- dummy.channel = 2 - opt_mono;
+- dummy.byte_rate = opt_srate << dummy.channel;
+- dummy.align = dummy.channel * dummy.sample >> 3;
+- dummy.Dlen >>= opt_mono;
++ struct Wavefile dummy={{'R','I','F','F'}, /* Rid */
++ 0x24 + (size >> opt_mono), /* Rlen */
++ {'W','A','V','E'}, /* Wid */
++ {'f','m','t',' '}, /* Fid */
++ 0x10, /* Flen */
++ 1, /* tag */
++ 2 - opt_mono, /* channel */
++ opt_srate, /* sample_rate */
++ opt_srate << (2 - opt_mono), /* byte_rate */
++ 16 * (2 - opt_mono) >> 3, /* align */
++ 16, /* sample */
++ {'d','a','t','a'}, /* Did */
++ size >> opt_mono /* Dlen */
++ };
+ return dummy;
+ }
+
+@@ -226,16 +231,16 @@
+ return buf;
+ }
+
+-int cd_get_tochdr(struct cdrom_tochdr *Th)
++int cd_get_tochdr(struct ioc_toc_header *Th)
+ {
+- return ioctl(cdrom_fd,CDROMREADTOCHDR,Th);
++ return ioctl(cdrom_fd,CDIOREADTOCHEADER,Th);
+ }
+
+-int cd_get_tocentry(int trk,struct cdrom_tocentry *Te,int mode)
++int cd_get_tocentry(int trk,struct ioc_read_toc_single_entry *Te,int mode)
+ {
+- Te->cdte_track=trk;
+- Te->cdte_format=mode;
+- return ioctl(cdrom_fd,CDROMREADTOCENTRY,Te);
++ Te->track=trk;
++ Te->address_format=mode;
++ return ioctl(cdrom_fd,CDIOREADTOCENTRY,Te);
+ }
+
+ void cd_read_audio(int lba,int num,char *buf)
+@@ -244,16 +249,27 @@
+ /*NOTE: if num>CDROM_NBLOCKS_BUFFER as defined in ide_cd.c (8 in linux 2.0.32)
+ jitter correction may be required inside the block. */
+ {
+- struct cdrom_read_audio ra;
++/* CDIOCREADAUDIO has been removed in FreeBSD 5.1-CURRENT */
++#if defined (__FreeBSD__) && (__FreeBSD_version >= 501106)
++ int bsize = 2352;
++ if(ioctl(cdrom_fd,CDRIOCSETBLOCKSIZE,&bsize) == -1) {
++ fprintf(stderr, "setblocksize");
++ exit(1);
++ }
++ if (pread(cdrom_fd, buf, num*bsize, lba*bsize) != num*bsize){
++ fprintf(stderr,"\n%s: read device at lba %d length %d: %s\n",
++ progname,lba,num,strerror(errno));
++#else
++ struct ioc_read_audio ra;
+
+- ra.addr.lba=lba;
+- ra.addr_format=CDROM_LBA;
++ ra.address.lba=lba;
++ ra.address_format=CD_LBA_FORMAT;
+ ra.nframes=num;
+- ra.buf=buf;
+- if(ioctl(cdrom_fd,CDROMREADAUDIO,&ra)){
+- /*fprintf(stderr,"%s: read raw ioctl failed \n",progname);*/
++ ra.buffer=buf;
++ if(ioctl(cdrom_fd,CDIOCREADAUDIO,&ra)){
+ fprintf(stderr,"\n%s: read raw ioctl failed at lba %d length %d: %s\n",
+ progname,lba,num,strerror(errno));
++#endif
+ exit(1);
+ }
+ }
+@@ -471,7 +487,7 @@
+ DIR *d;
+ struct dirent *e;
+ char *id2,*p,*cddb,*loc;
+- int i,cddbs,locs;
++ int i,cddbs,locs=0;
+ char id[12];
+ char *path;
+ char path2[500];
+@@ -645,10 +661,10 @@
+ int cd_getinfo(char *cd_dev,struct cd_trk_list *tl)
+ {
+ int i;
+- struct cdrom_tochdr Th;
+- struct cdrom_tocentry Te;
++ struct ioc_toc_header Th;
++ struct ioc_read_toc_single_entry Te;
+
+- if ((cdrom_fd=open(cd_dev,O_RDONLY|O_NONBLOCK))==-1){
++ if ((cdrom_fd=open(cd_dev,O_RDONLY))==-1){
+ fprintf(stderr,"%s: error opening device %s\n",progname,cd_dev);
+ exit(1);
+ }
+@@ -656,7 +672,7 @@
+ fprintf(stderr,"%s: read TOC ioctl failed: %s\n",progname,strerror(errno));
+ exit(1);
+ }
+- tl->min=Th.cdth_trk0;tl->max=Th.cdth_trk1;
++ tl->min=Th.starting_track;tl->max=Th.ending_track;
+ if((tl->starts=(int *)malloc((tl->max-tl->min+2)*sizeof(int)))==NULL){
+ fprintf(stderr,"%s: list data allocation failed\n",progname);
+ exit(1);
+@@ -668,21 +684,21 @@
+
+ for (i=tl->min;i<=tl->max;i++)
+ {
+- if(cd_get_tocentry(i,&Te,CDROM_LBA)){
++ if(cd_get_tocentry(i,&Te,CD_LBA_FORMAT)){
+ fprintf(stderr,"%s: read TOC entry ioctl failed: %s\n",
+ progname,strerror(errno));
+ exit(1);
+ }
+- tl->starts[i-tl->min]=Te.cdte_addr.lba;
+- tl->types[i-tl->min]=Te.cdte_ctrl&CDROM_DATA_TRACK;
++ tl->starts[i-tl->min]=ntohl(Te.entry.addr.lba);
++ tl->types[i-tl->min]=Te.entry.control&CDROM_DATA_TRACK;
+ }
+ i=CDROM_LEADOUT;
+- if(cd_get_tocentry(i,&Te,CDROM_LBA)){
++ if(cd_get_tocentry(i,&Te,CD_LBA_FORMAT)){
+ fprintf(stderr,"%s: read TOC entry ioctl failed: %s\n",progname,strerror(errno));
+ exit(1);
+ }
+- tl->starts[tl->max-tl->min+1]=Te.cdte_addr.lba;
+- tl->types[tl->max-tl->min+1]=Te.cdte_ctrl&CDROM_DATA_TRACK;
++ tl->starts[tl->max-tl->min+1]=ntohl(Te.entry.addr.lba);
++ tl->types[tl->max-tl->min+1]=Te.entry.control&CDROM_DATA_TRACK;
+
+ i=cddb_main(tl);
+ if(i==-1) {
+@@ -796,6 +812,7 @@
+ struct Wavefile header;
+ int fd,bytes,i,n,q,space;
+ int bcount, sc, missing, speed = 0, ldp, now;
++ ssize_t wlen;
+
+ if(tn<tl->min || tn>tl->max) return (-1);
+ space = ((tl->starts[tn-tl->min+1]-tl->starts[tn-tl->min]) *
+@@ -879,8 +896,10 @@
+ d = p1[c];
+ buf3[c] = ((short)(d&65535) + (short)(d>>16)) >> 1;
+ }
+- write(fd,buf3,n>>1);
+- } else if(write(fd,p1,n)==-1){
++ wlen = write(fd,buf3,n>>1);
++ } else
++ wlen = write(fd,p1,n);
++ if (wlen == -1){
+ fprintf(stderr,"%s: error writing wave file %s: %s\n",
+ progname,nam,strerror(errno));
+ exit(1);
+@@ -896,7 +915,17 @@
+ /* dump last bytes */
+ if (bytes<(tl->starts[tn+1]-tl->starts[tn])*CD_FRAMESIZE_RAW){
+ n=(tl->starts[tn+1]-tl->starts[tn])*CD_FRAMESIZE_RAW-bytes;
+- if(write(fd,p1,n)==-1){
++ if(opt_mono) {
++ register int c, d;
++ for(c = 0; c < (n>>2); c++) {
++ d = p1[c];
++ buf3[c] = ((short)(d&65535) + (short)(d>>16)) >> 1;
++ }
++ wlen = write(fd,buf3,n>>1);
++ } else
++ wlen = write(fd,p1,n);
++
++ if(wlen==-1){
+ fprintf(stderr,"%s: error writing wave file %s: %s\n",progname,nam,strerror(errno));
+ exit(1);
+ };
+@@ -961,7 +990,7 @@
+ int main(int ac,char **av)
+ {
+ int i,l,disp_TOC=0;
+- char c;
++ int c;
+ int all_tracks=0;
+ struct cd_trk_list tl;
+ char cd_dev[BLEN+1]=CDDEVICE;
+@@ -969,10 +998,8 @@
+ char filter[BLEN+1] = "";
+ char path[500];
+ FILE *f;
+-
+ progname=av[0];
+- optind=0;
+- while((c=getopt(ac,av,"d:f:n:o:k:r:t:m:e:H:P:D:pshaivCSN"))!=EOF){
++ while((c=getopt(ac,av,"pshaivCSNd:f:n:o:k:r:t:m:e:H:P:D:"))!=-1){
+ switch(c){
+ case 'h':usage();break;
+ case 'd':CPARG(cd_dev);break;