{
vcedit_error ret;
char *buffer;
- int bytes, i;
- int chunks = 0;
+ size_t bytes, total = 0;
+ int i;
ogg_packet *header;
ogg_packet header_main, header_comments, header_codebooks;
ogg_page og;
ogg_sync_init (&state->oy);
- while (1) {
- buffer = ogg_sync_buffer (&state->oy, CHUNKSIZE);
- bytes = fread (buffer, 1, CHUNKSIZE, state->in);
-
- ogg_sync_wrote (&state->oy, bytes);
-
- if (ogg_sync_pageout (&state->oy, &og) == 1)
- break;
-
+ do {
/* Bail if we don't find data in the first 40 kB */
- if (chunks++ >= 10) {
+ if (feof (state->in) || total >= (CHUNKSIZE * 10)) {
ogg_sync_clear (&state->oy);
return VCEDIT_ERR_INVAL;
}
- }
+
+ buffer = ogg_sync_buffer (&state->oy, CHUNKSIZE);
+
+ bytes = fread (buffer, 1, CHUNKSIZE, state->in);
+ total += bytes;
+
+ ogg_sync_wrote (&state->oy, bytes);
+ } while (ogg_sync_pageout (&state->oy, &og) != 1);
state->serial = ogg_page_serialno (&og);