diff options
Diffstat (limited to 'audio/ruby-freedb/files/patch-freedb_cdrom.c')
-rw-r--r-- | audio/ruby-freedb/files/patch-freedb_cdrom.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/audio/ruby-freedb/files/patch-freedb_cdrom.c b/audio/ruby-freedb/files/patch-freedb_cdrom.c new file mode 100644 index 000000000000..14f69a388d7f --- /dev/null +++ b/audio/ruby-freedb/files/patch-freedb_cdrom.c @@ -0,0 +1,48 @@ +--- freedb_cdrom.c.orig Wed Sep 25 15:05:37 2002 ++++ freedb_cdrom.c Sun Oct 13 03:13:25 2002 +@@ -93,17 +93,18 @@ + + + char offsets[1089] = "", buff[255]; +- +- Check_Type(device, T_STRING); +- drive = open(STR2CSTR(device), O_RDONLY | O_NONBLOCK); ++ ++ Check_SafeStr(device); ++ drive = open(RSTRING(device)->ptr, O_RDONLY | O_NONBLOCK); + + if (drive < 0) { +- close(drive); +- rb_sys_fail("Failed to open device"); ++ rb_sys_fail(RSTRING(device)->ptr); + } + +- if (ioctl(drive,CDROMREADTOCHDR,&hdr) < 0) +- rb_sys_fail("Failed to read TOC"); ++ if (ioctl(drive,CDROMREADTOCHDR,&hdr) < 0) { ++ close(drive); ++ rb_sys_fail("Failed to read TOC entry"); ++ } + + first=hdr.cdth_trk0; + last=hdr.cdth_trk1; +@@ -126,6 +127,7 @@ + t.data = TocEntry; + + if (ioctl(drive, CDIOREADTOCENTRYS, (char *) &t) < 0) ++ free(TocEntry); + close(drive); + rb_sys_fail("Failed to read TOC entry"); + } +@@ -157,9 +159,11 @@ + TocEntry[last].cdte_format = CDROM_LBA; + if (ioctl(drive, CDROMREADTOCENTRY, &TocEntry[i]) < 0) { + free(TocEntry); ++ close(drive); + rb_sys_fail("Failed to read TOC entry"); + } + #endif ++ close(drive); + + #if defined(OS_FREEBSD) + TocEntry[i].cdte_addr.lba = ntohl(TocEntry[i].cdte_addr.lba); |