[cvs-annodex] commit (/annodex):
liboggz/trunk/src/liboggz/oggz_read.c
conrad
nobody at lists.annodex.net
Sun Jan 30 12:00:36 EST 2005
Update of /annodex (new revision 773)
Modified files:
liboggz/trunk/src/liboggz/oggz_read.c
Log Message:
oggz_seek fixes:
* move eof check to happen only when 0 bytes are read (bug #42)
* make check for scan less aggressive
Modified: liboggz/trunk/src/liboggz/oggz_read.c
===================================================================
--- liboggz/trunk/src/liboggz/oggz_read.c 2005-01-30 00:40:01 UTC (rev 772)
+++ liboggz/trunk/src/liboggz/oggz_read.c 2005-01-30 01:00:34 UTC (rev 773)
@@ -61,7 +61,7 @@
#include "oggz_private.h"
/*#define DEBUG*/
-/* #define DEBUG_VERBOSE */
+/*#define DEBUG_VERBOSE*/
#define CHUNKSIZE 65536
@@ -645,7 +645,13 @@
buffer = ogg_sync_buffer (&reader->ogg_sync, CHUNKSIZE);
if ((bytes = (long) oggz_io_read (oggz, buffer, CHUNKSIZE)) == 0) {
- /* schyeah! */
+ if (oggz->file && feof (oggz->file)) {
+#ifdef DEBUG_VERBOSE
+ printf ("get_next_page: feof (oggz->file), returning -2\n");
+#endif
+ clearerr (oggz->file);
+ return -2;
+ }
}
if (bytes == OGGZ_ERR_SYSTEM) {
/*oggz_set_error (oggz, OGGZ_ERR_SYSTEM);*/
@@ -657,12 +663,14 @@
printf ("get_next_page: bytes == 0, returning -2\n");
#endif
return -2;
+#if 0
} else if (oggz->file && feof (oggz->file)) {
#ifdef DEBUG_VERBOSE
printf ("get_next_page: feof (oggz->file), returning -2\n");
#endif
clearerr (oggz->file);
return -2;
+#endif
}
ogg_sync_wrote(&reader->ogg_sync, bytes);
@@ -972,6 +980,9 @@
if (oggz_stat_regular (statbuf.st_mode)) {
offset_end = statbuf.st_size;
+#ifdef DEBUG
+ printf ("oggz_seek_set: stat size %ld\n", offset_end);
+#endif
} else {
/*oggz_set_error (oggz, OGGZ_ERR_NOSEEK);*/
@@ -1023,7 +1034,7 @@
for ( ; ; ) {
#ifdef DEBUG
- printf ("oggz_seek_set: [A] want u%ld: (u%ld - u%ld) [@%ld - @%ld]\n",
+ printf ("oggz_seek_set: [A] want u%lld: (u%lld - u%lld) [@%ld - @%ld]\n",
unit_target, unit_begin, unit_end, offset_begin, offset_end);
#endif
@@ -1044,6 +1055,10 @@
offset_begin, offset_end);
}
+#ifdef DEBUG
+ printf ("oggz_seek_set: guessed %ld\n", offset_guess);
+#endif
+
offset_at = oggz_seek_raw (oggz, offset_guess, SEEK_SET);
if (offset_at == -1) {
goto notfound;
@@ -1051,6 +1066,10 @@
offset_next = oggz_get_next_start_page (oggz, og);
+#ifdef DEBUG
+ printf ("oggz_seek_set: offset_next %ld\n", offset_next);
+#endif
+
if (unit_end == -1 && offset_next == -2) { /* reached eof, backtrack */
offset_next = oggz_get_prev_start_page (oggz, og, &granule_at,
&serialno);
@@ -1069,7 +1088,7 @@
goto notfound;
}
- if (offset_next < offset_end) {
+ if (offset_next > offset_end) {
offset_next =
oggz_scan_for_page (oggz, og, unit_target, offset_begin, offset_end);
if (offset_next < 0) goto notfound;
@@ -1105,7 +1124,7 @@
found:
#ifdef DEBUG
- printf ("FOUND (%ld)\n", unit_at);
+ printf ("oggz_seek_set: FOUND (%ld)\n", unit_at);
#endif
offset_at = oggz_reset (oggz, offset_at, unit_at, SEEK_SET);
@@ -1115,7 +1134,7 @@
notfound:
#ifdef DEBUG
- printf ("NOT FOUND\n");
+ printf ("oggz_seek_set: NOT FOUND\n");
#endif
oggz_reset (oggz, offset_orig, -1, SEEK_SET);
--
conrad
More information about the cvs-annodex
mailing list