bufread: Make it behave correctly.working_mob
authorNicolas Pennequin <nicolas.pennequin@free.fr>
Sat, 4 Aug 2007 19:14:47 +0000 (4 21:14 +0200)
committerNicolas Pennequin <nicolas.pennequin@free.fr>
Sat, 4 Aug 2007 19:14:47 +0000 (4 21:14 +0200)
* Correct the behaviour towards the end of the file (it simply wasn't detected).
* Don't advance the buffer reading pointer.
* Don't change h->available !!

Tested successfully on target (gigabeat) and in the sim.

testplugin.c

index 64457a5..13319ae 100644 (file)
@@ -599,7 +599,7 @@ ssize_t bufread(int handle_id, size_t size, char *dest)
     if (h->available == 0 && h->filerem == 0) /* File is finished reading */
         return 0;
 
-    buffered_data = MIN(size, h->available);
+    buffered_data = MIN(size, h->available - RINGBUF_SUB(h->ridx, h->data));
 
     if (h->ridx + buffered_data > buffer_len)
     {
@@ -609,8 +609,6 @@ ssize_t bufread(int handle_id, size_t size, char *dest)
     }
     else rb->memcpy(dest, &buffer[h->ridx], buffered_data);
 
-    h->ridx = RINGBUF_ADD(h->ridx, buffered_data);
-    h->available -= buffered_data;
     return buffered_data;
 }