diff options
author | Adam Weinberger <adamw@FreeBSD.org> | 2014-07-28 14:12:36 +0000 |
---|---|---|
committer | Adam Weinberger <adamw@FreeBSD.org> | 2014-07-28 14:12:36 +0000 |
commit | 6df3e23245b2c3793f24e4c42dd330d59419494c (patch) | |
tree | e86901dd11e5a970cf6211165d2b26dbe637e186 /audio/dagrab/files/patch-dagrab.c | |
parent | lang/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.c | 262 |
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; |