$NetBSD: patch-ae,v 1.4 2002/03/04 14:45:13 itohy Exp $ --- main.c.orig Mon Mar 26 12:44:50 2001 +++ main.c Mon Mar 4 23:05:48 2002 @@ -49,12 +49,18 @@ #include #include #include +#ifdef GETOPT_LONG #include +#endif #include #include #include #include +#ifdef HAVE_GETRAWPARTITION +#include +#endif + #include "interface/cdda_interface.h" #include "paranoia/cdda_paranoia.h" #include "utils.h" @@ -231,6 +237,7 @@ " cdparanoia [options] [outfile]\n\n" "OPTIONS:\n" +#ifdef GETOPT_LONG " -v --verbose : extra verbose operation\n" " -q --quiet : quiet operation\n" " -e --stderr-progress : force output of progress information to\n" @@ -276,6 +283,50 @@ " -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" +" -d : use specified device; disallow autosense\n" +" -g : use specified generic scsi device\n" +" -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" @@ -376,7 +427,7 @@ int graph=30; char buffer[256]; static long c_sector=0,v_sector=0; - static char dispcache[30]=" "; + static char dispcache[30 + 1]=" "; static int last=0; static long lasttime=0; long sector,osector=0; @@ -587,6 +638,7 @@ const char *optstring = "escCn:o:O:d:g:S:prRwafvqVQhZz::YXWBi:Tt:"; +#ifdef GETOPT_LONG struct option options [] = { {"stderr-progress",no_argument,NULL,'e'}, {"search-for-drive",no_argument,NULL,'s'}, @@ -621,6 +673,7 @@ {NULL,0,NULL,0} }; +#endif long blocking_write(int outf, char *buffer, long num){ long words=0,temp; @@ -673,7 +726,12 @@ 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; @@ -810,6 +868,27 @@ report(VERSION); /* Query the cdrom/disc; we may need to override some settings */ + +#ifndef __linux__ /* XXX */ +#ifdef __NetBSD__ + if (!force_generic_device) { + int raw; + static char devstring[16]; +#ifdef HAVE_GETRAWPARTITION + raw = getrawpartition(); +#else + raw = 'c' - 'a'; +#endif + snprintf(devstring, sizeof(devstring) - 1, "/dev/rcd0%c", raw + 'a'); + force_generic_device=devstring; + } +#else + 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_generic_device) d=cdda_identify_scsi(force_generic_device,force_cdrom_device,verbose,NULL);