Check the EOF flag on zero reads.
authorTilman Sauerbeck <tilman@code-monkey.de>
Thu, 17 Aug 2006 17:27:43 +0000 (19:27 +0200)
committerTilman Sauerbeck <tilman@code-monkey.de>
Wed, 23 Aug 2006 17:39:15 +0000 (19:39 +0200)
ext/vcedit.c

index 795b0c3e1011510a60f18aa2eed53ef694c1b3db..70eae0591af0e91ac5dee35e9858fb3aaa7e80cf 100644 (file)
@@ -240,7 +240,7 @@ _fetch_next_packet (vcedit_state *s, ogg_packet *p, ogg_page *page)
                bytes = fread (buffer, 1, CHUNKSIZE, s->in);
                ogg_sync_wrote (&s->oy, bytes);
 
                bytes = fread (buffer, 1, CHUNKSIZE, s->in);
                ogg_sync_wrote (&s->oy, bytes);
 
-               if (!bytes)
+               if (!bytes && feof (s->in))
                        return 0;
        }
 
                        return 0;
        }
 
@@ -355,7 +355,7 @@ vcedit_open (vcedit_state *state)
                buffer = ogg_sync_buffer (&state->oy, CHUNKSIZE);
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
 
                buffer = ogg_sync_buffer (&state->oy, CHUNKSIZE);
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
 
-               if (!bytes && i < 2) {
+               if (!bytes && feof (state->in) && i < 2) {
                        ret = VCEDIT_ERR_INVAL;
                        goto err;
                }
                        ret = VCEDIT_ERR_INVAL;
                        goto err;
                }
@@ -536,8 +536,7 @@ vcedit_write (vcedit_state *state)
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
                ogg_sync_wrote (&state->oy, bytes);
 
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
                ogg_sync_wrote (&state->oy, bytes);
 
-               if (!bytes)
-                       state->eosin = 1;
+               state->eosin = !bytes && feof (state->in);
        }
 
        fclose (out);
        }
 
        fclose (out);