summaryrefslogtreecommitdiff
path: root/audio/ruby-freedb/files/patch-freedb_cdrom.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/ruby-freedb/files/patch-freedb_cdrom.c')
-rw-r--r--audio/ruby-freedb/files/patch-freedb_cdrom.c48
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);