--- dvdbackup-0.4.1~/src/dvdbackup.c 2009-06-09 00:25:29.000000000 +0200 +++ dvdbackup-0.4.1/src/dvdbackup.c 2010-02-20 17:54:00.980498082 +0100 @@ -188,8 +188,8 @@ int size; int left; - int to_read = BUFFER_SIZE; - int rbuff; + int to_read; + int have_read; /* Offsets */ int soffset; @@ -226,7 +226,7 @@ #ifdef DEBUG for (i = 0; i < number_of_vob_files ; i++) { - fprintf(stderr,"vob %i size: %d\n", i + 1, title_set_info->title_set[title_set].size_vob[i]); + fprintf(stderr,"vob %i size: %lld\n", i + 1, title_set_info->title_set[title_set].size_vob[i]); } #endif @@ -271,29 +271,29 @@ } size = 0; - left = cell_end_sector[length-1] - cell_start_sector[0] + 1; - soffset = cell_start_sector[0]; -#ifdef DEBUG - fprintf(stderr,"DVDWriteCells: left is %d\n", left); -#endif - - while( left > 0 ) { + for (i=0; i 0 ) { + to_read = left; + if (to_read + size > MAX_VOB_SIZE) + to_read = MAX_VOB_SIZE - size; + if (to_read > BUFFER_SIZE) + to_read = BUFFER_SIZE; - if (to_read > left) { - to_read = left; - } - if ((rbuff = DVDReadBlocks(dvd_file,soffset, to_read, buffer)) < 0) { - fprintf(stderr, _("Error reading MENU VOB: %d != %d\n"), rbuff, to_read); + if ((have_read = DVDReadBlocks(dvd_file,soffset, to_read, buffer)) < 0) { + fprintf(stderr, _("Error reading MENU VOB: %d != %d\n"), have_read, to_read); free(buffer); DVDCloseFile(dvd_file); close(streamout); return(1); } - if (rbuff < to_read) { - fprintf(stderr, _("DVDReadBlocks read %d blocks of %d blocks\n"), rbuff, to_read); + if (have_read < to_read) { + fprintf(stderr, _("DVDReadBlocks read %d blocks of %d blocks\n"), have_read, to_read); } - if (write(streamout, buffer, rbuff * DVD_VIDEO_LB_LEN) != rbuff * DVD_VIDEO_LB_LEN) { + if (write(streamout, buffer, have_read * DVD_VIDEO_LB_LEN) != have_read * DVD_VIDEO_LB_LEN) { fprintf(stderr, _("Error writing TITLE VOB\n")); free(buffer); close(streamout); @@ -302,9 +302,12 @@ #ifdef DEBUG fprintf(stderr,"Current soffset changed from %i to ",soffset); #endif - soffset = soffset + to_read; - left = left - rbuff; - size = size + rbuff; + soffset = soffset + have_read; +#ifdef DEBUG + fprintf(stderr,"%i\n",soffset); +#endif + left = left - have_read; + size = size + have_read; if ((size >= MAX_VOB_SIZE) && (left > 0)) { #ifdef DEBUG fprintf(stderr,"size: %i, MAX_VOB_SIZE: %i\n ",size, MAX_VOB_SIZE); @@ -319,9 +322,7 @@ return(1); } } -#ifdef DEBUG - fprintf(stderr,"%i\n",soffset); -#endif + } }