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.