printf icon indicating copy to clipboard operation
printf copied to clipboard

Kleinere Bugs

Open MIchaelKopka opened this issue 4 years ago • 3 comments

Hi Marco, gute Arbeit! Ich habe die Funktionen auf einen PIC32 (MIPS Architektur) erprobt. Dabei sind mir zwei Problemchen aufgefallen.

  1. In _etoa wird im Original eine 'Wandlung' uint64_t in double eingeführt. union { uint64_t U; double F; } conv;

double ist auf einem PIC32 32 Bit lang.

Korrekt wäre hier union { uint64_t U; long double F; } conv;


  1. Dies ist ein schwerwiegendes Problemchen :

Am Ende von _vsnprintf wird der Ausgabestring mit 0 terminiert.

Im Original mit : out((char)0, buffer, idx < maxlen ? idx : maxlen - 1U, maxlen);

Hier gibt es einen Mix für maxlen als (int) und (unsigned int). In der Original Version führt dies dazu, dass der Terminator nicht ans Ende des Strings sondern zwei Zeichen vor dem String gesetzt wird. In einem anderen Betrag wird dies, glaub ich, auch angesprochen. (Wenn der Ausgabe String auf dem Stack liegt gibt es nette und schwer zu findende Effekte..) Besser wäre if (idx < (unsigned int)maxlen) out((char)0, buffer, idx, (unsigned int)maxlen); else out((char)0, buffer, (unsigned int)maxlen - 1, (unsigned int)maxlen);

Ich habe nicht alle Beträge gelesen. Ggf. wurden die Problemchen schon angesprochen. Es kann sich hier auch um PIC32 (MIPS) spezielle Effekte handeln.

Nochmal danke für die Arbeit!

LG Michael

MIchaelKopka avatar Dec 06 '20 08:12 MIchaelKopka

Regarding 2., are you referring to this line? Because it seems that idx and maxlen are both size_t in that function.

vgrudenic avatar Dec 22 '20 21:12 vgrudenic

Hello vgrudenic you are absolutely right. I had a problem with my compiler and the size_t definition. If size_t, corresponding to C99, is correctly interpreted as "unsigned int" it works of course. Sorry for my confusion!

MIchaelKopka avatar Dec 26 '20 10:12 MIchaelKopka

@MIchaelKopka : About problem #1 - if I am not mistaken, long double is not 64 bits on all platforms.

eyalroz avatar Jul 14 '21 21:07 eyalroz