Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 212241 Details for
Bug 295986
patch media-libs/libdvdread-4.1.3_p1168 for compatibility with dvdbackup-0.4.1
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
libdvdread-4.1.3_p1168-DVDFileStat.patch
libdvdread-4.1.3_p1168-DVDFileStat.patch (text/plain), 6.75 KB, created by
Torsten Kurbad
on 2009-12-06 16:27:39 UTC
(
hide
)
Description:
libdvdread-4.1.3_p1168-DVDFileStat.patch
Filename:
MIME Type:
Creator:
Torsten Kurbad
Created:
2009-12-06 16:27:39 UTC
Size:
6.75 KB
patch
obsolete
>diff -pruN libdvdread-4.1.3_p1168.orig/src/dvdread/dvd_reader.h libdvdread-4.1.3_p1168/src/dvdread/dvd_reader.h >--- libdvdread-4.1.3_p1168.orig/src/dvdread/dvd_reader.h 2009-03-09 18:41:49.000000000 +0100 >+++ libdvdread-4.1.3_p1168/src/dvdread/dvd_reader.h 2009-12-06 17:09:42.885882518 +0100 >@@ -117,6 +117,42 @@ typedef enum { > } dvd_read_domain_t; > > /** >+ * >+ */ >+typedef struct { >+ off_t size; /**< Total size of file in bytes */ >+ int nr_parts; /**< Number of file parts */ >+ off_t parts_size[9]; /**< Size of each part in bytes */ >+} dvd_stat_t; >+ >+/** >+ * Stats a file on the DVD given the title number and domain. >+ * The information about the file is stored in a dvd_stat_t >+ * which contains information about the size of the file and >+ * the number of parts in case of a multipart file and the respective >+ * sizes of the parts. >+ * A multipart file is for instance VTS_02_1.VOB, VTS_02_2.VOB, VTS_02_3.VOB >+ * The size of VTS_02_1.VOB will be stored in stat->parts_size[0], >+ * VTS_02_2.VOB in stat->parts_size[1], ... >+ * The total size (sum of all parts) is stored in stat->size and >+ * stat->nr_parts will hold the number of parts. >+ * Only DVD_READ_TITLE_VOBS (VTS_??_[1-9].VOB) can be multipart files. >+ * >+ * This function is only of use if you want to get the size of each file >+ * in the filesystem. These sizes are not needed to use any other >+ * functions in libdvdread. >+ * >+ * @param dvd A dvd read handle. >+ * @param titlenum Which Video Title Set should be used, VIDEO_TS is 0. >+ * @param domain Which domain. >+ * @param stat Pointer to where the result is stored. >+ * @return If successful 0, otherwise -1. >+ * >+ * int DVDFileStat(dvd, titlenum, domain, stat); >+ */ >+int DVDFileStat(dvd_reader_t *, int, dvd_read_domain_t, dvd_stat_t *); >+ >+/** > * Opens a file on the DVD given the title number and domain. > * > * If the title number is 0, the video manager information is opened >diff -pruN libdvdread-4.1.3_p1168.orig/src/dvd_reader.c libdvdread-4.1.3_p1168/src/dvd_reader.c >--- libdvdread-4.1.3_p1168.orig/src/dvd_reader.c 2009-03-09 18:41:50.000000000 +0100 >+++ libdvdread-4.1.3_p1168/src/dvd_reader.c 2009-12-06 17:09:32.865883768 +0100 >@@ -889,6 +889,187 @@ void DVDCloseFile( dvd_file_t *dvd_file > } > } > >+static int DVDFileStatVOBUDF(dvd_reader_t *dvd, int title, >+ int menu, dvd_stat_t *statbuf) >+{ >+ char filename[ MAX_UDF_FILE_NAME_LEN ]; >+ uint32_t size; >+ off_t tot_size; >+ off_t parts_size[9]; >+ int nr_parts = 0; >+ int n; >+ >+ if( title == 0 ) { >+ sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" ); >+ } else { >+ sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, menu ? 0 : 1 ); >+ } >+ if(!UDFFindFile( dvd, filename, &size )) { >+ return -1; >+ } >+ tot_size = size; >+ nr_parts = 1; >+ parts_size[0] = size; >+ >+ if( !menu ) { >+ int cur; >+ >+ for( cur = 2; cur < 10; cur++ ) { >+ sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, cur ); >+ if( !UDFFindFile( dvd, filename, &size ) ) { >+ break; >+ } >+ parts_size[nr_parts] = size; >+ tot_size += size; >+ nr_parts++; >+ } >+ } >+ >+ statbuf->size = tot_size; >+ statbuf->nr_parts = nr_parts; >+ for(n = 0; n < nr_parts; n++) { >+ statbuf->parts_size[n] = parts_size[n]; >+ } >+ return 0; >+} >+ >+ >+static int DVDFileStatVOBPath( dvd_reader_t *dvd, int title, >+ int menu, dvd_stat_t *statbuf ) >+{ >+ char filename[ MAX_UDF_FILE_NAME_LEN ]; >+ char full_path[ PATH_MAX + 1 ]; >+ struct stat fileinfo; >+ off_t tot_size; >+ off_t parts_size[9]; >+ int nr_parts = 0; >+ int n; >+ >+ >+ >+ if( title == 0 ) { >+ sprintf( filename, "VIDEO_TS.VOB" ); >+ } else { >+ sprintf( filename, "VTS_%02d_%d.VOB", title, menu ? 0 : 1 ); >+ } >+ if( !findDVDFile( dvd, filename, full_path ) ) { >+ return -1; >+ } >+ >+ if( stat( full_path, &fileinfo ) < 0 ) { >+ fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename ); >+ return -1; >+ } >+ >+ >+ tot_size = fileinfo.st_size; >+ nr_parts = 1; >+ parts_size[0] = fileinfo.st_size; >+ >+ if( !menu ) { >+ int cur; >+ >+ for( cur = 2; cur < 10; cur++ ) { >+ >+ sprintf( filename, "VTS_%02d_%d.VOB", title, cur ); >+ if( !findDVDFile( dvd, filename, full_path ) ) { >+ break; >+ } >+ >+ if( stat( full_path, &fileinfo ) < 0 ) { >+ fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename ); >+ break; >+ } >+ >+ parts_size[nr_parts] = fileinfo.st_size; >+ tot_size += parts_size[nr_parts]; >+ nr_parts++; >+ } >+ } >+ >+ statbuf->size = tot_size; >+ statbuf->nr_parts = nr_parts; >+ for(n = 0; n < nr_parts; n++) { >+ statbuf->parts_size[n] = parts_size[n]; >+ } >+ return 0; >+} >+ >+ >+int DVDFileStat(dvd_reader_t *dvd, int titlenum, >+ dvd_read_domain_t domain, dvd_stat_t *statbuf) >+{ >+ char filename[ MAX_UDF_FILE_NAME_LEN ]; >+ char full_path[ PATH_MAX + 1 ]; >+ struct stat fileinfo; >+ uint32_t size; >+ >+ /* Check arguments. */ >+ if( dvd == NULL || titlenum < 0 ) { >+ errno = EINVAL; >+ return -1; >+ } >+ >+ switch( domain ) { >+ case DVD_READ_INFO_FILE: >+ if( titlenum == 0 ) { >+ sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" ); >+ } else { >+ sprintf( filename, "/VIDEO_TS/VTS_%02i_0.IFO", titlenum ); >+ } >+ break; >+ case DVD_READ_INFO_BACKUP_FILE: >+ if( titlenum == 0 ) { >+ sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" ); >+ } else { >+ sprintf( filename, "/VIDEO_TS/VTS_%02i_0.BUP", titlenum ); >+ } >+ break; >+ case DVD_READ_MENU_VOBS: >+ if( dvd->isImageFile ) { >+ return DVDFileStatVOBUDF( dvd, titlenum, 1, statbuf ); >+ } else { >+ return DVDFileStatVOBPath( dvd, titlenum, 1, statbuf ); >+ } >+ break; >+ case DVD_READ_TITLE_VOBS: >+ if( titlenum == 0 ) { >+ return -1; >+ } >+ if( dvd->isImageFile ) { >+ return DVDFileStatVOBUDF( dvd, titlenum, 0, statbuf ); >+ } else { >+ return DVDFileStatVOBPath( dvd, titlenum, 0, statbuf ); >+ } >+ break; >+ default: >+ fprintf( stderr, "libdvdread: Invalid domain for file stat.\n" ); >+ errno = EINVAL; >+ return -1; >+ } >+ >+ if( dvd->isImageFile ) { >+ if( UDFFindFile( dvd, filename, &size ) ) { >+ statbuf->size = size; >+ statbuf->nr_parts = 1; >+ statbuf->parts_size[0] = size; >+ return 0; >+ } >+ } else { >+ if( findDVDFile( dvd, filename, full_path ) ) { >+ if( stat( full_path, &fileinfo ) < 0 ) { >+ fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename ); >+ } else { >+ statbuf->size = fileinfo.st_size; >+ statbuf->nr_parts = 1; >+ statbuf->parts_size[0] = statbuf->size; >+ return 0; >+ } >+ } >+ } >+ return -1; >+} >+ > /* Internal, but used from dvd_udf.c */ > int UDFReadBlocksRaw( dvd_reader_t *device, uint32_t lb_number, > size_t block_count, unsigned char *data,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 295986
:
212239
| 212241