[40794] trunk/dports/devel/libdvdread
blb at macports.org
blb at macports.org
Tue Oct 14 21:01:38 PDT 2008
Revision: 40794
http://trac.macports.org/changeset/40794
Author: blb at macports.org
Date: 2008-10-14 21:01:38 -0700 (Tue, 14 Oct 2008)
Log Message:
-----------
devel/libdvdread - better handle IFO file size mismatches; closes
ticket #15185
Modified Paths:
--------------
trunk/dports/devel/libdvdread/Portfile
Added Paths:
-----------
trunk/dports/devel/libdvdread/files/
trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.c.diff
trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.h.diff
trunk/dports/devel/libdvdread/files/patch-dvdread_ifo_read.c.diff
Modified: trunk/dports/devel/libdvdread/Portfile
===================================================================
--- trunk/dports/devel/libdvdread/Portfile 2008-10-15 02:54:59 UTC (rev 40793)
+++ trunk/dports/devel/libdvdread/Portfile 2008-10-15 04:01:38 UTC (rev 40794)
@@ -4,6 +4,7 @@
name libdvdread
version 0.9.7
+revision 1
categories devel multimedia
platforms darwin
maintainers nomaintainer
@@ -26,6 +27,9 @@
sha1 b2c2ede36cff9d56205747d3740c50fd32669e21 \
rmd160 7233064f35d86a27202ca1bef165f6972e20b3e8
+patchfiles patch-dvdread_dvd_reader.c.diff patch-dvdread_ifo_read.c.diff \
+ patch-dvdread_dvd_reader.h.diff
+
configure.cppflags-append -no-cpp-precomp
default_variants +libdvdcss
Added: trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.c.diff
===================================================================
--- trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.c.diff (rev 0)
+++ trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.c.diff 2008-10-15 04:01:38 UTC (rev 40794)
@@ -0,0 +1,40 @@
+--- dvdread/dvd_reader.c.orig 2006-10-06 01:58:03.000000000 -0600
++++ dvdread/dvd_reader.c 2008-05-28 02:21:03.000000000 -0600
+@@ -1393,6 +1393,28 @@
+ return offset;
+ }
+
++int DVDFileSeekForce( dvd_file_t *dvd_file, int offset, int force_size )
++{
++ /* Check arguments. */
++ if( dvd_file == NULL || offset < 0 )
++ return -1;
++
++ if( dvd_file->dvd->isImageFile ) {
++ if( force_size < 0 )
++ force_size = (offset - 1) / DVD_VIDEO_LB_LEN + 1;
++ if( dvd_file->filesize < force_size ) {
++ dvd_file->filesize = force_size;
++ fprintf(stderr, "libdvdread: Ignored UDF provided size of file.\n");
++ }
++ }
++
++ if( offset > dvd_file->filesize * DVD_VIDEO_LB_LEN ) {
++ return -1;
++ }
++ dvd_file->seek_pos = (uint32_t) offset;
++ return offset;
++}
++
+ #ifndef HAVE_UINTPTR_T
+ #warning "Assuming that (unsigned long) can hold (void *)"
+ typedef unsigned long uintptr_t;
+@@ -1444,7 +1466,7 @@
+ memcpy( data, &(secbuf[ seek_byte ]), byte_size );
+ free( secbuf_start );
+
+- dvd_file->seek_pos += byte_size;
++ DVDFileSeekForce(dvd_file, dvd_file->seek_pos + byte_size, -1);
+ return byte_size;
+ }
+
Added: trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.h.diff
===================================================================
--- trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.h.diff (rev 0)
+++ trunk/dports/devel/libdvdread/files/patch-dvdread_dvd_reader.h.diff 2008-10-15 04:01:38 UTC (rev 40794)
@@ -0,0 +1,11 @@
+--- dvdread/dvd_reader.h.orig 2006-10-06 02:12:31.000000000 -0600
++++ dvdread/dvd_reader.h 2008-05-28 02:21:03.000000000 -0600
+@@ -240,6 +240,8 @@
+ */
+ int DVDFileSeek( dvd_file_t *, int );
+
++int DVDFileSeekForce( dvd_file_t *, int, int );
++
+ /**
+ * Reads the given number of bytes from the file. This call can only be used
+ * on the information files, and may not be used for reading from a VOB. This
Added: trunk/dports/devel/libdvdread/files/patch-dvdread_ifo_read.c.diff
===================================================================
--- trunk/dports/devel/libdvdread/files/patch-dvdread_ifo_read.c.diff (rev 0)
+++ trunk/dports/devel/libdvdread/files/patch-dvdread_ifo_read.c.diff 2008-10-15 04:01:38 UTC (rev 40794)
@@ -0,0 +1,22 @@
+--- dvdread/ifo_read.c.orig 2006-01-22 05:19:19.000000000 -0700
++++ dvdread/ifo_read.c 2008-05-28 02:21:03.000000000 -0600
+@@ -106,6 +106,10 @@
+ return (DVDFileSeek(dvd_file, (int)offset) == (int)offset);
+ }
+
++static inline int DVDFileSeekForce_( dvd_file_t *dvd_file, uint32_t offset, int force_size ) {
++ return (DVDFileSeekForce(dvd_file, (int)offset, force_size) == (int)offset);
++}
++
+
+ ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) {
+ ifo_handle_t *ifofile;
+@@ -1659,7 +1663,7 @@
+ unsigned int i;
+ int info_length;
+
+- if(!DVDFileSeek_(ifofile->file, sector * DVD_BLOCK_LEN))
++ if(!DVDFileSeekForce_(ifofile->file, sector * DVD_BLOCK_LEN, sector))
+ return 0;
+
+ if(!(DVDReadBytes(ifofile->file, vobu_admap, VOBU_ADMAP_SIZE)))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20081014/53f60159/attachment.html
More information about the macports-changes
mailing list