$NetBSD: patch-aa,v 1.4 2011/10/02 01:20:55 dholland Exp $ - netbsd/dragonfly cdrom support - fix LP64 problems --- cdromlow.c.orig 2001-10-27 09:23:21.000000000 +0000 +++ cdromlow.c @@ -9,7 +9,7 @@ #include #include #include -#if !defined( __FreeBSD__) && !defined(__svr4__ ) +#if !defined( __FreeBSD__) && !defined(__svr4__ ) && !defined(__NetBSD__) && !defined(__DragonFly__) # include #else # include @@ -37,7 +37,7 @@ /* we provide some macro mappings here. FreeBSD structs are a bit * different to those used by Linux so we will use macros to compensate that */ -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) /* Needed by FreeBSD */ # define CDROM_DATA_TRACK 4 @@ -46,19 +46,35 @@ # define CD_FRAMESIZE_RAW 2352 # define CDROM_LBA CD_LBA_FORMAT # define CDROMREADTOCHDR CDIOREADTOCHEADER +#ifdef __NetBSD__ +# define CDROMREADTOCENTRY CDIOREADTOCENTRIES +#else # define CDROMREADTOCENTRY CDIOREADTOCENTRY +#endif # define cdromlow_definecdromheader struct ioc_toc_header +#ifdef __NetBSD__ +# define cdromlow_definecdromhentry struct ioc_read_toc_entry +#else # define cdromlow_definecdromhentry struct ioc_read_toc_single_entry +#endif /* referencing the TOC header */ # define cdromlow_tochdr_firstt starting_track # define cdromlow_tochdr_lastt ending_track /* referencing TOC entries */ +#ifdef __NetBSD__ +# define cdromlow_tocent_track starting_track +#else # define cdromlow_tocent_track track +#endif # define cdromlow_tocent_format address_format +#ifdef __NetBSD__ +# define cdromlow_tocent_addr data->addr +#else # define cdromlow_tocent_addr entry.addr +#endif #elif __svr4__ # define CD_FRAMESIZE 2048 # define CD_FRAMESIZE_RAW 2352 @@ -94,15 +110,14 @@ #define CDROMLOW_MAXCDTEXTOUT 16384 -typedef struct +struct cdromlow_tochandle { char *cdda2wavoutput; char *devicename; int filedescriptor; -} -cdromlow_tochandle; +}; -int cdromlow_gettochandle(const char *device) +cdromlow_tochandle *cdromlow_gettochandle(const char *device) { cdromlow_tochandle *handle=(cdromlow_tochandle*)malloc(sizeof(cdromlow_tochandle)); /* no cd text output is generated until needed */ @@ -112,12 +127,11 @@ int cdromlow_gettochandle(const char *de #ifdef DEBUG printf("cdromlow_gettochandle result is %i\n",(int)handle); #endif - return (int)handle; + return handle; }; -void cdromlow_closetochandle(int handle) +void cdromlow_closetochandle(cdromlow_tochandle *info) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; /* free cd text output if it was generated */ if (info->cdda2wavoutput) free (info->cdda2wavoutput); @@ -130,14 +144,18 @@ void cdromlow_closetochandle(int handle) /* reimplemented using direct cdrom access: * does the current cd have one or more data tracks ? * * returns -1 or data track of cd */ -int cdromlow_hasdatatrack(int handle) +int cdromlow_hasdatatrack(cdromlow_tochandle *info) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; cdromlow_definecdromheader header; cdromlow_definecdromhentry entry; int x; int hasdatatrack=-1; +#ifdef __NetBSD__ + struct cd_toc_entry entrydata; + entry.data = &entrydata; + entry.data_len = sizeof(entrydata); +#endif if (info->filedescriptor!=-1) { @@ -147,8 +165,12 @@ int cdromlow_hasdatatrack(int handle) entry.cdromlow_tocent_track=x; entry.cdromlow_tocent_format=CDROM_LBA; ioctl(info->filedescriptor,CDROMREADTOCENTRY,&entry); -#ifndef __FreeBSD__ +#if !defined(__FreeBSD__) && !defined(__DragonFly__) +#ifdef __NetBSD__ + if (entry.data->control & CDROM_DATA_TRACK) +#else if (entry.cdte_ctrl&CDROM_DATA_TRACK) +#endif #else if (entry.entry.control & CDROM_DATA_TRACK) #endif @@ -166,9 +188,8 @@ int cdromlow_hasdatatrack(int handle) ; /* return number of tracks on cd,reimplemented using ioctl()s */ -int cdromlow_tracks(int handle) +int cdromlow_tracks(cdromlow_tochandle *info) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; cdromlow_definecdromheader header; int tracknum; @@ -186,16 +207,20 @@ int cdromlow_tracks(int handle) ; /* returns the offset of a track's starting position in LBA format */ -int cdromlow_trackoffset(int handle,int num) +int cdromlow_trackoffset(cdromlow_tochandle *info,int num) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; cdromlow_definecdromhentry entry; int offset=-1; +#ifdef __NetBSD__ + struct cd_toc_entry entrydata; + entry.data = &entrydata; + entry.data_len = sizeof(entrydata); +#endif if (info->filedescriptor!=-1) { /* Return offset of leadout if track > last track is requested */ - if (num>cdromlow_tracks(handle)) + if (num>cdromlow_tracks(info)) entry.cdromlow_tocent_track=CDROM_LEADOUT; else entry.cdromlow_tocent_track=num; @@ -216,13 +241,19 @@ int cdromlow_trackoffset(int handle,int ; /* return tracksize of track num in sectors (LBA) */ -int cdromlow_tracksize_sectors(int handle,int num) +int cdromlow_tracksize_sectors(cdromlow_tochandle *info,int num) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; cdromlow_definecdromhentry track; cdromlow_definecdromhentry tracknext; int tracksize; int ok=1; +#ifdef __NetBSD__ + struct cd_toc_entry trackdata, tracknextdata; + track.data = &trackdata; + track.data_len = sizeof(trackdata); + tracknext.data = &tracknextdata; + tracknext.data_len = sizeof(tracknextdata); +#endif tracksize=0; if (info->filedescriptor!=-1) @@ -232,7 +263,7 @@ int cdromlow_tracksize_sectors(int handl if (ioctl(info->filedescriptor,CDROMREADTOCENTRY,&track)==-1) ok=0; - if (num==cdromlow_tracks(handle)) + if (num==cdromlow_tracks(info)) tracknext.cdromlow_tocent_track=CDROM_LEADOUT; else tracknext.cdromlow_tocent_track=num+1; @@ -251,14 +282,14 @@ int cdromlow_tracksize_sectors(int handl ; /* return tracksize for audiotrack n in bytes,reimplemented using ioctl()s */ -int cdromlow_tracksize(int handle,int num) +int cdromlow_tracksize(cdromlow_tochandle *handle,int num) { return cdromlow_tracksize_sectors(handle,num)*CD_FRAMESIZE_RAW; } ; /* return tracksize of datatrack in bytes,reimplemented using ioctl()s */ -int cdromlow_datatracksize(int handle,int tracknum) +int cdromlow_datatracksize(cdromlow_tochandle *handle,int tracknum) { if (cdromlow_hasdatatrack(handle)!=-1) return cdromlow_tracksize_sectors(handle, @@ -270,14 +301,17 @@ int cdromlow_datatracksize(int handle,in ; /* return cddb number of cdrom */ -int cdromlow_cddbnumber(int handle) +int cdromlow_cddbnumber(cdromlow_tochandle *info) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; - cdromlow_definecdromheader header; cdromlow_definecdromhentry entry; int x,secs; int cddbnum=0; +#ifdef __NetBSD__ + struct cd_toc_entry entrydata; + entry.data = &entrydata; + entry.data_len = sizeof(entrydata); +#endif cddbnum=0; if (info->filedescriptor!=-1) @@ -311,12 +345,16 @@ int cdromlow_cddbnumber(int handle) ; /* return the tracktype of specified track */ -cdromlow_tracktype cdromlow_gettracktype(int handle,int num) +cdromlow_tracktype cdromlow_gettracktype(cdromlow_tochandle *info,int num) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; cdromlow_definecdromhentry track; int ok=1; cdromlow_tracktype result=TRACKTYPE_UNKNOWN; +#ifdef __NetBSD__ + struct cd_toc_entry trackdata; + track.data = &trackdata; + track.data_len = sizeof(trackdata); +#endif if (info->filedescriptor!=-1) { @@ -324,8 +362,12 @@ cdromlow_tracktype cdromlow_gettracktype track.cdromlow_tocent_format=CDROM_LBA; if (ioctl(info->filedescriptor,CDROMREADTOCENTRY,&track)==-1) ok=0; -#ifndef __FreeBSD__ +#if !defined(__FreeBSD__) && !defined(__DragonFly__) +#ifdef __NetBSD__ + if (track.data->control & CDROM_DATA_TRACK) +#else if (track.cdte_ctrl&CDROM_DATA_TRACK) +#endif #else if (track.entry.control & CDROM_DATA_TRACK) #endif @@ -338,9 +380,8 @@ cdromlow_tracktype cdromlow_gettracktype } ; -void cdromlow_createcdtextoutput(int handle) +void cdromlow_createcdtextoutput(cdromlow_tochandle *info) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; if (!info->cdda2wavoutput) { char *call=varman_getvar_copy(global_defs, @@ -362,13 +403,12 @@ void cdromlow_createcdtextoutput(int han }; }; -char *cdromlow_getcdtext(int handle, int num,const char *parse) +char *cdromlow_getcdtext(cdromlow_tochandle *info, int num,const char *parse) { - cdromlow_tochandle *info=(cdromlow_tochandle*)handle; char buffer[256]; char *func=(char*)malloc(((parse)?strlen(parse):0)+11); - cdromlow_createcdtextoutput(handle); + cdromlow_createcdtextoutput(info); strcpy(buffer,""); strcpy(func,((parse)?parse:"")); @@ -390,22 +430,22 @@ char *cdromlow_getcdtext(int handle, int return (strlen(buffer)?strdup(buffer):NULL); }; -char *cdromlow_gettitle(int handle,int num) +char *cdromlow_gettitle(cdromlow_tochandle *handle,int num) { return cdromlow_getcdtext(handle,num,varman_getvar(global_defs,"audiotrack_parsecdtext_title")); }; -char *cdromlow_getperformer(int handle,int num) +char *cdromlow_getperformer(cdromlow_tochandle *handle,int num) { return cdromlow_getcdtext(handle,num,varman_getvar(global_defs,"audiotrack_parsecdtext_performer")); }; -char *cdromlow_getdisctitle(int handle) +char *cdromlow_getdisctitle(cdromlow_tochandle *handle) { return cdromlow_getcdtext(handle,0,varman_getvar(global_defs,"audiotrack_parsecdtext_cdtitle")); }; -char *cdromlow_getdiscperformer(int handle) +char *cdromlow_getdiscperformer(cdromlow_tochandle *handle) { return cdromlow_getcdtext(handle,0,varman_getvar(global_defs,"audiotrack_parsecdtext_cdperformer")); };