$NetBSD: patch-ae,v 1.10 2018/09/27 15:29:06 triaxx Exp $ Fix wrong asumption that getopt_long is implemented everywhere. --- main.c.orig 2008-09-11 21:11:02.000000000 +0000 +++ main.c @@ -25,7 +25,10 @@ #include #include #include +#ifdef GETOPT_LONG #include +#endif +#include #include #include #include @@ -204,6 +207,7 @@ VERSION"\n" " cdparanoia [options] [outfile]\n\n" "OPTIONS:\n" +#ifdef GETOPT_LONG " -A --analyze-drive : run and log a complete analysis of drive\n" " caching, timing and reading behavior;\n" " verifies that cdparanoia is correctly\n" @@ -239,6 +243,7 @@ VERSION"\n" " to n sectors\n" " -o --force-search-overlap : force minimum overlap search during\n" " verification to n sectors\n" +#if !(defined(__APPLE__) && defined(__MACH__)) " -d --force-cdrom-device : use specified device; disallow \n" " autosense\n" " -k --force-cooked-device : use specified cdrom device and force\n" @@ -248,6 +253,7 @@ VERSION"\n" " -g --force-generic-device : use specified generic scsi device and\n" " force use of the old SG kernel\n" " interface. -g cannot be used with -k.\n" +#endif " -S --force-read-speed : read from device at specified speed; by\n" " default, cdparanoia sets drive to full\n" " speed.\n" @@ -267,6 +273,52 @@ VERSION"\n" " -Z --disable-paranoia : disable all paranoia checking\n" " -Y --disable-extra-paranoia : only do cdda2wav-style overlap checking\n" " -X --abort-on-skip : abort on imperfect reads/skips\n\n" +#else +" -v : extra verbose operation\n" +" -q : quiet operation\n" +" -e : force output of progress information to\n" +" stderr (for wrapper scripts)\n" +" -V : print version info and quit\n" +" -Q : autosense drive, query disc and quit\n" +" -B : 'batch' mode (saves each track to a seperate file.\n" +" -s : do an exhaustive search for drive\n" +" -h : print help\n\n" + +" -p : output raw 16 bit PCM in host byte order\n" +" -r : output raw 16 bit little-endian PCM\n" +" -R : output raw 16 bit big-endian PCM\n" +" -w : output as WAV file (default)\n" +" -f : output as AIFF file\n" +" -a : output as AIFF-C file\n" +" -i : output human readable ripping info to file\n\n" + +" -c : force treating drive as little endian\n" +" -C : force treating drive as big endian\n" +" -n : force default number of sectors in read to n sectors\n" +" -o : force minimum overlap search during\n" +" verification to n sectors\n" +#if !(defined(__APPLE__) && defined(__MACH__)) +" -d : use specified device; disallow autosense\n" +" -g : use specified generic scsi device\n" +#endif +" -S : read from device at specified speed\n" +" -t : Add sectors to the values reported\n" +" when addressing tracks. May be negative\n" +" -T : Assume that the beginning offset of\n" +" track 1 as reported in the TOC will be\n" +" addressed as LBA 0. Necessary for some\n" +" Toshiba drives to get track boundaries\n" +" correct\n" +" -O : Add samples to the offset when\n" +" reading data. May be negative.\n" +" -z[=n] : never accept any less than perfect\n" +" data reconstruction (don't allow 'V's)\n" +" but if [n] is given, skip after [n]\n" +" retries without progress.\n" +" -Z : disable all paranoia checking\n" +" -Y : only do cdda2wav-style overlap checking\n" +" -X : abort on imperfect reads/skips\n\n" +#endif "OUTPUT SMILIES:\n" " :-) Normal operation, low/no jitter\n" @@ -588,10 +640,10 @@ static void callback(long inpos, int fun 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); } @@ -606,6 +658,7 @@ static void callback(long inpos, int fun const char *optstring = "escCn:o:O:d:g:k:S:prRwafvqVQhZz::YXWBi:Tt:l::L::A"; +#ifdef GETOPT_LONG struct option options [] = { {"stderr-progress",no_argument,NULL,'e'}, {"search-for-drive",no_argument,NULL,'s'}, @@ -644,6 +697,7 @@ struct option options [] = { {NULL,0,NULL,0} }; +#endif long blocking_write(int outf, char *buffer, long num){ long words=0,temp; @@ -703,7 +757,12 @@ int main(int argc,char *argv[]){ atexit(cleanup); - while((c=getopt_long(argc,argv,optstring,options,&long_option_index))!=EOF){ +#ifdef GETOPT_LONG + while((c=getopt_long(argc,argv,optstring,options,&long_option_index))!=EOF) +#else + while((c=getopt(argc,argv,optstring))!=EOF) +#endif + { switch(c){ case 'B': batch=1; @@ -720,6 +779,7 @@ int main(int argc,char *argv[]){ case 'o': force_cdrom_overlap=atoi(optarg); break; +#if !(defined(__APPLE__) && defined(__MACH__)) case 'd': if(force_cdrom_device)free(force_cdrom_device); force_cdrom_device=copystring(optarg); @@ -733,6 +793,7 @@ int main(int argc,char *argv[]){ if(force_generic_device)free(force_generic_device); force_generic_device=copystring(optarg); break; +#endif case 'k': if(force_generic_device || force_cdrom_device){ report("-k option incompatable with -d and -g\n"); @@ -939,6 +1000,18 @@ int main(int argc,char *argv[]){ /* Query the cdrom/disc; we may need to override some settings */ +#if defined(__APPLE__) && defined(__MACH__) || defined(__sun) + d=cdda_find_a_cdrom(verbose,NULL); +#else +#ifndef __linux__ /* XXX */ +#ifndef __NetBSD__ /* XXX: is this needed? */ + if (!force_generic_device) + errx(1, "-g option is currently required by the NetBSD pkg version"); +#endif + if (!force_cdrom_device) + force_cdrom_device=copystring(force_generic_device); +#endif + if(force_cooked_device){ d=cdda_identify_cooked(force_cooked_device,verbose,NULL); }else if(force_generic_device) @@ -971,6 +1044,7 @@ int main(int argc,char *argv[]){ report(" "); } } +#endif /* __APPLE__ && __DARWIN__ */ if(!d){ if(!verbose) @@ -1005,7 +1079,9 @@ int main(int argc,char *argv[]){ report("Forcing default to read %d sectors; " "ignoring preset and autosense",force_cdrom_sectors); d->nsectors=force_cdrom_sectors; +#if !(defined(__APPLE__) && defined(__MACH__)) d->bigbuff=force_cdrom_sectors*CD_FRAMESIZE_RAW; +#endif } if(force_cdrom_overlap!=-1){ if(force_cdrom_overlap<0 || force_cdrom_overlap>75){