From 46f4825b631fff91374caf7ea62b329609425bb6 Mon Sep 17 00:00:00 2001 From: "SND\\weimingzhi_cp" Date: Thu, 8 Jul 2010 04:24:44 +0000 Subject: git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@54337 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- plugins/dfcdrom/cdr-freebsd.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'plugins') diff --git a/plugins/dfcdrom/cdr-freebsd.c b/plugins/dfcdrom/cdr-freebsd.c index fbdd8c89..69b9d0ad 100644 --- a/plugins/dfcdrom/cdr-freebsd.c +++ b/plugins/dfcdrom/cdr-freebsd.c @@ -45,9 +45,6 @@ int OpenCdHandle(const char *dev) { if (parameter == 0) parameter = CDR_MAX_SPEED; ioctl(h, CDRIOCREADSPEED, ¶meter); - - parameter = CD_FRAMESIZE_RAW; - ioctl(h, CDRIOCSETBLOCKSIZE, ¶meter); } } @@ -85,8 +82,19 @@ long ReadSector(int handle, crdata *cr) { unsigned int lba = msf_to_lba(cr->msf.cdmsf_min0, cr->msf.cdmsf_sec0, cr->msf.cdmsf_frame0); - if (pread(handle, (void *)cr->buf, CD_FRAMESIZE_RAW, lba * CD_FRAMESIZE_RAW) != CD_FRAMESIZE_RAW) + int bsize = CD_FRAMESIZE_RAW; + + if (ioctl(handle, CDRIOCSETBLOCKSIZE, &bsize) == -1) { + return -1; + } + + if (lseek(handle, lba * CD_FRAMESIZE_RAW, SEEK_SET) == -1) { return -1; + } + + if (read(handle, (void *)cr->buf, CD_FRAMESIZE_RAW) == -1) { + return -1; + } return 0; } -- cgit v1.2.3