Check the EOF flag on zero reads.
[ruby-vorbistagger.git] / 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);
 
-               if (!bytes)
+               if (!bytes && feof (s->in))
                        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);
 
-               if (!bytes && i < 2) {
+               if (!bytes && feof (state->in) && i < 2) {
                        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);
 
-               if (!bytes)
-                       state->eosin = 1;
+               state->eosin = !bytes && feof (state->in);
        }
 
        fclose (out);