I forgot to attach the patch in the previous email, here it is. /Bj|rn
--- dvdbackup.c.orig 2006-03-02 19:09:52.000000000 +0100 +++ dvdbackup.c 2006-03-02 20:14:25.000000000 +0100 @@ -30,6 +30,7 @@ #include <unistd.h> #include <string.h> #include <limits.h> +#include <stdint.h> #include <dvdread/dvd_reader.h> #include <dvdread/ifo_read.h> #include <dvdread/ifo_print.h> @@ -1656,15 +1657,14 @@ /* DVD Video files */ - char filename[MAXNAME]; - int size; + dvd_stat_t statbuf; /*DVD ifo handler*/ ifo_handle_t * vmg_ifo=NULL; /* The Title Set Info struct*/ title_set_info_t * title_set_info; - + /* Open main info file */ vmg_ifo = ifoOpen( _dvd, 0 ); if( !vmg_ifo ) { @@ -1687,10 +1687,9 @@ /* Find VIDEO_TS.IFO is present - must be present since we did a ifo open 0*/ - sprintf(filename,"/VIDEO_TS/VIDEO_TS.IFO"); - - if ( UDFFindFile(_dvd, filename, &size) != 0 ) { - title_set_info->title_set[0].size_ifo = size; + + if ( DVDFileStat(_dvd, 0, DVD_READ_INFO_FILE, &statbuf) != -1 ) { + title_set_info->title_set[0].size_ifo = statbuf.size; } else { DVDFreeTitleSetInfo(title_set_info); return(0); @@ -1700,20 +1699,18 @@ /* Find VIDEO_TS.VOB if present*/ - sprintf(filename,"/VIDEO_TS/VIDEO_TS.VOB"); - if ( UDFFindFile(_dvd, filename, &size) != 0 ) { - title_set_info->title_set[0].size_menu = size; + if ( DVDFileStat(_dvd, 0, DVD_READ_MENU_VOBS, &statbuf) != -1 ) { + title_set_info->title_set[0].size_menu = statbuf.size; } else { title_set_info->title_set[0].size_menu = 0 ; } /* Find VIDEO_TS.BUP if present */ - sprintf(filename,"/VIDEO_TS/VIDEO_TS.BUP"); - if ( UDFFindFile(_dvd, filename, &size) != 0 ) { - title_set_info->title_set[0].size_bup = size; + if (DVDFileStat(_dvd, 0, DVD_READ_INFO_BACKUP_FILE, &statbuf) != -1) { + title_set_info->title_set[0].size_bup = statbuf.size; } else { DVDFreeTitleSetInfo(title_set_info); return(0); @@ -1745,10 +1742,9 @@ } - sprintf(filename,"/VIDEO_TS/VTS_%02i_0.IFO",counter + 1); - if ( UDFFindFile(_dvd, filename, &size) != 0 ) { - title_set_info->title_set[counter + 1].size_ifo = size; + if ( DVDFileStat(_dvd, counter + 1, DVD_READ_INFO_FILE, &statbuf) != -1) { + title_set_info->title_set[counter+1].size_ifo = statbuf.size; } else { DVDFreeTitleSetInfo(title_set_info); return(0); @@ -1761,10 +1757,9 @@ /* Find VTS_XX_0.VOB if present*/ - sprintf(filename,"/VIDEO_TS/VTS_%02i_0.VOB", counter + 1); - if ( UDFFindFile(_dvd, filename, &size) != 0 ) { - title_set_info->title_set[counter + 1].size_menu = size; + if ( DVDFileStat(_dvd, counter + 1, DVD_READ_MENU_VOBS, &statbuf) != -1) { + title_set_info->title_set[counter + 1].size_menu = statbuf.size; } else { title_set_info->title_set[counter + 1].size_menu = 0 ; } @@ -1776,13 +1771,12 @@ /* Find all VTS_XX_[1 to 9].VOB files if they are present*/ - - for( i = 0; i < 9; ++i ) { - sprintf(filename,"/VIDEO_TS/VTS_%02i_%i.VOB", counter + 1, i + 1 ); - if(UDFFindFile(_dvd, filename, &size) == 0 ) { - break; + i = 0; + if ( DVDFileStat(_dvd, counter + 1, DVD_READ_TITLE_VOBS, &statbuf) != -1) { + for ( i = 0; i < statbuf.nr_parts; ++i) { + title_set_info->title_set[counter + 1].size_vob[i] = statbuf.parts_size[i]; } - title_set_info->title_set[counter + 1].size_vob[i] = size; + } title_set_info->title_set[counter + 1].number_of_vob_files = i; @@ -1791,10 +1785,9 @@ } - sprintf(filename,"/VIDEO_TS/VTS_%02i_0.BUP", counter + 1); - if ( UDFFindFile(_dvd, filename, &size) != 0 ) { - title_set_info->title_set[counter +1].size_bup = size; + if ( DVDFileStat(_dvd, counter + 1, DVD_READ_INFO_BACKUP_FILE, &statbuf) != -1) { + title_set_info->title_set[counter + 1].size_bup = statbuf.size; } else { DVDFreeTitleSetInfo(title_set_info); return(0);