=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cdio/cdio.c,v retrieving revision 1.62 retrieving revision 1.63 diff -c -r1.62 -r1.63 *** src/usr.bin/cdio/cdio.c 2008/06/22 21:04:01 1.62 --- src/usr.bin/cdio/cdio.c 2008/06/30 23:35:39 1.63 *************** *** 1,4 **** ! /* $OpenBSD: cdio.c,v 1.62 2008/06/22 21:04:01 av Exp $ */ /* Copyright (c) 1995 Serge V. Vakulenko * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: cdio.c,v 1.63 2008/06/30 23:35:39 av Exp $ */ /* Copyright (c) 1995 Serge V. Vakulenko * All rights reserved. *************** *** 149,154 **** --- 149,155 ---- char *cdname; int fd = -1; int writeperm = 0; + int mediacap = 0; int verbose = 1; int msf = 1; const char *cddb_host; *************** *** 166,172 **** int play_track(int, int, int, int); int get_vol(int *, int *); int status(int *, int *, int *, int *); ! int is_wave(int fd); __dead void tao(int argc, char **argv); int play(char *arg); int info(char *arg); --- 167,173 ---- int play_track(int, int, int, int); int get_vol(int *, int *); int status(int *, int *, int *, int *); ! int is_wave(int); __dead void tao(int argc, char **argv); int play(char *arg); int info(char *arg); *************** *** 315,321 **** int run(int cmd, char *arg) { ! int l, r, rc, cap; static char newcdname[MAXPATHLEN]; switch (cmd) { --- 316,322 ---- int run(int cmd, char *arg) { ! int l, r, rc; static char newcdname[MAXPATHLEN]; switch (cmd) { *************** *** 513,523 **** if (!open_cd(cdname, 1)) return 0; ! if (get_media_capabilities(&cap) == -1) { warnx("Can't determine media type"); return (0); } ! if ((cap & MEDIACAP_CDRW_WRITE) == 0) { warnx("The media doesn't support blanking"); return (0); } --- 514,524 ---- if (!open_cd(cdname, 1)) return 0; ! if (get_media_capabilities(&mediacap) == -1) { warnx("Can't determine media type"); return (0); } ! if ((mediacap & MEDIACAP_CDRW_WRITE) == 0) { warnx("The media doesn't support blanking"); return (0); } *************** *** 576,598 **** u_int blklen; u_int ntracks = 0; char type; ! int ch, cap; if (argc == 1) usage(); SLIST_INIT(&tracks); type = 'd'; blklen = 2048; while (argc > 1) { tr = malloc(sizeof(struct track_info)); if (tr == NULL) err(1, "tao"); - tr->type = type; optreset = 1; optind = 1; ! while ((ch = getopt(argc, argv, "ad")) != -1) { switch (ch) { case 'a': type = 'a'; --- 577,600 ---- u_int blklen; u_int ntracks = 0; char type; ! int ch, speed; ! const char *errstr; if (argc == 1) usage(); SLIST_INIT(&tracks); type = 'd'; + speed = DRIVE_SPEED_OPTIMAL; blklen = 2048; while (argc > 1) { tr = malloc(sizeof(struct track_info)); if (tr == NULL) err(1, "tao"); optreset = 1; optind = 1; ! while ((ch = getopt(argc, argv, "ads:")) != -1) { switch (ch) { case 'a': type = 'a'; *************** *** 602,613 **** --- 604,634 ---- type = 'd'; blklen = 2048; break; + case 's': + if (strcmp(optarg, "auto") == 0) { + speed = DRIVE_SPEED_OPTIMAL; + } else if (strcmp(optarg, "max") == 0) { + speed = DRIVE_SPEED_MAX; + } else { + speed = (int)strtonum(optarg, 1, + CD_MAX_SPEED, &errstr); + if (errstr != NULL) { + errx(1, + "incorrect speed value"); + } + } + break; default: usage(); /* NOTREACHED */ } } + if (speed != DRIVE_SPEED_OPTIMAL && speed != DRIVE_SPEED_MAX) + tr->speed = CD_SPEED_TO_KBPS(speed, blklen); + else + tr->speed = speed; + tr->type = type; tr->blklen = blklen; argc -= optind; *************** *** 637,645 **** if (!open_cd(cdname, 1)) exit(1); ! if (get_media_capabilities(&cap) == -1) errx(1, "Can't determine media type"); ! if ((cap & MEDIACAP_TAO) == 0) errx(1, "The media can't be written in TAO mode"); get_disc_size(&availblk); --- 658,666 ---- if (!open_cd(cdname, 1)) exit(1); ! if (get_media_capabilities(&mediacap) == -1) errx(1, "Can't determine media type"); ! if ((mediacap & MEDIACAP_TAO) == 0) errx(1, "The media can't be written in TAO mode"); get_disc_size(&availblk);