Changeset 773

Show
Ignore:
Timestamp:
2005-01-29 17:00:34 (4 years ago)
Author:
conrad
Message:

oggz_seek fixes:

  • move eof check to happen only when 0 bytes are read (bug #42)
  • make check for scan less aggressive
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • liboggz/trunk/src/liboggz/oggz_read.c

    r768 r773  
    6262 
    6363/*#define DEBUG*/ 
    64 /* #define DEBUG_VERBOSE */ 
     64/*#define DEBUG_VERBOSE*/ 
    6565 
    6666#define CHUNKSIZE 65536 
     
    646646      buffer = ogg_sync_buffer (&reader->ogg_sync, CHUNKSIZE); 
    647647      if ((bytes = (long) oggz_io_read (oggz, buffer, CHUNKSIZE)) == 0) { 
    648         /* schyeah! */ 
     648        if (oggz->file && feof (oggz->file)) { 
     649#ifdef DEBUG_VERBOSE 
     650          printf ("get_next_page: feof (oggz->file), returning -2\n"); 
     651#endif 
     652          clearerr (oggz->file); 
     653          return -2; 
     654        } 
    649655      } 
    650656      if (bytes == OGGZ_ERR_SYSTEM) { 
     
    658664#endif 
    659665        return -2; 
     666#if 0 
    660667      } else if (oggz->file && feof (oggz->file)) { 
    661668#ifdef DEBUG_VERBOSE 
     
    664671        clearerr (oggz->file); 
    665672        return -2; 
     673#endif 
    666674      } 
    667675 
     
    973981    if (oggz_stat_regular (statbuf.st_mode)) { 
    974982      offset_end = statbuf.st_size; 
     983#ifdef DEBUG 
     984      printf ("oggz_seek_set: stat size %ld\n", offset_end); 
     985#endif 
    975986    } else { 
    976987      /*oggz_set_error (oggz, OGGZ_ERR_NOSEEK);*/ 
     
    10241035 
    10251036#ifdef DEBUG 
    1026     printf ("oggz_seek_set: [A] want u%ld: (u%ld - u%ld) [@%ld - @%ld]\n", 
     1037    printf ("oggz_seek_set: [A] want u%lld: (u%lld - u%lld) [@%ld - @%ld]\n", 
    10271038            unit_target, unit_begin, unit_end, offset_begin, offset_end); 
    10281039#endif 
     
    10451056    } 
    10461057 
     1058#ifdef DEBUG 
     1059    printf ("oggz_seek_set: guessed %ld\n", offset_guess); 
     1060#endif 
     1061 
    10471062    offset_at = oggz_seek_raw (oggz, offset_guess, SEEK_SET); 
    10481063    if (offset_at == -1) { 
     
    10511066 
    10521067    offset_next = oggz_get_next_start_page (oggz, og); 
     1068 
     1069#ifdef DEBUG 
     1070    printf ("oggz_seek_set: offset_next %ld\n", offset_next); 
     1071#endif 
    10531072 
    10541073    if (unit_end == -1 && offset_next == -2) { /* reached eof, backtrack */ 
     
    10701089    } 
    10711090 
    1072     if (offset_next < offset_end) { 
     1091    if (offset_next > offset_end) { 
    10731092      offset_next = 
    10741093        oggz_scan_for_page (oggz, og, unit_target, offset_begin, offset_end); 
     
    11061125 found: 
    11071126#ifdef DEBUG 
    1108   printf ("FOUND (%ld)\n", unit_at); 
     1127  printf ("oggz_seek_set: FOUND (%ld)\n", unit_at); 
    11091128#endif 
    11101129 
     
    11161135 notfound: 
    11171136#ifdef DEBUG 
    1118   printf ("NOT FOUND\n"); 
     1137  printf ("oggz_seek_set: NOT FOUND\n"); 
    11191138#endif 
    11201139