Re: Pseudo-FILE

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: Pseudo-FILE
Bonsoir !

Frédéric a écrit :
> Ci-joint mon code C ; est-ce qu'il y a un truc flagrant qui vous saute
> aux yeux ?


Trois petits détails :

  - Tu devrais pouvoir écrire dans un fichier même si celui-ci a atteint
    sa taille maximale, à condition de ne pas être positionné à la fin
    du fichier.


  - La position SEEK_END doit correspondre à la fin du fichier (c'est la
    position quand tu as tout lu), et non au dernier caractère de
    celui-ci.


  - fseek() ne renvoie une erreur que si la position qui résulte de
    l'opération demandée est négative. Ce n'est pas une erreur de se
    positionner après la fin du fichier.


Ci-jointes les modifications que je te suggère :

-- 8< ------------------------------------------------------------------
diff --git a/tmp/pid-3646/midi-buffer.c b/midi-buffer.c
index b970058..3dd1e38 100644
--- a/tmp/pid-3646/midi-buffer.c
+++ b/midi-buffer.c
@@ -18,7 +18,7 @@ int mbclose(struct midi_buffer *mb)

 int mbputc(uint8_t c, struct midi_buffer *mb)
 {
-    if (mb->size < MIDI_BUFFER_MAX_SIZE) {
+    if (mb->index < MIDI_BUFFER_MAX_SIZE) {
         mb->data[mb->index++] = c;
         if (mb->index > mb->size) {
             mb->size = mb->index;
@@ -84,14 +84,14 @@ int mbseek(struct midi_buffer *mb, long offset, int origin)
             break;


         case SEEK_END:
-            index = mb->size - 1 + offset;
+            index = mb->size + offset;
             break;


         default:
-            index = mb->size;  // to generate error
+            index = -1;  // to generate error
     }


-    if (index >= mb->size) {
+    if (index < 0) {
         return -1;
     }
     else {
-- 8< ------------------------------------------------------------------


À+,

Edgar.